我可以查看我們的生產數據庫中的阻塞會話。SQL阻止會話是否會自行清除?
SELECT * FROM sys.sysprocesses WHERE spid = YOURSPID
我沒有殺過會話:Kill <SPID>
是否阻塞會話將得到明確的本身?
我可以查看我們的生產數據庫中的阻塞會話。SQL阻止會話是否會自行清除?
SELECT * FROM sys.sysprocesses WHERE spid = YOURSPID
我沒有殺過會話:Kill <SPID>
是否阻塞會話將得到明確的本身?
它取決於活動的用戶(如果有)以及誰(如果有的話)正在執行查詢。如果有任何活動用戶阻止了會話,那麼您必須爲該用戶終止會話,否則等待他/他的會話完成。您可以執行sp_whoisactive
來檢查活動用戶的列表。並檢查是否有任何用戶阻止會話,然後您可以顯式終止該用戶的會話以使其工作。您可以參考:Identify the cause of SQL Server blocking。
該查詢是分析有關 鎖的詳細信息,並幫助您找出大量塊的事業的好方法。
WITH [Blocking]
AS (SELECT w.[session_id]
,s.[original_login_name]
,s.[login_name]
,w.[wait_duration_ms]
,w.[wait_type]
,r.[status]
,r.[wait_resource]
,w.[resource_description]
,s.[program_name]
,w.[blocking_session_id]
,s.[host_name]
,r.[command]
,r.[percent_complete]
,r.[cpu_time]
,r.[total_elapsed_time]
,r.[reads]
,r.[writes]
,r.[logical_reads]
,r.[row_count]
,q.[text]
,q.[dbid]
,p.[query_plan]
,r.[plan_handle]
FROM [sys].[dm_os_waiting_tasks] w
INNER JOIN [sys].[dm_exec_sessions] s ON w.[session_id] = s.[session_id]
INNER JOIN [sys].[dm_exec_requests] r ON s.[session_id] = r.[session_id]
CROSS APPLY [sys].[dm_exec_sql_text](r.[plan_handle]) q
CROSS APPLY [sys].[dm_exec_query_plan](r.[plan_handle]) p
WHERE w.[session_id] > 50
AND w.[wait_type] NOT IN ('DBMIRROR_DBM_EVENT'
,'ASYNC_NETWORK_IO'))
SELECT b.[session_id] AS [WaitingSessionID]
,b.[blocking_session_id] AS [BlockingSessionID]
,b.[login_name] AS [WaitingUserSessionLogin]
,s1.[login_name] AS [BlockingUserSessionLogin]
,b.[original_login_name] AS [WaitingUserConnectionLogin]
,s1.[original_login_name] AS [BlockingSessionConnectionLogin]
,b.[wait_duration_ms] AS [WaitDuration]
,b.[wait_type] AS [WaitType]
,t.[request_mode] AS [WaitRequestMode]
,UPPER(b.[status]) AS [WaitingProcessStatus]
,UPPER(s1.[status]) AS [BlockingSessionStatus]
,b.[wait_resource] AS [WaitResource]
,t.[resource_type] AS [WaitResourceType]
,t.[resource_database_id] AS [WaitResourceDatabaseID]
,DB_NAME(t.[resource_database_id]) AS [WaitResourceDatabaseName]
,b.[resource_description] AS [WaitResourceDescription]
,b.[program_name] AS [WaitingSessionProgramName]
,s1.[program_name] AS [BlockingSessionProgramName]
,b.[host_name] AS [WaitingHost]
,s1.[host_name] AS [BlockingHost]
,b.[command] AS [WaitingCommandType]
,b.[text] AS [WaitingCommandText]
,b.[row_count] AS [WaitingCommandRowCount]
,b.[percent_complete] AS [WaitingCommandPercentComplete]
,b.[cpu_time] AS [WaitingCommandCPUTime]
,b.[total_elapsed_time] AS [WaitingCommandTotalElapsedTime]
,b.[reads] AS [WaitingCommandReads]
,b.[writes] AS [WaitingCommandWrites]
,b.[logical_reads] AS [WaitingCommandLogicalReads]
,b.[query_plan] AS [WaitingCommandQueryPlan]
,b.[plan_handle] AS [WaitingCommandPlanHandle]
FROM [Blocking] b
INNER JOIN [sys].[dm_exec_sessions] s1
ON b.[blocking_session_id] = s1.[session_id]
INNER JOIN [sys].[dm_tran_locks] t
ON t.[request_session_id] = b.[session_id]
WHERE t.[request_status] = 'WAIT'
GO
謝謝。你說有Active和InActive用戶將顯示在該查詢執行結果? – goofyui
@goofyui: - 更新了我的答案! –
鬆散的聯繫,但使用'sp_whoisactive'更多的信息和更多的人類可讀。 – lad2025
*「阻塞會話會自行清除嗎?」*只要會話合法活動, – sstan
我被告知要使用:beta_lockinfo。我是否也可以從此語法中看到活動用戶?我可以殺死阻止會話的活動用戶嗎?我認爲我只會看到活躍的用戶。 – goofyui