首页 > 数据库 >【转】SQL SERVER死锁查询,死锁分析,解锁,查询占用

【转】SQL SERVER死锁查询,死锁分析,解锁,查询占用

时间:2024-09-25 16:48:28浏览次数:8  
标签:qs dm resource SERVER sys 死锁 sql 查询 id

简单点的处理方法:

1、查询死锁的表

select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT'

2、解锁

declare @spid int
Set @spid = 79 --锁表进程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)

 

 

专业点的处理方法:

1.查询死锁的表:

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

2.分析被锁死的原因:

select t1.resource_type                                [资源锁定类型]
     , DB_NAME(resource_database_id)                as 数据库名
     , t1.resource_associated_entity_id                锁定对象
     , t1.request_mode                              as 等待者请求的锁定模式
     , t1.request_session_id                           等待者SID
     , t2.wait_duration_ms                             等待时间
     , (select TEXT
        from sys.dm_exec_requests r
               cross apply
             sys.dm_exec_sql_text(r.sql_handle)
        where r.session_id = t1.request_session_id) as 等待者要执行的SQL
     , t2.blocking_session_id                          [锁定者SID]
     , (select TEXT
        from sys.sysprocesses p
               cross apply
             sys.dm_exec_sql_text(p.sql_handle)
        where p.spid = t2.blocking_session_id
)                                                      锁定者执行语句
from sys.dm_tran_locks t1,
     sys.dm_os_waiting_tasks t2
where t1.lock_owner_address = t2.resource_address

3.解锁:

create Proc Sp_KillAllProcessInDB
@DbName VarChar(100)
as
if db_id(@DbName) = Null
begin
Print 'DataBase dose not Exist'
end
else
 
Begin
Declare @spId Varchar(30)
 
DECLARE TmpCursor CURSOR FOR
Select 'Kill ' + convert(Varchar, spid) as spId
from master..SysProcesses
where db_Name(dbID) = @DbName
and spId <> @@SpId
and dbID <> 0
OPEN TmpCursor
 
FETCH NEXT FROM TmpCursor
INTO @spId
 
WHILE @@FETCH_STATUS = 0
 
BEGIN
 
Exec (@spId)
 
FETCH NEXT FROM TmpCursor
INTO @spId
 
END
 
 
CLOSE TmpCursor
DEALLOCATE TmpCursor
 
end

4、查询SQL占用资源情况:

SELECT TOP 20
    total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
    qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
    last_execution_time AS [最后一次执行时间],max_worker_time /1000 AS [最大执行时间(ms)],
    SUBSTRING(qt.text,qs.statement_start_offset/2+1, 
        (CASE WHEN qs.statement_end_offset = -1 
        THEN DATALENGTH(qt.text) 
        ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1) 
    AS [使用CPU的语法], qt.text [完整语法],
    dbname=db_name(qt.dbid),
    object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH(nolock)
CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count>1
ORDER BY total_worker_time DESC

 

标签:qs,dm,resource,SERVER,sys,死锁,sql,查询,id
From: https://www.cnblogs.com/K-R-/p/18431639

相关文章

  • Windows Server 安装MySQL教程(图文)
    本篇教程,在服务器WindowsServer2016(中文版)上安装MySQL8.0,并记录详细的安装步骤。1、下载安装包在mysql官网上下载安装包下载地址:https://dev.mysql.com/downloads/installer/2、安装步骤下载之后,双击运行mysql-installer-community-8.0.39.0.msi如果双击无反应,那么需要安装一......
  • 编译安装redis运行注册服务脚本sh install_server.sh时报错。
    在编译安装redis的时候,运行注册服务脚本shinstall_server.sh时,报错。WelcometotheredisserviceinstallerThisscriptwillhelpyoueasilysetuparunningredisserverThissystemsseemstousesystemd.Pleasetakealookattheprovidedexampleserviceunitfi......
  • SQLServer中,当压缩备份遇到TDE加密的数据库
    压缩备份和TDESQLServer的压缩备份是一个特性,根据实际使用中的观察,压缩比至少在1:5左右,也就是备份时增加了压缩选项后可以至少压缩到数据文件大小的20%甚至更低,可以很大程度上加快备份执行时间,减轻IO压力和节省磁盘存储空间SQLServer的TDE(TransparentDataEncryption)作为数据库......
  • Server-Sent Events (SSE) Koa2 & Nginx & React 实践
    Server-SentEvents(SSE)Koa2&Nginx&React实践得鹿梦鱼前端+node全栈,骑马找马中,有兴趣可私聊​关注他 在现代Web应用中,实时数据传输变得越来越重要。Server-SentEvents(SSE)是一种轻量级的技术,允许服务器向客户端主动发送更新。本文将详细介......
  • Vue3 - 详细实现安装引入高德地图并查询展示周边交通/教育/医疗/商场/生活/娱乐等POI
    前言Vue2版本,请访问这篇文章。在vue3|nuxt3项目开发中,详解高德地图根据当前定位获取周边附近的商圈,vue3高德地图获取周边商圈并将这些地址位置列出来供用户点击跳转和选择,获取当前位置或指定区域周边的交通出行、学校教育、医院诊所、商场购物、生活娱乐、旅游景......
  • SQL Server 语句日期格式查找方法
    SQLServer语句日期格式查找方法 1.SQLServer中,处理日期格式和查找特定日期格式方法示例在SQLServer中,处理日期格式和查找特定日期格式的记录是一个常见的需求。SQLServer提供了多种函数和格式选项来处理和比较日期。以下是一个详细的示例,展示了如何根据特定日期格式查......
  • 单个48TB大小SQL Server数据库备份导致日志文件无法截断
    单个48TB大小SQLServer数据库备份导致日志文件无法截断 SQLServer版本:SQLServer2019背景在一个48T大小的单数据库环境中,采用简单恢复模式,日志文件大小限制为600G。执行一次完整备份时,耗时超过12小时,导致日志文件无法截断并达到上限,后续事务无法正常写入,导致整个数据库不可......
  • SQL Server的Descending Indexes降序索引
    SQLServer的DescendingIndexes降序索引 SQLServer的DescendingIndexes降序索引   背景索引是关系型数据库中优化查询性能的重要手段之一。对于需要处理大量数据的场景,合理的索引策略能够显著减少查询时间。特别是在涉及多字段排序的复杂查询中,选择合适的索引类型......
  • Server-Sent Events 教程
    Server-SentEvents教程作者: 阮一峰日期: 2017年5月27日服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-SentEvents(以下简称SSE)。本文介绍它的用法。一、SSE的本质严格地说,HTTP协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声......
  • C# 用统一代码动态查询数据库并显示数据
    初级代码游戏的专栏介绍与文章目录-CSDN博客我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。源码指引:github源码指引_初级代码游戏的博客-CSDN博客    ......