Sto eseguendo Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) su una VM 4 vCPU con max degree of parallelism
impostato su 2
e cost threshold for parallelism
impostato su 50
.
Al mattino, quando provo a visualizzare un piano di esecuzione stimato per una query SELECT TOP 100 , mi imbatto in enormi attese e l'operazione di rendering del piano stimato richiede minuti, spesso volte nell'intervallo 5-7 minuti. Ancora una volta, questa non è l'esecuzione effettiva della query, questo è solo il processo per visualizzare un piano di esecuzione stimato .
sp_WhoIsActive
mostrerà PAGEIOLATCH_SH
attese o LATCH_EX [ACCESS_METHODS_DATASET_PARENT]
attese e quando eseguo lo script WaitingTasks.sql di Paul Randal durante l'operazione mostra CXPACKET
attese con i thread di lavoro che mostrano PAGEIOLATCH_SH
attese:
* campo descrizione risorsa = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen
I thread di lavoro sembrano riportare stats
in memoria l'intera tabella (poiché i numeri di pagina così come i successivi numeri di pagina mostrati dalla query di Paul Randal puntano nuovamente alla chiave cluster per la stats
tabella). Una volta che il piano è tornato, è sostanzialmente istantaneo per il resto della giornata, anche dopo aver visto la maggior parte del stats
logoramento della tabella dalla cache con solo alcuni record rimanenti (che presumo siano stati estratti a causa della ricerca di operazioni da query simili).
Mi aspetterei questo comportamento iniziale se la query si stesse effettivamente eseguendo con un piano che utilizzava gli operatori SCAN, ma perché lo fa quando si valutano i piani di esecuzione per arrivare solo a un operatore SEEK come mostrato nel piano sopra collegato? Cosa posso fare (oltre a eseguire questa dichiarazione prima dell'orario di ufficio in modo che i miei dati siano opportunamente memorizzati nella cache) per migliorare le prestazioni qui? Suppongo che una coppia di indici di copertura sarebbe utile, ma garantirebbero davvero qualsiasi cambiamento nel comportamento? Devo lavorare con alcune limitazioni della finestra di archiviazione e manutenzione qui e la query stessa viene generata da una soluzione del fornitore, quindi qualsiasi altro suggerimento (oltre a una migliore indicizzazione) sarebbe il benvenuto a questo punto.