我在尋找適用於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,讓我過濾的登錄名的結果嗎?
我在尋找適用於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,讓我過濾的登錄名的結果嗎?
他們查詢你寫的將不會給你一個完整的歷史記錄,但給你緩存的執行計劃,它可以得到空白(通常在SQL Server重新啓動)。
如果你想保留的所有用戶活動的跟蹤,你有一些選擇:
使用SQL Server Profiler來存儲所有用戶的活動
您可以創建跟蹤SQL Server事件探查器會話事件SQL:StmtStarting您想要的數據庫。您也可以使用通配符來僅跟蹤特定的查詢。分類會話的結果可以存儲在一個表格中。您可以確保分析會話在服務器啓動時自動啓動並始終保持使用SQL Server代理作業。
這個問題的主要缺點是Profiler會對性能產生嚴重影響。
擴展事件會話
的概念其實是非常相似的事件探查器會話,除非你將使用稱爲擴展活動較新的機制。
相關事件sql_statement_starting,和喜歡的探查,你可以存儲數據到文件(可查詢),設定限制,過濾器等
擴展事件的性能通常的方式優於分析器。並且在進行活動的擴展事件跟蹤會話時,對整個服務器性能的影響要小得多。
SQL Server的審計
您也可以創建SQL Server級別的審覈,然後在數據庫中創建審計規範(SSMS中,在對象資源管理器中,該數據庫 - >安全 - >數據庫下審覈規範
可以審計SELECT,DELETE等,你可以選擇其中的數據將被保存(文件/事件日誌...)
希望這有助於
但是可以檢查這些查詢的用戶嗎? – PNPTestovir
以我提到的任何方式,您都可以獲得所有查詢以及哪個用戶。緩存的查詢將被緩存,並且不會引用首次運行它們的用戶。您可以看到當前哪些查詢正在運行以及由哪個用戶運行,但這不是您要求的。 –
嘗試以HTTP:// dba.stacke xchange.com/ –
我不相信SQL Server正在跟蹤誰在執行什麼查詢。你最好的選擇是運行SQL分析器,讓它跟蹤用戶正在執行什麼查詢。 – MWillemse
你想保持完整的歷史記錄,或者現在正在運行什麼? –