SQL Server是否跟踪执行的查询

时间:2018-04-19 10:02:29

标签: sql-server transactions

我们可以获取在特定过去一段时间内执行的所有sql server查询。例如,我们可以在过去5小时内获取在SQL服务器上执行的所有查询。 SQL服务器中是否有相同的选项? 或者,如果可能的话,还是其他任何替代方案?

由于

3 个答案:

答案 0 :(得分:0)

只要缓存未被清除,这应该可以工作:

SELECT      sql_text.text
,           st.last_execution_time
,           DB_NAME(qp.dbid) AS databasename
FROM        sys.dm_exec_query_stats st
CROSS APPLY sys.dm_exec_sql_text(st.sql_handle) AS sql_text
INNER JOIN  sys.dm_exec_cached_plans cp
        ON cp.plan_handle = st.plan_handle
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
WHERE       st.last_execution_time >= DATEADD(hour, -5, GETDATE())
ORDER BY    st.last_execution_time DESC;

答案 1 :(得分:0)

您可以创建扩展事件会话以收集此信息。

Getting Started with Extended Events in SQL Server 2012

答案 2 :(得分:0)

默认情况下,SQL Server不跟踪/记录查询,主要是因为这会产生额外的开销。

通过以下方式跟踪要启用的查询:

  1. SQL Profiler(所有版本)。可以非常有效地达到服务器的性能,特别是如果跟踪器在Profiler应用程序中运行,但没有作为"服务器端跟踪启动"。

  2. 扩展事件(SQL Server 2008R2 +)。比Profiler更轻量级的替代品,更高级。

  3. 查询存储(SQL Server 2016+)。相当轻量级的选项,开箱即用。可以对性能调优有所帮助,但对于审计则更少。

  4. 所有方法都需要对利弊和初始配置有所了解