Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Brent Ozar wyjaśnia wewnętrzną i zewnętrzną fragmentację SQL Server

Według Microsoft SQL Master, Brenta Ozara, przez całą swoją karierę podejmował on okropne decyzje dotyczące dostosowywania wydajności bazy danych. Na szczęście dla nas możemy skorzystać na jego błędach i nie musimy wszystkiego domyślać się sami. Podzielił się swoją ciężko zdobytą wiedzą za darmo podczas serii webcastów Quest’s Database Training Days.

Podczas jednej z jego sesji dowiedzieliśmy się „Dlaczego defragmentacja indeksów nie pomaga”. W rzeczywistości może to pogorszyć wydajność Twojej bazy danych, a Brent wyjaśnił nam, dlaczego. Po drodze podkreślił, jak ważne jest, aby wiedzieć, co mierzysz, jeśli chodzi o optymalizację wydajności SQL Server.

Wewnętrzna i zewnętrzna fragmentacja

Brent dał nam krótki samouczek dotyczący sposobu, w jaki SQL Server przechowuje dane na „stronach” o wielkości 8 KB. W nowym lub przebudowanym indeksie wszystkie strony są pełne i przechowywane w odpowiedniej kolejności. Jednak w miarę dodawania większej ilości danych strony ulegają podziałowi:nie wszystkie strony są pełne i występują niewłaściwie. To jest istotna różnica między fragmentacją wewnętrzną a zewnętrzną:

  • Zewnętrzna fragmentacja – odnosi się do stron, które są niesprawne
  • Wewnętrzna fragmentacja – odnosi się do pustego miejsca na stronie

Mniejsze skupienie się na podziałach na stronie

Wielu specjalistów od baz danych skupia się na podziałach stron jako mierze fragmentacji bazy danych, jednak Brent wyjaśnił, że liczba ta jest bez znaczenia, ponieważ podziały stron występują zarówno podczas dodawania nowego wiersza do pustej tabeli, jak i podczas dodawania nowej strony. Więc to w końcu nie jest pomocne.

Jak fragmentacja zewnętrzna może pogorszyć sytuację

Podczas tej sesji Brent zapewnił, że zewnętrzna fragmentacja nie jest użyteczną miarą wydajności bazy danych, ponieważ kolejność stron nie ma dużego wpływu na szybkość zadań konserwacyjnych, uruchamiania zapytań w pamięci RAM czy odczytywania danych z dysku. Tak więc specjaliści od baz danych, którzy próbują naprawić zewnętrzną fragmentację, reorganizując i odbudowując indeksy, w rzeczywistości pogarszają wydajność, zwiększając liczbę kopii zapasowych i zużywając więcej czasu na konserwację.

Specjaliści od baz danych, którzy próbują zmniejszyć zewnętrzną fragmentację, pozostawiając miejsce na stronach poprzez ustawienie współczynnika wypełnienia, również powodują problem gorszy niż ten, który próbują naprawić. Dzieje się tak głównie dlatego, że prawie nigdy nie trzeba wstawiać danych w punkcie w środku indeksu. Tak więc próba utrzymania porządku na stronach poprzez umieszczanie mniejszej ilości danych na każdej stronie powoduje w rzeczywistości wewnętrzną fragmentację.

Czas oczekiwania na monitorowanie

Co powinieneś zrobić zamiast tego? Brent zaleca ustawienie współczynnika wypełnienia na domyślną wartość 100% (lub co najmniej 80% lub więcej), a następnie przebudowanie indeksów w celu ich ponownego spakowania. Następnie skup się na monitorowaniu właściwego numeru dostrajania wydajności – czasu oczekiwania. Jednym z najlepszych sposobów przeglądania różnych aspektów czasu oczekiwania w instancjach bazy danych jest użycie narzędzia do monitorowania wydajności, aby dokładnie określić, gdzie procesy się ugrzęzły.

Aby uzyskać jeszcze więcej informacji Brent na temat fragmentacji indeksu, statystyk czasu oczekiwania i tego, co należy zrobić w zakresie konserwacji indeksu, słuchaj transmisji internetowej na żądanie.

Możesz również uzyskać dostęp do dodatkowych porad ekspertów na temat wydajności bazy danych w ramach Dni szkoleniowych w zakresie baz danych firmy Quest.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Do czego służy tabela systemowa master..spt_values ​​i jakie jest znaczenie jej wartości?

  2. Dlaczego użycie znaku podkreślenia w filtrze LIKE daje mi wszystkie wyniki?

  3. Konwertuj format daty na format DD/MMM/RRRR w SQL Server

  4. Jak zmienić nazwę tabeli w SQL Server

  5. wybierz * z tabeli vs wybierz colA, colB, itp. z tabeli ciekawe zachowanie w SQL Server 2005