2016-05-02 29 views
0

我在寻找适用于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,让我过滤的登录名的结果吗?

+1

尝试以HTTP:// dba.stacke xchange.com/ –

+1

我不相信SQL Server正在跟踪谁在执行什么查询。你最好的选择是运行SQL分析器,让它跟踪用户正在执行什么查询。 – MWillemse

+1

你想保持完整的历史记录,或者现在正在运行什么? –

回答

2

他们查询你写的将不会给你一个完整的历史记录,但给你缓存的执行计划,它可以得到空白(通常在SQL Server重新启动)。

如果你想保留的所有用户活动的跟踪,你有一些选择:

使用SQL Server Profiler来存储所有用户的活动

您可以创建跟踪SQL Server事件探查器会话事件SQL:StmtStarting您想要的数据库。您也可以使用通配符来仅跟踪特定的查询。分类会话的结果可以存储在一个表格中。您可以确保分析会话在服务器启动时自动启动并始终保持使用SQL Server代理作业。

这个问题的主要缺点是Profiler会对性能产生严重影响。

扩展事件会话

的概念其实是非常相似的事件探查器会话,除非你将使用称为扩展活动较新的机制。

相关事件sql_statement_starting,和喜欢的探查,你可以存储数据到文件(可查询),设定限制,过滤器等

扩展事件的性能通常的方式优于分析器。并且在进行活动的扩展事件跟踪会话时,对整个服务器性能的影响要小得多。

SQL Server的审计

您也可以创建SQL Server级别的审核,然后在数据库中创建审计规范(SSMS中,在对象资源管理器中,该数据库 - >安全 - >数据库下审核规范

可以审计SELECT,DELETE等,你可以选择其中的数据将被保存(文件/事件日志...)

希望这有助于

+0

但是可以检查这些查询的用户吗? – PNPTestovir

+1

以我提到的任何方式,您都可以获得所有查询以及哪个用户。缓存的查询将被缓存,并且不会引用首次运行它们的用户。您可以看到当前哪些查询正在运行以及由哪个用户运行,但这不是您要求的。 –