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

1. 基本知识

在 SQL Server 中,死锁是指两个或多个进程互相等待对方持有的资源,从而无法继续执行的现象

要解决死锁问题,首先需要识别并分析死锁的发生原因,然后采取相应的措施来预防和处理死锁

识别死锁的常用方法有以下几种:

  • 使用 SQL Server Profiler:可以捕获死锁事件,生成死锁图
  • 使用 Extended Events:更轻量级,适用于生产环境
  • 启用死锁跟踪标志:可以使用 DBCC TRACEON 命令启用死锁跟踪标志(如 1222 或 1204),以记录死锁信息到 SQL Server 错误日志中
-- 启用死锁跟踪标志
DBCC TRACEON (1222, -1);
DBCC TRACEON (1204, -1);

-- 关闭死锁跟踪标志
DBCC TRACEOFF (1222, -1);
DBCC TRACEOFF (1204, -1);
  • 查看系统健康报告:SQL Server 2016 及更高版本提供的系统健康报告可以捕获和记录死锁事件

在这里插入图片描述

可以使用以下查询查看当前活动的进程:

-- 查看活动的进程
SELECT 
    session_id, 
    blocking_session_id, 
    wait_type, 
    wait_time, 
    wait_resource, 
    last_wait_type, 
    status, 
    command, 
    sql_handle, 
    statement_start_offset, 
    statement_end_offset, 
    plan_handle, 
    database_id, 
    user_id, 
    cpu_time, 
    reads, 
    writes, 
    logical_reads, 
    row_count 
FROM 
    sys.dm_exec_requests;

截图如下:

在这里插入图片描述

杀死特定进程

一旦确定了要终止的会话ID,可以使用以下命令终止该进程:

KILL <session_id>;  -- 替换为实际的会话ID

2. 查看和解锁被锁的表

查看被锁的表
要查看当前被锁的表,可以使用以下查询:

SELECT 
    request_session_id AS spid, 
    OBJECT_NAME(resource_associated_entity_id) AS tableName
FROM 
    sys.dm_tran_locks 
WHERE 
    resource_type = 'OBJECT';

截图如下所示:

在这里插入图片描述

解锁被锁表:

DECLARE @spid INT;
SET @spid = 88;  -- 替换为要终止的会话ID

DECLARE @sql VARCHAR(1000);
SET @sql = 'KILL ' + CAST(@spid AS VARCHAR);
EXEC(@sql);

3. 查看和处理数据库堵塞

查看数据库是否堵塞
要查看数据库中的堵塞情况,可以使用以下查询:

SELECT * 
FROM sys.sysprocesses 
WHERE blocked <> 0;

截图如下:

在这里插入图片描述

这个查询会返回所有被阻塞的进程,blocked 列表示当前进程被哪个进程阻塞

根据ID查找对应的SQL进程
要查看特定会话正在执行的SQL语句,可以使用以下命令:(显示指定会话正在执行的最后一条SQL语句)

DBCC INPUTBUFFER(110);  -- 替换为实际的会话ID

相关推荐

  1. 以及如何避免

    2024-07-12 01:16:04       34 阅读
  2. 定义以及产生必要条件,处理

    2024-07-12 01:16:04       40 阅读
  3. 【SQL】MySQL 问题以及解决方式

    2024-07-12 01:16:04       20 阅读
  4. 2024-07-12 01:16:04       43 阅读
  5. 解决Oracle问题

    2024-07-12 01:16:04       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 01:16:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 01:16:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 01:16:04       57 阅读
  4. Python语言-面向对象

    2024-07-12 01:16:04       68 阅读

热门阅读

  1. Redis数据同步

    2024-07-12 01:16:04       25 阅读
  2. 11、中台-DDD-几种微服务架构模型对比分析

    2024-07-12 01:16:04       23 阅读
  3. shark云原生-日志体系-ECK

    2024-07-12 01:16:04       20 阅读
  4. 9. 机器人数目

    2024-07-12 01:16:04       20 阅读
  5. Mysql-索引应用

    2024-07-12 01:16:04       22 阅读
  6. 【LeetCode】最长连续序列

    2024-07-12 01:16:04       25 阅读
  7. 游戏开发面试题1

    2024-07-12 01:16:04       20 阅读
  8. 一篇文章Scala语言入门

    2024-07-12 01:16:04       24 阅读
  9. html的浮动作用详解

    2024-07-12 01:16:04       23 阅读
  10. Perl语法作用域:深入探索变量的隐秘世界

    2024-07-12 01:16:04       22 阅读
  11. C#——Array类详情

    2024-07-12 01:16:04       26 阅读
  12. [202406] 一级 填空题 1~8题 答案解析

    2024-07-12 01:16:04       22 阅读