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

Pamięć podręczna bufora:co to jest i jak wpływa na wydajność bazy danych?

W SQL Server bufor bufora to pamięć, która umożliwia szybkie wyszukiwanie często używanych danych. Gdy dane są zapisywane lub odczytywane z bazy danych SQL Server, menedżer buforów kopiuje je do bufora buforowego (czyli puli buforów). Kiedy jest pełny, starsze lub rzadziej używane strony danych są przenoszone na dysk twardy.

Dlaczego muszę monitorować bufor bufora?

Użycie pamięci może mieć znaczący wpływ na wydajność. Gdy brakuje pamięci, strony danych są często usuwane z bufora pamięci podręcznej. Spowalnia to zapytania, ponieważ SQL Server musi przejść na dysk, aby znaleźć stronę danych, przywrócić ją do bufora pamięci podręcznej, a następnie odczytać stronę, zanim zwróci wyniki zapytania.

Istnieje wiele powodów, dla których zapytania zaczynają działać powoli. Ale jeśli chcesz wykluczyć problemy z pamięcią, spójrz na to, co dzieje się w pamięci podręcznej bufora. Zajrzenie do niego pozwoli określić, która baza danych, tabela lub indeks pochłania pamięć i wywiera presję na bufor.

Aby zobaczyć, która baza danych zużywa najwięcej pamięci, użyj zapytania:

SELECTCASE database_idWHEN 32767 THEN 'ResourceDb'ELSE db_name(database_id)END AS database_name, COUNT(1)/128 AS megabytes_in_cacheFROM sys.dm_os_buffer_descriptorsGROUP BY DB_NAME(database_id) ,database_idORDER_in_cache DESI 

Aby zidentyfikować tabelę lub indeks, który zużywa najwięcej pamięci, uruchom to zapytanie w bazie danych, którą chcesz sprawdzić:

 SELECT COUNT(1)/128 AS megabytes_in_cache, nazwa , index_idFROM sys.dm_os_buffer_descriptors AS bdINNER JOIN (SELECT nazwa_obiektu (object_id) AS nazwa, index_id ,allocation_unit_idFROM sys.allocation_units AS auINNER auINNER JOIN JOIN . .hobt_idAND (au.type =1 OR au.type =3)UNION ALLSELECT object_name(object_id) AS name,index_id,location_unit_idFROM sys.allocation_units AS auINNER DOŁĄCZ sys.partitions AS pON au.container_id =p.partition_id2AND au.type ) AS objON bd.allocation_unit_id =obj.allocation_unit_idGDZIE database_id =DB_ID()GROUP BY name, index_idORDER BY megabajty_in_cache DESC;

Zarządzaj pamięcią za pomocą wskaźników

Chociaż pomocne jest wyrywkowe sprawdzanie baz danych i indeksów pod kątem nadmiernego wykorzystania pamięci, śledzenie metryk pamięci podręcznej bufora jest naprawdę najlepszym sposobem na zidentyfikowanie i rozwiązanie problemów z wydajnością spowodowanych wewnętrznym obciążeniem pamięci.

Oto pięć najważniejszych wskaźników, które należy monitorować w celu poprawy problemów z wydajnością związanych z pamięcią:

1. Współczynnik trafień w pamięci podręcznej bufora

  • Ta metryka pokazuje, w jaki sposób SQL Server wykorzystuje pamięć podręczną bufora
  • Współczynnik trafień określa procent żądań stron, które zostały wypełnione przez strony danych z pamięci podręcznej bufora w porównaniu do wszystkich żądań stron danych
  • Strony, które nie zostały znalezione w buforze pamięci podręcznej, są odczytywane z dysku, co jest znacznie wolniejsze
  • Idealny współczynnik bufora bufora to 100 (tj. SQL Server odczytuje wszystkie strony z bufora bufora i żadnej z dysku)
  • Zalecana wartość pamięci podręcznej bufora jest większa niż 90

2. Oczekiwana długość życia strony (PLE)

  • Oczekiwana długość życia strony mierzy, jak długo (w sekundach) strona danych pozostaje w pamięci podręcznej bufora
  • Im dłuższy PLE, tym większa szansa, że ​​SQL Server odczyta strony z bufora pamięci podręcznej i nie będzie musiał iść na dysk
  • Jeśli nie ma wystarczającej ilości pamięci, strony danych są częściej usuwane z pamięci podręcznej bufora, aby zwolnić miejsce na nowe strony
  • Historycznie, gdy systemy miały znacznie mniej pamięci niż teraz, „normalna” wartość PLE wynosiła 300 sekund
  • Dzisiaj stosuje się wzór do określenia „dobrego” PLE:Oczekiwana długość życia strony =300 sekund na każde 4 GB pamięci RAM na serwerze
  • PLE powinien pozostać stabilny, jeśli jest monitorowany w czasie
  • Szybkie, częste spadki wskazują na problemy z pamięcią
  • Spadek o ponad 50% powinien być natychmiast zbadany

3. Odczyty strony/s (poziom serwera)

  • Ta metryka pokazuje, ile fizycznych odczytów (tj. odczytów z dysku) wystąpiło w ciągu jednej sekundy we wszystkich bazach danych w instancji
  • Odczyty fizyczne są drogie i powolne
  • Zmniejsz fizyczne odczyty, używając większej pamięci podręcznej danych, inteligentnych indeksów i bardziej wydajnych zapytań lub zmieniając projekt bazy danych
  • Zalecana wartość to mniej niż 90
  • Wartość wyższa niż 90 wskazuje na niewystarczającą pamięć i problemy z indeksowaniem

4. Zapisy strony/s

  • Ten wskaźnik pokazuje, ile razy strony zostały zapisane na dysku na poziomie serwera w ciągu jednej sekundy
  • Zalecana wartość to mniej niż 90

5. Wejście stron/s i Wyjście stron/s (liczniki pamięci)

  • Wprowadzanie stron/s to liczba stron pobieranych z dysku co sekundę
  • Wyjście stron/s to liczba stron zapisywanych na dysk co sekundę, aby zrobić miejsce w buforze podręcznym
  • Strony/s to suma stron wejściowych/sek. i stron wyjściowych/sek.
  • Jeśli wartość stron na sekundę stale przekracza 50, potrzebne jest dodatkowe badanie

Prawidłowa pamięć podręczna bufora jest ważnym elementem optymalizacji szybkości zapytań SQL Server. Chociaż problemy z pamięcią to tylko jeden z kilku czynników, które mogą spowolnić odpowiedzi na zapytania, są one dość łatwe do zidentyfikowania i rozwiązania. Śledzenie tych pięciu kluczowych wskaźników może pomóc w dłuższym utrzymaniu stron danych w puli buforów, dzięki czemu SQL Server nie musi tracić czasu na przeszukiwanie dysku przed zwróceniem wyników zapytania.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest odpowiednik funkcji IsNull() w programie SQL Server w Oracle?

  2. Czy istnieje LastIndexOf w SQL Server?

  3. Skrypt do zabijania wszystkich połączeń z bazą danych (więcej niż RESTRICTED_USER ROLLBACK)

  4. Błąd serwera SQL 109:W instrukcji INSERT jest więcej kolumn niż wartości określonych w klauzuli VALUES

  5. Jak wybrać pierwszy dzień miesiąca w SQL?