Sql-Server

查詢執行詳情

  • October 24, 2019

我們需要找出在一次又一次之間執行的查詢列表,哪個使用者執行了查詢以及該查詢的執行時間是多少。

如果您沒有設置任何監控,一個大問題是您的記憶體數據不會永遠保留。這意味著你不能回到你想要的最遠的地方。

可靠地查詢這個(在未來)的唯一方法是設置一些監控來擷取在您的伺服器上觸發的查詢。

為了監控伺服器,我經常設置一個非常簡單的 WhoIsActive 作業,它每分鐘執行一次。(時間會因情況而異)這將擷取從語句到登錄,數據庫查詢計劃的任何內容。

這很簡單,只需設置一個作業,在您的時間之間每 X 分鐘執行一次 WhoIsActive 過程想要,並讓它記錄到一個表中。

以下 2 個連結將幫助您了解如何設置它所需的一切。

如何使用 sp_whoisactive

記錄活動 使用 sp_WhoIsActive 記錄活動 – Take 2

如果您想了解有關 WhoIsActive 程序的更多資訊,可以在連結中找到所有內容。

如果您在 SQL2016 實例上執行,我還建議您設置查詢儲存,它將擷取在您的數據庫上觸發的所有或大多數(配置設置 AUTO 與 ALL)查詢。這將為您提供有關數據庫上正在發生的事情的大量詳細資訊。

這可能對你有幫助嗎?僅適用於 Microsoft SQL Server

在特定日期之間執行的查詢

SELECT
   deqs.last_execution_time AS [Time], 
   dest.TEXT AS [Query]
FROM 
   sys.dm_exec_query_stats AS deqs
   CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
   WHERE
    deqs.last_execution_time between '2019-10-22 9:00:00.000' -- start time
                                      and '2019-10-23 16:00:00.000' -- end time
   ORDER BY 
   deqs.last_execution_time DESC   

編輯:

結果是這樣的:

Time                       |  Query 
2019-10-22 23:05:17.033    |  Select * from db_name
.
.

如果您想查看誰在執行查詢,我建議您參考這個答案

您需要開始將您不信任的帳戶的帳戶活動記錄到表中以獲取完整列表。所有其他選項(例如查詢 dmvs)都會為您提供時間數據,並且不能保證它是完整的。

引用自:https://dba.stackexchange.com/questions/251782