Devdrama

О сайте

Просмотр блокирующих соединений в MS SQL in english

18 Feb 2014

Написание объемных процедур для автоматизации производства неизбежно влечёт за собой использование транзакций, что порой вызывает головную боль: малейшая невнимательность может заблокировать базу.

Приведённый ниже фрагмент кода отображает подключенные логины, заблокированные базы, источник подключения и идентификатор сессии. Эти подключения и нужно сбрасывать. То есть, kill 67. Сбросили, и копаем дальше.

SELECT DISTINCT request_mode,
      name AS database_name,
      session_id,
      host_name,
      login_time,
      login_name,
      reads,
      writes
    FROM sys.dm_exec_sessions
    LEFT OUTER JOIN sys.dm_tran_locks 
        ON sys.dm_exec_sessions.session_id = sys.dm_tran_locks.request_session_id
    INNER JOIN sys.databases
        ON sys.dm_tran_locks.resource_database_id = sys.databases.database_id
    WHERE resource_type <> 'DATABASE'
    AND request_mode LIKE '%X%' --EXCULSIVE LOCK
    --AND name ='YourDatabaseNameHere'
 ORDER BY name

По желанию можно поиграть с request_mode и посмотреть на другие типы подключений (активные, спящие).

cheatsheet sql