免责声明:本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
云数据库 RDS SQL Server 版出现阻塞问题。
当应用程序频繁读写某个表或者资源时,很容易出现阻塞情况。当阻塞问题严重时,应用程序端的语句执行会变得缓慢。
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
针对云数据库RDS SQL Server版阻塞问题,排查建议如下。
while 1=1
begin
select * from sys.sysprocesses where blocked<>0;
waitfor delay '00:00:01'
end
说明:循环间隔时间可以自定义。此处以
00:00:01
为例。
系统显示类似如下。说明:图中字段的解释,请参见 sys.sysprocesses官方文档。
while 1=1系统显示类似如下。
Begin
SELECT db.name DBName,
tl.request_session_id,
wt.blocking_session_id,
OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
tl.resource_type,
h1.TEXT AS RequestingText,
h2.TEXT AS BlockingText,
tl.request_mode
FROM sys.dm_tran_locks AS tl
INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id
INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address = wt.resource_address
INNER JOIN sys.partitions AS p ON p.hobt_id = tl.resource_associated_entity_id
INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id = tl.request_session_id
INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id = wt.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2
waitfor delay '00:00:01'
End
说明:
- DBName:数据库名称。
- request_session_id:当前请求的session ID,即被阻塞的session。
- blocking_session_id:阻塞头session ID。
- BlockedObjectName:被阻塞的session操作的对象。
- resource_type:等待的资源类型。
- RequestingText:当前session执行的语句,即被阻塞的语句。
- BlockingText:阻塞头session执行的语句。
- request_mode:当前session请求的锁模式。
可以参考以下步骤,进行调优。
select * from table with(nolock);
。如果您的问题仍未解决,您可以在阿里云社区提交工单联系阿里云技术支持。