Używam Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) na maszynie wirtualnej 4 vCPU z max degree of parallelism
ustawioną 2
i cost threshold for parallelism
ustawioną na 50
.
Rano, gdy próbuję wyświetlić szacunkowy plan wykonania dla zapytania SELECT TOP 100 , napotykam ogromne oczekiwania, a operacja renderowania szacowanego planu zajmuje minuty, często w zakresie 5-7 minut. Ponownie, to nie jest faktyczne wykonanie zapytania, to tylko proces wyświetlania Szacowanego Planu Wykonania .
sp_WhoIsActive
pokaże albo PAGEIOLATCH_SH
czeka albo LATCH_EX [ACCESS_METHODS_DATASET_PARENT]
czeka, a kiedy uruchomię skrypt WaitingTasks.sql Paula Randala podczas operacji, wyświetla CXPACKET
oczekiwania z wątkami roboczymi pokazującymi PAGEIOLATCH_SH
oczekiwania:
* pole opisu zasobu = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen
Wątki robocze wyglądają stats
na zapamiętywanie całej tabeli (ponieważ te numery stron, a także kolejne numery stron pokazane w zapytaniu Paula Randala z powrotem do klucza klastrowego stats
tabeli). Po powrocie planu jest on w zasadzie natychmiastowy przez resztę dnia, nawet po tym, jak widzę większość stats
ścierania tabeli z pamięci podręcznej i pozostały tylko różne rekordy (które, jak zakładam, zostały pobrane z powodu operacji wyszukiwania z podobnych zapytań).
Oczekiwałbym tego początkowego zachowania, gdyby zapytanie faktycznie było wykonywane przy użyciu planu korzystającego z operatorów SCAN, ale dlaczego robi to, oceniając plany wykonania, aby dotrzeć do operatora SEEK, jak pokazano w powyższym planie? Co mogę zrobić (oprócz uruchamiania tego wyciągu przed godzinami pracy, aby moje dane były odpowiednio buforowane), aby poprawić wydajność tutaj? Zakładam, że para indeksów obejmujących byłaby korzystna, ale czy naprawdę gwarantowałyby jakiekolwiek zmiany w zachowaniu? Muszę tu pracować w ramach pewnych ograniczeń okna przechowywania i konserwacji, a samo zapytanie jest generowane z rozwiązania dostawcy, więc wszelkie inne sugestie (oprócz lepszego indeksowania) byłyby w tym momencie mile widziane.