2016-05-02 32 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

以我提到的任何方式,您都可以獲得所有查詢以及哪個用戶。緩存的查詢將被緩存,並且不會引用首次運行它們的用戶。您可以看到當前哪些查詢正在運行以及由哪個用戶運行,但這不是您要求的。 –