SQL Server 查询死锁以及解决死锁的基本知识(图文)

打印 上一主题 下一主题

主题 1016|帖子 1016|积分 3048

1. 基本知识

在 SQL Server 中,死锁是指两个或多个进程相互等待对方持有的资源,从而无法继续执行的现象
要解决死锁题目,起首须要辨认并分析死锁的发生原因,然后接纳相应的步调来预防和处理死锁
辨认死锁的常用方法有以下几种:


  • 使用 SQL Server Profiler:可以捕捉死锁事件,生成死锁图
  • 使用 Extended Events:更轻量级,适用于生产环境
  • 启用死锁跟踪标志:可以使用 DBCC TRACEON 下令启用死锁跟踪标志(如 1222 或 1204),以记录死锁信息到 SQL Server 错误日志中
  1. -- 启用死锁跟踪标志
  2. DBCC TRACEON (1222, -1);
  3. DBCC TRACEON (1204, -1);
  4. -- 关闭死锁跟踪标志
  5. DBCC TRACEOFF (1222, -1);
  6. DBCC TRACEOFF (1204, -1);
复制代码


  • 检察体系健康陈诉:SQL Server 2016 及更高版本提供的体系健康陈诉可以捕捉和记录死锁事件

可以使用以下查询检察当前活动的进程:
  1. -- 查看活动的进程
  2. SELECT
  3.     session_id,
  4.     blocking_session_id,
  5.     wait_type,
  6.     wait_time,
  7.     wait_resource,
  8.     last_wait_type,
  9.     status,
  10.     command,
  11.     sql_handle,
  12.     statement_start_offset,
  13.     statement_end_offset,
  14.     plan_handle,
  15.     database_id,
  16.     user_id,
  17.     cpu_time,
  18.     reads,
  19.     writes,
  20.     logical_reads,
  21.     row_count
  22. FROM
  23.     sys.dm_exec_requests;
复制代码
截图如下:

杀死特定进程
一旦确定了要终止的会话ID,可以使用以下下令终止该进程:
  1. KILL <session_id>;  -- 替换为实际的会话ID
复制代码
2. 检察息争锁被锁的表

检察被锁的表
要检察当前被锁的表,可以使用以下查询:
  1. SELECT
  2.     request_session_id AS spid,
  3.     OBJECT_NAME(resource_associated_entity_id) AS tableName
  4. FROM
  5.     sys.dm_tran_locks
  6. WHERE
  7.     resource_type = 'OBJECT';
复制代码
截图如下所示:

解锁被锁表:
  1. DECLARE @spid INT;
  2. SET @spid = 88;  -- 替换为要终止的会话ID
  3. DECLARE @sql VARCHAR(1000);
  4. SET @sql = 'KILL ' + CAST(@spid AS VARCHAR);
  5. EXEC(@sql);
复制代码
3. 检察和处理数据库堵塞

检察数据库是否堵塞
要检察数据库中的堵塞情况,可以使用以下查询:
  1. SELECT *
  2. FROM sys.sysprocesses
  3. WHERE blocked <> 0;
复制代码
截图如下:

这个查询会返回全部被壅闭的进程,blocked 列表示当前进程被哪个进程壅闭
根据ID查找对应的SQL进程
要检察特定会话正在执行的SQL语句,可以使用以下下令:(表现指定会话正在执行的末了一条SQL语句)
  1. DBCC INPUTBUFFER(110);  -- 替换为实际的会话ID
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表