Estoy ejecutando Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) en una máquina virtual de 4 vCPU con max degree of parallelism
set to 2
y cost threshold for parallelism
set to 50
.
Por las mañanas, cuando intento mostrar un Plan de ejecución estimado para una consulta SELECT TOP 100 , me encuentro con esperas masivas y la operación para representar el plan estimado toma minutos, a menudo en el rango de 5 a 7 minutos. Nuevamente, esta no es la ejecución real de la consulta, es solo el proceso para mostrar un Plan de ejecución estimado .
sp_WhoIsActive
mostrará PAGEIOLATCH_SH
esperas o LATCH_EX [ACCESS_METHODS_DATASET_PARENT]
esperas y cuando ejecuto el script WaitingTasks.sql de Paul Randal durante la operación, muestra CXPACKET
esperas con los hilos de trabajo que muestran PAGEIOLATCH_SH
esperas:
* campo de descripción del recurso = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen
Los subprocesos de trabajo parecen traer toda la stats
tabla a la memoria (ya que esos números de página y los números de página posteriores que se muestran desde el punto de consulta de Paul Randal vuelven a la clave agrupada para la stats
tabla). Una vez que el plan regresa, es básicamente instantáneo por el resto del día, incluso después de que veo la mayor parte de la stats
deserción de la tabla del caché con solo varios registros restantes (que supongo que se extrajeron debido a operaciones de búsqueda de consultas similares).
Esperaría este comportamiento inicial si la consulta se estuviera ejecutando realmente con un plan que utilizara operadores SCAN, pero ¿por qué lo hace al evaluar los planes de ejecución solo para llegar a un operador SEEK como se muestra en el plan vinculado anteriormente? ¿Qué puedo hacer (además de ejecutar esta declaración antes del horario de oficina para que mis datos se almacenen en la memoria caché adecuada) para ayudar a mejorar el rendimiento aquí? Supongo que un par de índices de cobertura sería beneficioso, pero ¿realmente garantizarían algún cambio en el comportamiento? Tengo que trabajar dentro de algunas limitaciones de la ventana de almacenamiento y mantenimiento aquí, y la consulta en sí se genera a partir de una solución del proveedor, por lo que cualquier otra sugerencia (además de una mejor indexación) sería bienvenida en este momento.
fuente