2009-10-13 69 views
0

我已經使用這篇文章https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=275中的sql來試圖追蹤最近在我的sql server 2005數據庫中發生的大量阻塞的原因。有很多次,所有返回的過程都調用'create function ...',這些函數會有所不同,但其中一些會創建相同的函數。從文章中包含的細節以及查看錶中結果集的內容看起來,這些創建語句通常不會被調用。這是否意味着重新編譯有問題的功能?或者是其他東西?SQL Server阻塞'創建函數...',這意味着什麼?

感謝您的幫助,

羅賓

+0

你能告訴我們爲什麼你在運行時使用'CREATE FUNCTION'嗎? – 2009-10-13 14:46:54

回答

4

您需要使用從sys.dm_exec_requests視圖中的statement_start_offset和statement_end_offsets(不使用sysprocesses中所示的文章中),以SUBSTRING了問題的代碼段。請參閱sys.dm_exec_sql_text()的BOL主題中的示例。

編輯:

這裏是如何做我上面說:

SELECT 
    spid = r.session_id, 
    BlockingSPID = r.blocking_session_id, 
    DatabaseName = DB_NAME(r.database_id), 
    s.program_name, 
    s.login_name, 
    ObjectName = OBJECT_NAME(st.objectid, st.dbid), 
    Definition = SUBSTRING(st.text, (r.statement_start_offset/2)+1, 
     ((CASE r.statement_end_offset 
      WHEN -1 THEN DATALENGTH(st.text) 
     ELSE r.statement_end_offset 
     END - r.statement_start_offset)/2) + 1) 
FROM sys.dm_exec_requests r 
JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id 
CROSS APPLY sys.dm_exec_sql_text (sql_handle) st 
WHERE r.session_id > 50 

輸出去,因爲只有當前正在執行的請求是在dm_exec_requests DMV,其中sysprocesses中顯示每個SPID是不同的,執行與否。儘管如此,你可以通過上面的代碼找到你的阻塞語句。