2010-03-15 179 views
26

我是SQL Server Management Studio新手,想知道:是否有辦法查看哪些查詢已針對數據庫運行?如何在SQL Server Management Studio中查看執行的查詢?

在活動監視器中,有一個「最近昂貴的查詢」報告,但我猜這不是所有的查詢,因爲我沒有看到我已經運行的查詢。

我正在運行SQL Server Express 2008 v 10.0.1600.22。

+0

A現在刪除回答http://blog.sqlauthority.com/2008/01/03/sql -server-2005-last-ran-query-recently-ran-query /),它顯示一個SQL查詢以顯示最近的SQL查詢。 – 2016-01-26 17:44:25

回答

18

使用SQL Profiler並使用過濾器來獲取最昂貴的查詢。

+2

我忘了提及這是SQL Server Express。從閱讀其他文章看來,Profiler並不包含在Express中。這仍然是正確的嗎? – bsh152s 2010-03-15 19:06:42

+0

是的,它只包含在Enterprise,Standard和Workgroup版本中。您可以在此比較此功能和其他功能:http://www.microsoft.com/sqlserver/2008/en/us/editions-compare.aspx – 2010-03-15 19:28:48

10

您需要一個SQL事件探查器,它實際上在SQL Management Studio之外運行。如果您有SQL Server的付費版本(如開發人員版),則應將其作爲另一個實用程序包含在其中。

如果您使用的是免費版(SQL Express),則它們具有可供下載的免費軟件配置文件。我使用了AnjLab的分析器(可在http://sites.google.com/site/sqlprofiler處獲得),它似乎運作良好。

15

使用活動監視器。這是頂部欄中的最後一個工具欄。它會顯示「最近昂貴的查詢」列表。您可以雙擊它們查看執行計劃等。

+4

+1用於告訴我們隱藏的功能在哪裏以及如何使用它。 – cjbarth 2013-08-16 22:52:18

3

如果您希望SSMS維護查詢歷史記錄,請使用SSMS Tool Pack add on

如果您想要監視SQL Server當前正在運行的查詢,請使用SQL PRofiler,正如其他人已經提示的那樣。

3

從運行管理套件上運行的進程以下查詢:

DBCC inputbuffer(spid#) 

這將返回SQL目前正在對數據庫運行的SPID提供。請注意,您需要適當的權限才能運行此命令。

這比運行跟蹤更好,因爲它定位到特定的SPID。您可以根據其CPUTime和DiskIO查看是否長時間運行。

例獲得SPID 64的細節:

DBCC inputbuffer(64) 
4
 SELECT * FROM sys.dm_exec_sessions es 
    INNER JOIN sys.dm_exec_connections ec 
     ON es.session_id = ec.session_id 
    CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) where es.session_id=65 under see text contain... 
+0

你只能得到在ssms(sql管理工作室)中運行的sql,但不能捕獲在任何dotnet應用程序目標ado.net中運行的sql。只有sql profiler可以做。 – 2016-07-20 20:05:33

15

如果你想看到的是已經執行的查詢有沒有支持默認的方式做到這一點。有一些解決方法可以嘗試,但不期望找到全部。

您將無法確定地看到SELECT語句,但可以通過讀取事務日誌(假設數據庫處於完全恢復模式)來查看其他DML和DDL命令。

可以使用DBCC LOG或fn_dblog命令或類似ApexSQL Log第三方日誌讀取器(注意,工具是有代價的)

現在,如果你打算在那些即將在被執行審計報表做到這一點未來,那麼你可以使用SQL事件探查器來捕捉一切。

3

更清晰的查詢,使用工作室SQL查詢是:下面分[此博客條目(

SELECT text FROM sys.dm_exec_sessions es 
    INNER JOIN sys.dm_exec_connections ec 
     ON es.session_id = ec.session_id 
    CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) 
    where program_name like '%Query' 
+0

你只能得到在ssms(sql管理工作室)中運行的sql,但是如果你改變了program_name,不能捕獲在任何dotnet應用程序目標ado.net中運行的sql。只有sql profiler可以做。 – 2016-07-20 20:07:38

相關問題