Mamy kilka baz danych z fragmentacją indeksu, która wynosi> 95%. Co najlepsze, mogę powiedzieć, że indeksy nigdy nie zostały odbudowane, a tym bardziej zreorganizowane. W latach.
(Mówiąc uczciwie, wydaje się, że te tabele mają włączoną automatyczną aktualizację statystyk. Ponadto, uczciwie, dokłada starań, aby tworzyć kopie zapasowe: pełne dzienniki i dzienniki trx co godzinę.)
Kiedy zapytałem, DBA powiedział, że niechętnie odbudowuje lub zmienia indeksy. Kiedy zapytałem dlaczego, tak naprawdę nie był w stanie tego wyrazić. W końcu powiedział, że martwi go potencjalna utrata danych. Na przykład jedna z baz danych jest używana przez naszą aplikację księgową Great Plains Dynamics i wydawał się bardzo zaniepokojony.
Nie jestem DBA, ale z tego, co przeczytałem, jego lęk wydaje mi się ... trudny do zrozumienia.
Nie jestem pewien, co dalej. Sugestie, jak powinienem postępować?
źródło
Odpowiedzi:
Odbudowanie indeksu bazy danych nie powinno spowodować utraty danych. Prawdopodobnie spowoduje to jednak znaczny spadek wydajności, ponieważ przebudowywane indeksy zwykle nie będą dostępne do użycia do czasu zakończenia odbudowy. Z tego powodu należy to zrobić poza godzinami pracy, gdy zagrożone systemy są bezczynne.
Paranoja to dobra rzecz w DBA - jeśli martwią się utratą danych, kazałbym im wykonać odpowiedni test kopii zapasowych (przywrócić je do osobnego systemu i upewnić się, że wszystkie dane są dostępne), a jeśli są Nadal zaniepokojone byłoby wykonanie pełnej kopii zapasowej przed odbudowaniem indeksów.
źródło
WITH (ONLINE=ON)
o ile indeks nie zawiera kolumn BLOBREINDEX
jako „konserwacja zapobiegawcza” w tabelach, w których zawartość indeksu bardzo się zmienia, jest całkiem ładna powszechne w moim doświadczeniu (jeśli indeks jest w większości statyczny, to mniej ważne)Nie ma ryzyka utraty danych w wyniku przebudowy lub defragmentacji indeksów.
źródło
Reorganizacja indeksów zajmie mniej czasu i mniej wysiłku ze strony serwera SQL, więc można to zrobić w instancjach typu weekend. Jeśli to, co mówisz, jest prawdą, nawet reorganizacja indeksów, które nigdy nie były, może mieć większy wpływ na serwer. Odbudowanie indeksów wymaga znacznego wysiłku od serwera SQL, ponieważ są one upuszczane i odbudowywane. Wykonanie przebudowy w ciągu tygodnia nie jest warte ryzyka, że serwer będzie zajęty indeksami i nie będzie obsługiwał osób z niego korzystających.
Zgadzam się z voretaq7, jeśli martwi go praca z indeksami, wypróbuj go na serwerach programistycznych lub testowych, aby zobaczyć, jak zareagują.
źródło
DROP INDEX
i ponowneCREATE INDEX
- nie jestem pewien co do SQL Server, ale wiem, że PostgreSQL czasami lepiej usuwa indeks i zaczyna od zera niż próbuje go odbudować (REINDEX
).