sql-server - sp_who2 中的一个或多个 blkby 列中包含当前 spid 是什么意思?
问题描述
例如,我目前正在查看一个 sp_who2 报告,其中 spid 140 大约有 40 行,其中大约 30 行在 blkby 列中有 140。这是什么意思?为什么 140 多行,spid 怎么会自己阻塞?
解决方案
当 sql 服务器通过管道将大量数据假脱机到客户端并且客户端只能缓冲和读取这么多数据时,我已经看到了这一点。因此,您可能会开始看到多个 ASYNC_NETWORK_IO 等待。您能否使用以下查询发布该进程的等待类型:
SELECT
S.Text, R.Session_id,R.Status,R.Command,R.CPU_Time,R.Total_Elapsed_Time
FROM
sys.dm_exec_requests R
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS S
--EXEC sp_who2
SELECT W.session_id,ot.task_state,W.wait_type, W.wait_duration_ms, W.blocking_session_id, W.resource_description, S.host_name, S.program_name
FROM
sys.dm_os_waiting_tasks W
INNER JOIN sys.dm_os_tasks ot ON ot.task_address = W.waiting_task_address
INNER JOIN sys.dm_exec_sessions S ON S.session_id = W.session_id
WHERE
S.is_user_process = 1
SELECT
SessionID = es.session_id,
Login =es.original_login_name,
Host = es.host_name,
RequestStart=es.last_request_start_time,
RequerstEnd=es.last_request_end_time,
Status =es.status,
BockedBy =er.blocking_session_id,
WaitType =er.wait_type,
WaitTime = er.wait_time,
LastWaitType = er.last_wait_type,
WaitResource = er.wait_resource,
DatabaseID = DB_NAME(er.database_id),
Command = er.command,
--,sql_text=st.text
TransactionIsolation =
CASE es.transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'Read Uncommitted'
WHEN 2 THEN 'Read Committed'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot'
END,
CPUTime = COALESCE(es.cpu_time,0) + COALESCE(er.cpu_time,0),
IOTime = COALESCE(es.reads,0) + COALESCE(es.writes,0) + COALESCE(er.reads,0) + COALESCE(er.writes,0),
TransactioCount = COALESCE(er.open_transaction_count,-1),
ProgramName = COALESCE(es.program_name,''),
LoginTme = es.login_time
FROM
sys.dm_exec_sessions es
LEFT OUTER JOIN sys.dm_exec_connections ec ON es.session_id = ec.session_id
LEFT OUTER JOIN sys.dm_exec_requests er ON es.session_id = er.session_id
LEFT OUTER JOIN sys.server_principals sp ON es.security_id = sp.sid
LEFT OUTER JOIN sys.dm_os_tasks ota ON es.session_id = ota.session_id
LEFT OUTER JOIN sys.dm_os_threads oth ON ota.worker_address = oth.worker_address
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS st
WHERE
es.is_user_process = 1
and
es.session_id <> @@spid
ORDER BY
es.session_id
推荐阅读
- android - 未解决的参考:等待。Kotlin 协程
- sql-server - SQL 在 sql 代理中运行多个作业
- c# - 当调用公共 Main 成为可能时,为什么我们需要生成另一个进程?
- python - Python open 不会根据文档创建文件
- java - 球向右移动时逐渐消失
- javascript - 如何在没有 Vue.js CLI 的情况下成功使用 axios(例如使用 JS Fiddle)
- processing - 与曲线相切
- javascript - webpack-cli init "TypeError: env.run(...).on 不是函数"
- xamarin.forms - Xamarin 表单 - 单位为 px、dp、百分比还是?xamarin 表单使用的单位类型是什么
- c - 随后将命令行参数发送到 C 程序而不重新执行它