查找sqlserver查询死锁源头的方法 sqlserver死锁监控

下面是关于“查找 SQL Server 查询死锁源头的方法 SQL Server 死锁监控”完整攻略,包括以下步骤:

前置条件

在进行 SQL Server 死锁监控之前,需要先了解四个基本概念:

  1. 锁(Lock):在 SQL Server 中,锁是防止并发访问进行数据访问的机制。

  2. 事务(Transaction):事务是执行一系列相关的操作并形成一个逻辑单元,且该逻辑单元要么全部执行,要么全部取消。

  3. 互斥性(Mutual Exclusion):在同一时间只有一个事务可以持有一个锁。

  4. 死锁(Deadlock):死锁是指当两个或多个事务都互相持有彼此所需的资源时,它们将会陷入一种懊恼的状态,不能再向前或向后移动。

步骤

接下来,介绍以下针对 SQL Server 数据库死锁问题进行监控和查找的完整攻略:

  1. 启用 SQL Server Profiler 进行监控。

    在 SQL Server Profiler 中,选择 "Tuning" 模板并启动此模板。监控过程中启用 "Deadlock graph" 选项,以显示死锁图。"Deadlock graph" 选项将显示导致锁死的事务,并提供详细信息,例如死锁的事务、锁类型、等待时间等。监控结束后,可以使用 "Show Deadlock XML" 选项查看死锁的 XML 信息。

    以下是一个 SQL Server Profiler 监控死锁的示例:

    sql
    USE AdventureWorks2012;
    GO
    SET NOCOUNT ON;
    BEGIN TRAN
    UPDATE Production.ProductInventory
    SET Quantity = Quantity - 10
    WHERE ProductID = 980;
    -- Wait for a delay to simulate another query attempting to read
    -- uncommitted data.
    WAITFOR DELAY '00:00:03';
    -- Attempt to read uncommitted data. The query is blocked
    -- because of locking conflicts.
    SELECT ProductID, Quantity
    FROM Production.ProductInventory WITH (NOLOCK)
    WHERE ProductID = 980;
    ROLLBACK TRAN;

  2. 使用 "Activity Monitor" 工具进行查找。

    在 SSMS 中,选择 "Activity Monitor" 工具。选择 "Processes" 选项卡,并按 SQL Server 数据库实例名称。在 "Processes" 选项卡中,将鼠标指针悬停在 "Block By" 列的 "0" 值上。这将显示一个下拉框,其中包含所有正在阻塞的进程以及阻塞它们的进程。可以单击每个进程来查看详细信息。另外,在工具栏中选择 "Deadlock Graph" 选项卡,以查看死锁图。

    以下是 Activity Monitor 工具查找死锁的示例:

    sql
    CREATE PROCEDURE DeadlockTrace
    AS
    BEGIN
    SET NOCOUNT ON;
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    DECLARE @XMLData XML;
    SET @XMLData =(SELECT
    -- Filter for date range, optional
    CAST(record AS XML)
    FROM sys.fn_trace_gettable(CONVERT(VARCHAR(MAX)), 0)
    WHERE TextData LIKE '%deadlock-list%'
    AND StartTime >= DATEADD(MINUTE,-60, GETDATE()))
    SELECT
    DL.eventDate, DL.DeadlockGraph
    FROM (
    SELECT
    CONVERT(DATETIME, LEFT(TXT.text, 23), 121) AS eventDate, STUFF(
    CAST(
    ( SELECT CAST(TXT2.text AS VARCHAR(MAX))
    FROM sys.dm_exec_connections AS C
    CROSS APPLY sys.dm_exec_sql_text(C.most_recent_sql_handle) AS TXT2
    WHERE C.session_id = DEADLOCK.session_id
    FOR XML PATH('treedata'), TYPE
    )AS VARCHAR(MAX)
    ), 1, 2, '' ) + '' AS DeadlockGraph
    FROM sys.dm_exec_connections AS C
    CROSS APPLY sys.dm_exec_sql_text(C.most_recent_sql_handle) AS TXT
    CROSS APPLY @XMLData.nodes('/Root/Deadlock')AS DEADLOCK(Deadlock)
    WHERE TXT.text LIKE '%process id%'
    AND C.session_id = DEADLOCK.deadlock.value('@victimProcessID', 'INT')
    ) AS DL
    ORDER BY DL.eventDate DESC
    END

总结

在进行 SQL Server 死锁监控时,可以使用 SQL Server Profiler 和 Activity Monitor 工具。使用这些工具可以轻松地查找导致死锁的事务并提供有关死锁的详细信息和死锁图。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:查找sqlserver查询死锁源头的方法 sqlserver死锁监控 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Linux常用命令last的使用方法详解

    Linux常用命令last的使用方法详解 什么是last命令? last命令是一个Linux系统中常用的命令之一,用于列出已经登录过系统的用户列表,并显示其登录的时间、登录方式、登录IP地址等信息,可用于审计用户行为,也可以用于检查系统安全。 last命令的语法 last命令的语法如下: last [参数] [选项] [用户名] [终端] 参数:用于指定输出…

    database 2023年5月22日
    00
  • python美多商城项目开发小结

    Python美多商城项目开发小结 1. 项目简介 Python美多商城项目是一款使用Python语言开发的电商购物网站,该项目基于Python的Django框架开发,使用MySQL作为项目的数据库,并且使用Celery任务队列实现异步任务。 该项目包含了商品列表展示、购物车、订单管理、收货地址管理等多个功能,可以实现用户浏览商品、选择商品加入购物车、提交订单…

    database 2023年5月22日
    00
  • SQLServer2008的实用小道具 merger使用介绍

    SQLServer2008的实用小道具Merger使用介绍 什么是Merger Merger是一个针对SQL Server 2008的工具,用于合并两个具有相同模式(schema)的数据库,并将源数据库中的记录与目标数据库中的记录进行比较并同步。通过使用Merger,您可以快速将一个数据库与另一个数据库合并为单个数据库,并确保数据一致性和完整性。 Merge…

    database 2023年5月21日
    00
  • 详解Mysql基础语法的使用

    详解Mysql基础语法的使用 MySQL是世界流行的关系型数据库管理系统,具有丰富的功能和易于使用的特点。在本文中,我们将深入探讨MySQL基础语法的使用,包括如何创建和删除数据库,以及如何创建、修改和删除表格等。 创建和删除数据库 使用MySQL创建数据库非常简单,只需要使用CREATE DATABASE命令: CREATE DATABASE mydata…

    database 2023年5月22日
    00
  • spring aop execution表达式的用法

    关于“spring aop execution表达式的用法”,我将为您提供完整的攻略。 什么是Spring AOP Execution表达式? Spring AOP 是Spring框架的一个重要模块。它提供了一个机制来优雅地在对象上进行横向切面编程,使程序的功能得到增强。Spring AOP Execution表达式是Spring AOP的一部分,通常用于创…

    database 2023年5月21日
    00
  • mysql 按照时间段来获取数据的方法

    获取 MySQL 数据库中某个时间段之内的数据是开发中经常遇到的问题,在 MySQL 中,可以使用 WHERE 子句的 BETWEEN 运算符或者 > 和 < 运算符来实现。下面是具体步骤: 步骤一:准备数据 首先,我们需要准备一张包含时间信息的表,例如: CREATE TABLE `mytable` ( `id` int(11) NOT NUL…

    database 2023年5月22日
    00
  • C基础 redis缓存访问详解

    C基础 redis缓存访问详解 什么是Redis Redis是一个基于Key-Value存储的NoSQL数据库,完全开源免费。Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合,并且提供了丰富的操作命令以及事务支持。 Redis在C语言中的应用 当我们在C语言中需要使用Redis时,需要借助Redis官方提供的hiredis库,hiredis…

    database 2023年5月22日
    00
  • java分页拦截类实现sql自动分页

    Java分页拦截类实现SQL的自动分页主要是通过用自定义插件的方式实现,它更加灵活和便捷。下面将介绍实现步骤。 1. 配置文件 需要在mybatis-config.xml中配置插件: <!– 配置PageHelper插件 –> <plugins> <plugin interceptor="com.github.pa…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部