我们可以获取在特定过去一段时间内执行的所有sql server查询。例如,我们可以在过去5小时内获取在SQL服务器上执行的所有查询。 SQL服务器中是否有相同的选项? 或者,如果可能的话,还是其他任何替代方案?
由于
答案 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)
您可以创建扩展事件会话以收集此信息。
答案 2 :(得分:0)
默认情况下,SQL Server不跟踪/记录查询,主要是因为这会产生额外的开销。
通过以下方式跟踪要启用的查询:
SQL Profiler(所有版本)。可以非常有效地达到服务器的性能,特别是如果跟踪器在Profiler应用程序中运行,但没有作为"服务器端跟踪启动"。
扩展事件(SQL Server 2008R2 +)。比Profiler更轻量级的替代品,更高级。
查询存储(SQL Server 2016+)。相当轻量级的选项,开箱即用。可以对性能调优有所帮助,但对于审计则更少。
所有方法都需要对利弊和初始配置有所了解