SQL Server阻止'创建功能......',这意味着什么?

时间:2009-10-13 14:33:43

标签: sql-server-2005 performance blocking

我已经使用了本文https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=275中的sql来尝试跟踪最近在我的sql server 2005数据库中发生的大量阻塞的原因。很多次,返回的所有进程都调用'create function ...',函数有所不同,但是其中一些进程会创建相同的函数。从文章中包含的细节,以及查看表中的内容,结果集是从它构建的,看起来通常不会调用这些create语句。这是否意味着重新编译有问题的函数?或者是其他东西?

感谢您的帮助,

罗宾

1 个答案:

答案 0 :(得分:4)

您需要使用sys.dm_exec_requests中的statement_start_offset和statement_end_offsets(不要使用文章中所示的sysprocesses)来删除有问题的代码段。请参阅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,是否执行。您可以使用上面的代码找到阻止语句。