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

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

时间:2024-12-06 14:54:09浏览次数:7  
标签:qs dm resource SERVER sys 死锁 sql 查询 id

From:  https://www.cnblogs.com/K-R-/p/18431639

简单点的处理方法:

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/joeblackzqq/p/18590838

相关文章

  • 考研信息查询系统|Java|SSM|VUE| 前后端分离
    【重要1⃣️】前后端源码+万字文档+部署文档            【包含内容】【一】项目提供非常完整的源码注释【二】相关技术栈文档【三】源码讲解视频                     【其它服务】【一】可以提供远程......
  • 记录一次doris查询优化
    记录一次Doris优化背景因为工作需要解决大数据问题,提供大数据平台,使用到doris.大家应该知道ApacheDoris(原Palo)是一款现代化的分布式SQL数据库,专为实时分析和大规模数据处理而设计。它结合了MPP(大规模并行处理)架构与列式存储的优点,旨在提供高性能、高并发、低延迟的......
  • 技术框架中对高级查询环境搭建学习
    高级查询MyBatis高级查询之前在学习MapperXML映射文件时,说到resultMap标记是MyBatis中最重要最强大也是最复杂的标记,而且还提到后面会详细介绍它的高级用法。听到高级用法不要觉得有多高级,说白了就是联表查询。MyBatis支持三种联表查询方式:一对一关联查询一对多关......
  • MyBatisPlus整合mybatisplus-plus和MyBatis-Plus-Join同时支持默认的方法和多表联查加
    前情提要:在工作上的时候遇到一个情况,一个实体类没有唯一主键而是由两到三个字段组成的复合主键比如:classUser{privateStringorg;privateStringuserId;privateStringname;}在需求中这种类的主键就是org+userId来组成的联合主键,如果使用mp的话不......
  • mysql left join on条件与where条件 统计报表查询方法
    mysqlleftjoinon条件与where条件统计报表查询方法1.确定数据数量,通过简化的sql查找符合条件的订单号列表2.然后根据需求,添加单个的字段,在这个过程中会添加leftjoin左关联表查询需要区分两种情况2.1.可以唯一确定记录的,(SELECTt3.get_car_addrFROM`delivery_addr`t3W......
  • MySQL的eq_range_index_dive_limit参数对in查询影响
    目录参数说明场景复现参数说明MySQL5.7的官方说明文档:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_eq_range_index_dive_limiteq_range_index_dive_limit变量影响优化器在等值比较的条件中,如何评估符合条件的行数。等值比较的表达式类似以......
  • 【ubuntu】使用redis-cli操作redis查询
    一、场景命令行操作redis,万一没有界面化软件可用   二、文档https://redis.io/docs/latest/develop/tools/cli/  三、安装sudoapt-getupdatesudoapt-getinstallredis-tools  四、命令介绍$redis-cli--helpredis-cli7.0.15Usage:redis-cli[O......
  • 【mysql】explain命令分析慢查询
    一、场景   在进行功能开发或者测试的时候,有时候会遇到查询较慢的问题  二、explain命令介绍https://dev.mysql.com/doc/refman/8.4/en/explain.html 三、使用 字段介绍id:查询的序列号select_type:查询的类型table:查询的表partitions:......
  • 查询数据库表及表字段
    --mysqlSELECTt.TABLE_SCHEMAAS'数据库名',t.TABLE_NAMEAS'表名',t.TABLE_COMMENTAS'表注释',--REPLACE(REPLACE(t.TABLE_COMMENT,'\r\n',''),'\n','')AS'表注释&#......
  • 更改geoserver的 GEOSERVER_DATA_DIR
    默认情况下,geoserver启动会去读取系统环境变量,JAVA_HOME``GEOSERVER_HOME``GEOSERVER_DATA_DIR因此,方法1,直接修改环境变量来替换data_dir,控制面板->系统(->系统)->高级系统设置->环境变量->系统或用户变量方法2,这些处理语句写在bin/start.bat里,利用这点可以去自定义目录。这......