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

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

  • Uruchamianie bazy danych
  • Zamykanie lub ponowne uruchamianie bazy danych
  • Tryb failover 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
  • DBCC CHECKDB lub DBCC CHECKTABLE operacja

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", przeskanowane 115, łączna liczba iterated 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 programu SQL Server 2016 SP3, PROGRAMU SQL Server 2017 CU23 i programu SQL Server 2019 CU9 wprowadzono zdarzenie rozszerzone buffer_pool_scan_complete , aby ułatwić identyfikowanie skanów puli długich.

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

name id_bazy_danych elapsed_time_ms polecenie rozdzielnicy scanned_buffers total_iterated_buffers
buffer_pool_scan_complete 7 1308 KOPIA ZAPASOWA BAZA DANYCH FlushCache 243 19932814

Uwaga 16.

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

Rozwiązanie

Przed programem SQL Server 2022 nie było możliwości wyeliminowania tego problemu. Nie zaleca się wykonywania żadnej akcji w celu wyczyszczenia puli jako upuszczania czystych (DBCC DROPCLEANBUFFERS) z puli może spowodować znaczne obniżenie 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ł rozwiązany, ponieważ skanowania puli są równoległe przez użycie wielu rdzeni. Będzie jedno zadanie na 8 milionów (64 GB), w którym będzie nadal używane skanowanie szeregowe, jeśli istnieje mniej niż 8 milionów. Aby uzyskać więcej informacji, zobacz Skanowanie równoległe puli.

Więcej informacji

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