我在寻找SQL Server 2008 R2的DMV,它向我展示了特定用户运行的所有查询。
我现在有这个代码:
SELECT *
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
但是可以加入另一个允许我在登录名上过滤结果的DMV吗?
答案 0 :(得分:2)
他们查询你写的不会给你一个完整的历史记录,但会给你缓存的执行计划,这可以得到清空(通常在SQL Server重启)。
如果您想跟踪所有用户活动,可以选择以下选项:
使用SQL Server Profiler存储所有用户的活动
您可以创建SQL Server Profiler会话,以跟踪所需数据库上的事件SQL:StmtStarting。您还可以使用通配符仅跟踪特定查询。概要分析会话的结果可以存储在表格中。您可以确保在服务器启动时自动启动性能分析会话,并始终使用SQL Server代理作业保持运行。
主要缺点是Profiler会对性能产生严重影响。
扩展活动会话
这个概念实际上非常类似于探查器会话,除了你将使用一个名为扩展事件的新机制。
相关事件是sql_statement_starting,与Profiler一样,您可以将数据存储到文件中(可以查询),设置限制,过滤等。
扩展事件的性能通常比分析器更好。在进行有效的扩展事件跟踪会话时,对整个服务器性能的影响要小得多。
SQL Server审核
您还可以在SQL Server级别创建审核,然后在数据库中创建审核规范(在SSMS中,在对象资源管理器中,在数据库 - > Security->数据库审核规范
下)您可以审核SELECT,DELETE等,您可以选择保存数据的位置(文件/事件日志......)。
希望这有帮助。