Jestem po pewnym potwierdzeniu tego pomysłu naprawienia źle działającej bazy danych lub lepszej sugestii, jeśli ktoś ją posiada. Zawsze otwarci na lepsze sugestie.
Mam bardzo dużą bazę danych (ponad 20 milionów rekordów rosnących o około 1/2 miliona dziennie), które używają GUID jako PK.
Niedopatrzenie z mojej strony, ale PK jest zgrupowane na serwerze SQL i powoduje problemy z wydajnością.
Powód przewodnika - ta baza danych jest częściowo zsynchronizowana ze 150 innymi bazami danych, więc PK musiał być unikalny. Synchronizacja nie jest zarządzana przez SQL Server, ale jest zbudowany niestandardowy proces, który utrzymuje dane w synchronizacji dla wymagań systemu - wszystko na podstawie tego identyfikatora GUID.
Każda ze 150 zdalnych baz danych nie przechowuje pełnych danych przechowywanych w centralnej bazie danych SQL. przechowują tylko podzbiór danych, których faktycznie potrzebują, a wymagane dane nie są dla nich unikalne (10 ze 150 baz danych może mieć na przykład niektóre te same rekordy z baz danych innych witryn - współużytkują). Ponadto - dane są generowane w odległych lokalizacjach - nie w centralnym punkcie - stąd potrzeba GUID.
Centralna baza danych służy nie tylko do synchronizacji wszystkiego, ale zapytania od ponad 3000 użytkowników będą wykonywane względem tej bardzo dużej pofragmentowanej bazy danych. Jest to już duży problem w początkowych testach.
Na szczęście nie jesteśmy jeszcze na żywo - więc mogę wprowadzać zmiany i przestawiać je w razie potrzeby w trybie offline, co jest przynajmniej czymś.
Wydajność zdalnych baz danych nie stanowi problemu - podzbiory danych są dość małe, a baza danych zwykle nigdy nie przekracza łącznie 1 GB. Rekordy są dość regularnie przekazywane do głównego systemu i usuwane z mniejszych płyt BD, gdy nie są już potrzebne.
Wydajność centralnej bazy danych, która przechowuje wszystkie rekordy, jest żałosna - ze względu na klastrowy identyfikator GUID jako klucz podstawowy dla tak wielu rekordów. Fragmentacja indeksu jest wyłączona z wykresów.
Tak więc - myślami, aby rozwiązać problem z wydajnością, należy utworzyć nową kolumnę - Nie podpisano BIGINT TOŻSAMOŚĆ (1,1), a następnie zmienić klastrowane PK tabeli BIGINT kolumny.
Utworzyłbym unikalny indeks nieklastrowany w polu GUID, który był kluczem podstawowym.
Mniejsze zdalne 150 baz danych nie musi wiedzieć o nowej PK w bazie danych Central SQL Server - będzie ona służyć wyłącznie do organizowania danych w bazie danych i zatrzymania złej wydajności i fragmentacji.
Czy to zadziała i poprawi wydajność centralnej bazy danych SQL i zapobiegnie przyszłej fragmentacji indeksu (do pewnego stopnia)? czy może przegapiłem tutaj coś bardzo ważnego, co podskoczy i ugryzie mnie i spowoduje jeszcze większy smutek?
int
za 4255 dni (11,5 lat). Gdyby to zrobił,