Sto eseguendo Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) su una VM 4 vCPU con max degree of parallelismimpostato su 2e cost threshold for parallelismimpostato 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_WhoIsActivemostrerà PAGEIOLATCH_SHattese o LATCH_EX [ACCESS_METHODS_DATASET_PARENT]attese e quando eseguo lo script WaitingTasks.sql di Paul Randal durante l'operazione mostra CXPACKETattese con i thread di lavoro che mostrano PAGEIOLATCH_SHattese:
* 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 statsin 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 statstabella). Una volta che il piano è tornato, è sostanzialmente istantaneo per il resto della giornata, anche dopo aver visto la maggior parte del statslogoramento 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.

