He estado profundizando en el almacén de consultas de SQL Server y a menudo veo referencias a consultas 'ad-hoc'. Sin embargo, no he visto lo que el almacén de consultas determina que sea una consulta ad-hoc. He visto lugares donde se podría inferir que es una consulta sin parámetros o una consulta ejecutada solo una vez. ¿Existe una definición formal para esto? No me refiero en general. Me refiero a lo que se refiere a la tienda de consultas.
Como ejemplo, esta página muestra un ejemplo de eliminación de consultas ad-hoc del almacén de consultas, pero parece que el criterio que está utilizando es un recuento de ejecución de solo uno. Esto parece ser una definición extraña de una consulta ad-hoc. Por cierto, si va a la página, busque 'Eliminar consultas ad-hoc'.
fuente
Respuestas:
Después de un poco de búsqueda, no pude encontrar una fuente concreta y satisfactoria de la documentación de Microsoft para responder esta pregunta. Hay muchas buenas descripciones de terceros y definiciones de adhoc / ad-hoc / ad hoc, pero para la especificidad de esta pregunta, creo que una cercana a la fuente es ideal.
Pasando definiciones genéricas (pero aún precisas) como esta publicación SO (gracias SqlWorldWide), si miramos lo que dice la documentación sobre el tema, está de acuerdo con lo que ha mencionado sobre la definición basada en el número de ejecuciones Creo que hasta el punto podemos tomarlo como un hecho.
El artículo sobre optimización para flujos de trabajo ad hoc dice:
Por lo tanto, parece que la opción de configuración del servidor de consultas ad hoc también utiliza la definición de una ejecución única como la definición de ad hoc. Si la consulta continúa ejecutándose y genera el mismo plan, ya no se tratará como tal.
El artículo sobre Mejores prácticas para Query Store también se alinea con esto,
Esto, por supuesto, es para consultas que aún no se utilizan como procedimientos almacenados, parametrizados, etc. porque pueden reconocerse y tratarse de manera adecuada desde el principio.
Entonces, en base a todo esto, podemos decir que una consulta se trata como ad hoc si:
fuente
Para consultas ad-hoc, la columna object_id en el
sys.query_store_query
DMV será 0, como se indica en la documentación sys.query_store_query :Puede identificar consultas ad-hoc en función de ese valor, aunque no se indique explícitamente como "esta es la definición de consultas ad-hoc ". :)
fuente
El término ad-hoc se usa para referirse a consultas que solo se han ejecutado una vez. Esto es coherente con la definición utilizada para la configuración de la base de datos "Optimizar para cargas de trabajo ad-hoc".
El enlace que hace referencia a la eliminación de consultas ad-hoc incluye esta definición específica "Eliminar consultas ad-hoc: esto elimina las consultas que solo se ejecutaron una vez y que tienen más de 24 horas".
fuente
Ad-hoc de sys.dm_exec_cached_plans del DMV
objtype
columna en docs.microsoft.com.Un uso de esta columna es ver en caso de consultas con múltiples planes para ver si los múltiples planes son causados por
Adhoc
.fuente