Блокировка SQL Server при создании функции ... что это означает? - PullRequest
0 голосов
/ 13 октября 2009

Я использовал sql из этой статьи https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=275, чтобы попытаться отследить причину большого количества блокировок, которые происходили в последнее время в моей базе данных sql server 2005. Несколько раз все возвращаемые процессы вызывают 'create function ...', функции меняются, но некоторые из них будут создавать одну и ту же функцию. Из подробностей, включенных в статью, и из того, что видно из таблиц, получен набор результатов, который не похож на то, что эти операторы создания обычно вызываются. Означает ли это перекомпиляцию рассматриваемых функций? Или что-то другое?

Спасибо за любую помощь,

Robin

1 Ответ

4 голосов
/ 13 октября 2009

Вам нужно использовать Statement_start_offset и Statement_end_offsets из sys.dm_exec_requests (не используйте sysprocesses, как показано в статье), чтобы ПОДЧЕРКНУТЬ оскорбительный раздел кода. См. Пример в разделе BOL для sys.dm_exec_sql_text () .

EDIT:

Вот как сделать то, что я сказал выше:

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

Вывод будет другим, потому что только в настоящее время выполняющиеся запросы находятся в DMV dm_exec_requests, где sysprocesses показывают каждый spid, выполняющийся или нет. Вы можете найти свои блокирующие операторы с помощью приведенного выше кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...