Encuentra todas las consultas ejecutadas recientemente en una base de datos

21

[Soy un programador T-SQL de nivel principiante]
[... y espero estar en el sitio de intercambio de pila correcto]

Me gustaría obtener una lista de todas las consultas que ejecuté (por lo menos, las que ejecuté hoy desde la mañana). Necesito hacer un informe sobre los tiempos de ejecución de las consultas.

La búsqueda en línea no me dio mucha información útil. La única consulta que encontré en línea que parecía bastante cercana es

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

Esta consulta arrojó algunos resultados extraños (la mayoría de los cuales fueron un montón de sprocs). Además, todos estos resultados muestran consultas ejecutadas desde hoy por la tarde (necesito consultas desde la mañana).

No pude encontrar nada en las preguntas anteriores (si ya se ha hecho una pregunta similar, indíquemela).

Vi algunas sugerencias con respecto al Analizador de SQL, pero supongo que el analizador me ayudaría solo si ya he comenzado el seguimiento (corríjame si estoy equivocado).

¿Puede alguien sugerirme cómo debo obtener una lista de todas las consultas que se han ejecutado en la base de datos desde la mañana (incluidos los tiempos de ejecución de la consulta) ...

[Sería útil (no un requisito) si también puedo obtener de alguna manera el nombre de usuario del usuario que ejecutó la consulta]

Prashanth Tilleti
fuente

Respuestas:

12

Esta consulta arrojó algunos resultados extraños (la mayoría de los cuales fueron un montón de sprocs). Además, todos estos resultados muestran consultas ejecutadas desde hoy por la tarde (necesito consultas desde la mañana).

Esto se debe a que está buscando en la memoria caché de procedimientos, y los planes que se usaron para la mañana ya no pueden vivir allí (debido a la presión de la memoria, el reinicio del servidor / instancia, la eliminación manual de la memoria caché de proceso, etc.).

La forma real de ejecutar las consultas en una instancia (o más específicamente en una base de datos) sería crear un seguimiento de SQL o una sesión de eventos extendidos. Creado correctamente, cualquiera de estos le dará la información que está buscando.

Si está buscando estadísticas de ejecución de esta mañana y solo esta mañana (es decir, configurar las implementaciones de monitoreo antes mencionadas como una tarea proactiva y que se debe hacer la próxima vez no es suficiente), a menos que ya se haya creado, no habrá de forma nativa para obtener esta información.

Para referencia futura, comience con un seguimiento de SQL que capture el evento SQL: StmtCompleted . En XE sería el sql_statement_completedevento.

En mi opinión, en lugar de continuar su búsqueda de restos de estadísticas de ejecución de consultas, comenzaría a dedicar tiempo a descubrir cómo volver a ejecutar la carga de trabajo que está tratando de medir. Pero esta vez antes de eso, configure el seguimiento / monitoreo adecuado.

Thomas Stringer
fuente
¿Puedo filtrar por SQL: columnas de datos StmtCompleted?
Kiquenet