Wiem, że tak naprawdę istnieją trzy rodzaje fragmentacji, o które muszę się martwić jako DBA:
Fragmentacja indeksu w plikach danych SQL, w tym fragmentacja indeksu klastrowego (tabeli). Zidentyfikuj to za pomocą DBCC SHOWCONTIG (w SQL 2000) lub sys.dm_ db_ index_ physical_ stats (w 2005+).
Fragmentacja VLF w plikach dziennika SQL. Uruchom DBCC LOGINFO, aby zobaczyć, ile VLF znajduje się w każdym pliku dziennika SQL.
Fizyczna fragmentacja plików bazy danych na dysku twardym. Zdiagnozuj to za pomocą narzędzia „Defragmentator dysków” w systemie Windows. (zainspirowany tym doskonałym postem na blogu )
Dużo uwagi poświęca się fragmentacji indeksu (patrz ta doskonała odpowiedź na błąd serwera autorstwa Paula Randalla), więc to nie jest sedno mojego pytania.
Wiem, że mogę zapobiec fragmentacji fizycznej (i fragmentacji VLF), gdy baza danych jest pierwotnie tworzona, poprzez zaplanowanie rozsądnego oczekiwanego pliku danych i rozmiaru dziennika, ponieważ fragmentacja ta występuje najczęściej z powodu częstych wzrostów i spadków, ale mam pytania dotyczące tego, jak to naprawić fragmentacja fizyczna po zidentyfikowaniu:
Po pierwsze, czy fragmentacja fizyczna jest nawet istotna w sieci SAN dla przedsiębiorstw? Czy mogę / powinienem używać Windows Defragmenter na dysku SAN, czy zespół SAN powinien używać wewnętrznych narzędzi do defragmentacji? Czy analiza fragmentacji, którą otrzymuję z narzędzia Windows, jest dokładna nawet po uruchomieniu na dysku SAN?
Jak dużym problemem jest fizyczne rozdrobnienie wydajności SQL? (Załóżmy, że macierz napędów wewnętrznych oczekuje na wynik poprzedniego pytania.) Czy jest to WIĘKSZA transakcja niż wewnętrzna fragmentacja indeksu? Czy jest to naprawdę ten sam problem (napęd musi wykonywać losowe odczyty zamiast odczytów sekwencyjnych)
Czy defragmentacja (lub odbudowa) indeksuje stratę czasu, jeśli dysk jest fizycznie rozdrobniony? Czy muszę to naprawić, zanim zwrócę się do drugiego?
Jaki jest najlepszy sposób naprawy fizycznej fragmentacji plików na produkcyjnym polu SQL? Wiem, że mogę wyłączyć usługi SQL i uruchomić Windows Defrag, ale słyszałem także o technice polegającej na wykonaniu pełnej kopii zapasowej, upuszczeniu bazy danych, a następnie przywróceniu jej z pustego dysku. Czy ta ostatnia technika jest zalecana? Czy przywracanie z takiej kopii zapasowej również buduje indeksy od zera, eliminując wewnętrzną fragmentację indeksu? Czy może po prostu przywraca kolejność stron w taki sam sposób, jak w momencie tworzenia kopii zapasowej? (Jeśli to ważne, korzystamy z kopii zapasowych Quest Lightspeed z kompresją).
AKTUALIZACJA : Jak dotąd dobre odpowiedzi na pytanie, czy defragmentować dyski SAN (NIE) i czy defragmentacja indeksu jest nadal opłacalna na dyskach fizycznie pofragmentowanych (TAK).
Czy ktoś jeszcze zastanawia się nad najlepszymi metodami przeprowadzania defragmentacji? A może szacunkowy czas oczekiwania na defragmentację dużego pofragmentowanego dysku, powiedzmy 500 GB? Jest to oczywiście istotne, ponieważ właśnie wtedy mój serwer SQL przestanie działać!
Również jeśli ktoś ma jakieś niepotwierdzone informacje na temat ulepszeń wydajności SQL wprowadzonych przez naprawienie fragmentacji fizycznej, to też byłoby świetnie. W blogu Mike'a jest mowa o wykryciu problemu, ale nie jest on konkretny odnośnie tego, jaką poprawę wprowadził.