Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
lubDBCC 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.