MSSQL Server’daki Blocking Tree yapısı, veritabanı üzerinde işlem yapan sorgular arasındaki engellemeleri görsel olarak temsil eden bir yapıdır. Bir işlem (query), başka bir işlem tarafından kilitlendiğinde, bu kilitlenme işlemi bir blokaj (blocking) durumu yaratır. Bu da performans sorunlarına yol açabilir.
Blocking Tree yapısı, kilitli olan işlemleri, kilitlenmeye neden olan işlemleri ve ilişkili kilitler arasındaki ilişkileri gösterir. Bu yapıyı görmek için SQL Server Management Studio (SSMS) gibi araçlarla “Activity Monitor” veya sp_who2 komutu kullanılabilir.
Blocking Tree yapısını gösteren sorgu:
SET NOCOUNT ON
GO
SELECT SPID, BLOCKED, REPLACE (REPLACE (T.TEXT, CHAR(10), ' '), CHAR (13), ' ' ) AS BATCH
INTO #T
FROM sys.sysprocesses R CROSS APPLY sys.dm_exec_sql_text(R.SQL_HANDLE) T
GO
WITH BLOCKERS (SPID, BLOCKED, LEVEL, BATCH)
AS
(
SELECT SPID,
BLOCKED,
CAST (REPLICATE ('0', 4-LEN (CAST (SPID AS VARCHAR))) + CAST (SPID AS VARCHAR) AS VARCHAR (1000)) AS LEVEL,
BATCH FROM #T R
WHERE (BLOCKED = 0 OR BLOCKED = SPID)
AND EXISTS (SELECT * FROM #T R2 WHERE R2.BLOCKED = R.SPID AND R2.BLOCKED <> R2.SPID)
UNION ALL
SELECT R.SPID,
R.BLOCKED,
CAST (BLOCKERS.LEVEL + RIGHT (CAST ((1000 + R.SPID) AS VARCHAR (100)), 4) AS VARCHAR (1000)) AS LEVEL,
R.BATCH FROM #T AS R
INNER JOIN BLOCKERS ON R.BLOCKED = BLOCKERS.SPID WHERE R.BLOCKED > 0 AND R.BLOCKED <> R.SPID
)
SELECT N' ' + REPLICATE (N'| ', LEN (LEVEL)/4 - 1) +
CASE WHEN (LEN(LEVEL)/4 - 1) = 0
THEN 'HEAD - '
ELSE '|------ ' END
+ CAST (SPID AS NVARCHAR (10)) + N' ' + BATCH AS BLOCKING_TREE
FROM BLOCKERS ORDER BY LEVEL ASC
GO
DROP TABLE #T
GO
Bloklanmaya sebep olan Head’lar belirlenip önlem alınabilir.

Bir başka bekleme komutlarını bulan script:
SELECT * FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL
GO

Bu makalede Blocking Tree yapısını görmüş olduk. Başka bir makalede görüşmek dileğiyle..
Namazı dosdoğru kılın, zekatı verin; önceden kendiniz için hayır olarak neyi takdim ederseniz, onu Allah Katında bulacaksınız. Şüphesiz Allah, yaptıklarınızı görendir. Bakara Suresi, 110. Ayet