Udostępnij za pośrednictwem


Operacje wyzwalające skanowanie puli mogą działać wolno na komputerach z dużą ilością pamięci

W tym artykule opisano, jak skanowanie puli programu SQL Server może zająć dużo czasu na komputerach z dużą ilością pamięci.

Dotyczy: SQL Server
Oryginalny numer KB: 4566579

Symptomy

Niektóre operacje w programie Microsoft SQL Server wyzwalają skanowanie puli (pamięć podręczna przechowującą strony bazy danych w pamięci). W systemach z dużą ilością pamięci RAM (1 TB pamięci lub większej) skanowanie puli może zająć dużo czasu. Spowoduje to spowolnienie operacji, która wyzwoliła skanowanie.

Operacje, które powodują skanowanie puli buforów

Poniżej przedstawiono niektóre operacje, które mogą spowodować przeskanowanie puli buforowej:

  • Uruchamianie bazy danych
  • Zamykanie lub ponowne uruchamianie bazy danych
  • Przełączenie awaryjne grupy dostępności
  • Usuwanie bazy danych (upuszczanie)
  • Usuwanie plików z bazy danych
  • Pełna lub różnicowa kopia zapasowa bazy danych
  • Przywracanie bazy danych
  • Przywracanie dziennika transakcji
  • Przywracanie w trybie online
  • operacja DBCC CHECKDB lub DBCC CHECKTABLE

Dziennik błędów pokazuje, że skanowanie trwało długo

Począwszy od programu SQL Server 2016 SP3, PROGRAMU SQL Server 2017 CU23 i programu SQL Server 2019 CU9, do dziennika błędów programu SQL Server dodano komunikat o błędzie wskazujący, że skanowanie puli trwało długo (10 sekund lub dłużej):

Skanowanie puli trwało 14 sekund: identyfikator bazy danych 7, polecenie 'BACKUP DATABASE', operacja 'FlushCache', skanowane bufory 115, całkowita liczba iterowanych buforów 204640239, czas oczekiwania: 0 ms. Aby uzyskać więcej informacji, zobacz "https://go.microsoft.com/fwlink/?linkid=2132602".

Zdarzenie rozszerzone w celu zdiagnozowania długiego skanowania

Ponadto, począwszy od tych samych kompilacji SQL Server 2016 SP3, SQL Server 2017 CU23 i SQL Server 2019 CU9, wprowadzono zdarzenie rozszerzone buffer_pool_scan_complete, aby ułatwić identyfikowanie długich skanów puli buforów.

Jeśli skanowanie trwa ponad 1 sekundę, zdarzenie XEvent zostanie zarejestrowane w następujący sposób po włączeniu zdarzenia.

nazwa id_bazy_danych czas_trwania_ms polecenie operacja zeskanowane_bufory całkowita_iterowana_bufory
buffer_pool_scan_complete 7 1308 KOPIA ZAPASOWA BAZA DANYCH FlushCache 243 19932814

Uwaga

Próg w zdarzeniu XEvent jest mniejszy, aby umożliwić przechwytywanie informacji na bardziej szczegółowym poziomie.

Rozwiązanie

Przed programem SQL Server 2022 nie było możliwości wyeliminowania tego problemu. Nie zaleca się wykonywania żadnych działań w celu oczyszczenia puli buforów, ponieważ usunięcie czystych buforów (DBCC DROPCLEANBUFFERS) z puli buforów może spowodować znaczne pogorszenie wydajności. Usunięcie stron bazy danych z pamięci spowoduje kolejne wykonania zapytań w celu ponownego odczytania danych z plików bazy danych na dysku. Ten proces uzyskiwania dostępu do danych za pośrednictwem operacji we/wy dysku powoduje spowolnienie zapytań.

W programie SQL Server 2022 ten problem został zminimalizowany, ponieważ skanowania puli buforowej są zrównoleglone poprzez wykorzystanie wielu rdzeni. Będzie jedno zadanie na każde 8 milionów buforów (64 GB), w którym skanowanie szeregowe będzie nadal używane, jeśli jest mniej niż 8 milionów buforów. Aby uzyskać więcej informacji, obejrzyj Równoległe skanowanie puli buforowej.

Więcej informacji

Aby uzyskać więcej informacji na temat problemów, które mogą wystąpić w dużych pulach buforów, zobacz SQL Server: duża pamięć RAM i punkty kontrolne bazy danych.