我的编程空间,编程开发者的网络收藏夹
学习永远不晚

sql server怎么排查死锁优化性能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

sql server怎么排查死锁优化性能

本篇内容主要讲解“sql server怎么排查死锁优化性能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sql server怎么排查死锁优化性能”吧!

一.概述

记得以前客户在使用软件时,有偶发出现死锁问题,因为发生的时间不确定,不好做问题的重现,当时解决问题有点棘手了。现总结下查看死锁的常用二种方式。

1.1 第一种是图形化监听:

sqlserver -->工具--> sql server profiler 登录后在跟踪属性中选择如下图:

sql server怎么排查死锁优化性能

监听到的死锁图形如下图

sql server怎么排查死锁优化性能

sql server怎么排查死锁优化性能

这里的描述大致是:有二个进程 一个进程ID是96, 另一个ID是348. 系统自动kill 掉了进程ID:96,保留了进程ID:348 的事务Commit。

上面死锁是由于批量更新出现PAG范围锁, 双方进程在同一分区索引资源上。ID96,348都请求想获取更新锁(U),各占排它锁(x)不释放,直到锁超时。

1.2 第二种是使用日志跟踪(errorlog)

以全局方式打开指定的跟踪标记

DBCC TRACEON(1222,-1)DBCC TRACEON(1204,-1)

使用 EXEC master..xp_readerrorlog 查看日志。 

Deadlock encountered .... Printing deadlock informationWait-for graphNULLNode:1 PAGE: 7:1:6229275 CleanCnt:2 Mode:IX Flags: 0x3Grant List 3:Owner:0x00000004E99B7880 Mode: IX Flg:0x40 Ref:1 Life:02000000 SPID:219 ECID:0 XactLockInfo: 0x0000000575C7E970SPID: 219 ECID: 0 Statement Type: UPDATE Line #: 84Input Buf: Language Event: exec proc_PUB_StockDataImportRequested by: ResType:LockOwner Stype:'OR'Xdes:0x0000000C7A905D30 Mode: U SPID:64 BatchID:0 ECID:59 TaskProxy:(0x0000000E440AAFE0) Value:0x8d160240 Cost:(0/0)NULLNode:2 PAGE: 7:1:5692366 CleanCnt:2 Mode:U Flags: 0x3Grant List 3:Owner:0x0000000D12099B80 Mode: U Flg:0x40 Ref:0 Life:00000001 SPID:64 ECID:0 XactLockInfo: 0x000000136B4758F0SPID: 64 ECID: 0 Statement Type: UPDATE Line #: 108Input Buf: RPC Event: Proc [Database Id = 7 Object Id = 907150277]
node:1 部分显示的几个关键信息:

PAGE 7:1:6229275(所在数据库ID 7, 1分区, 6229275行数)

Mode: IX 锁的模式 意向排它锁

SPID: 219 进程ID

Event: exec proc_PUB_StockDataImport 执行的存储过程名

node:2 部分显示的几个关键信息

PAGE 7:1:5692366 (所在数据库ID 7, 1分区,5692366行数)

Mode:U锁的模式 更新锁

RPC Event: Proc 远程调用

SPID: 64 进程ID

Victim Resource Owner:ResType:LockOwner Stype:'OR'Xdes:0x0000000C7A905D30 Mode: U SPID:64 BatchID:0 ECID:59 TaskProxy:(0x0000000E440AAFE0) Value:0x8d160240 Cost:(0/0)deadlock-listdeadlock victim=process956f4c8process-listprocess id=process956f4c8 taskpriority=0 logused=0 waitresource=PAGE: 7:1:6229275 waittime=2034 ownerId=2988267079 transactionname=UPDATE lasttranstarted=2018-04-19T13:54:00.360 XDES=0xc7a905d30 lockMode=U schedulerid=24 kpid=1308 status=suspended spid=64 sbid=0 ecid=59 priority=0 trancount=0 lastbatchstarted=2018-04-19T13:53:58.033 lastbatchcompleted=2018-04-19T13:53:58.033 clientapp=.Net SqlClient Data Provider hostname=VMSERVER76 hostpid=16328 isolationlevel=read committed (2) xactid=2988267079 currentdb=7 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056executionStackframe procname=Test.dbo.proc_CnofStock line=108 stmtstart=9068 stmtend=9336 sqlhandle=0x03000700c503123601ba25019ca800000100000000000000update dbo.pub_stockset UpdateTime=GETDATE()from pub_stock ajoin PUB_PlatfromStocktemp b on a.GUID=b.StockGuid

从上面的信息能看到kill 掉的是进程id是process956f4c8,

进程spid=64

lockMode=U 获取更新锁

isolationlevel=read committed

executionStack 执行的堆信息:

存储名 procname=Test.dbo.proc_CnofStock

语句 update dbo.pub_stock set UpdateTime=GETDATE() ..

clientapp 发起事件的来源

1.3 最后总结 避免死锁的解决方法

按同一顺序访问对象。

优化索引,避免全表扫描,减少锁的申请数目.

避免事务中的用户交互。

使用基于行版本控制的隔离级别。

将事务默认隔离级别的已提交读改成快照

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

使用nolock去掉共享锁,但死锁发生在u锁或x锁上,则nolock不起作用

升级锁颗粒度(页锁,表锁), 以阻塞还代替死锁

到此,相信大家对“sql server怎么排查死锁优化性能”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

sql server怎么排查死锁优化性能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

sql server怎么排查死锁优化性能

本篇内容主要讲解“sql server怎么排查死锁优化性能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sql server怎么排查死锁优化性能”吧!一.概述记得以前客户在使用软件时,有偶发出现
2023-06-29

SQL Server性能怎么优化

本篇内容主要讲解“SQL Server性能怎么优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server性能怎么优化”吧!数据库性能诊断和优化是提高数据库性能和稳定性的关键技术之一。
2023-06-27

sql server查询语句阻塞优化性能问题怎么解决

这篇文章主要介绍“sql server查询语句阻塞优化性能问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“sql server查询语句阻塞优化性能问题怎么解决”文章能帮助大家解决问题。 在
2023-06-29

在SQL Server中如何使用非聚集索引优化查询性能

在SQL Server中,非聚集索引可以帮助优化查询性能。具体步骤如下:首先,确保在查询中使用了合适的WHERE条件来筛选数据,这样可以帮助数据库引擎使用非聚集索引进行查找。在创建表时,可以为经常用于查询的列创建非聚集索引。可以使用以下语法
在SQL Server中如何使用非聚集索引优化查询性能
2024-06-03

Teradata怎么实现自动化优化查询性能

Teradata提供了一些工具和功能来实现自动化优化查询性能,其中包括:Teradata Query Grid:Teradata Query Grid是一个自动化查询调度和执行工具,它能够实现跨多个Teradata系统的查询优化和执行,并通
Teradata怎么实现自动化优化查询性能
2024-04-09

mongodb多条件查询性能怎么优化

要优化MongoDB多条件查询的性能,可以考虑以下几个方面:创建合适的索引:在MongoDB中,索引是提高查询性能的关键。为多条件查询的字段创建合适的组合索引可以有效地加快查询速度。使用覆盖索引:覆盖索引是指查询结果可以完全通过索引来获取,
mongodb多条件查询性能怎么优化
2024-04-10

PL/SQL中的性能怎么诊断与优化

在PL/SQL中,性能问题通常可以通过以下方法进行诊断与优化:使用Explain Plan:使用Oracle数据库的Explain Plan工具可以帮助分析SQL语句的执行计划,从而找出执行效率低下的地方。使用PL/SQL Profiler
PL/SQL中的性能怎么诊断与优化
2024-05-07

PostgreSQL中怎么进行性能调优和查询优化

在 PostgreSQL 中进行性能调优和查询优化可以通过以下几种方式来实现:使用合适的索引:创建索引可以加速查询操作,尤其是对于经常被查询的字段。在选择需要创建索引的字段时,可以考虑使用 WHERE 子句中经常被用到的字段以及 JOIN
PostgreSQL中怎么进行性能调优和查询优化
2024-03-12

怎么优化NoSQL数据库的查询性能

要优化NoSQL数据库的查询性能,可以考虑以下几个方面:数据模型设计:设计合理的数据模型可以减少查询的复杂度,提高查询性能。可以根据实际需求对数据进行合理划分和建模。索引优化:在NoSQL数据库中,可以通过创建合适的索引来加快查询速度。确保
怎么优化NoSQL数据库的查询性能
2024-05-07

SQL Server优化技巧——如何避免查询条件OR引起的性能问题

之前写过一篇博客“SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析”,里面介绍了OR可能会引起全表扫描或索引扫描的各种案例,以及如何优化查询条件中含有OR的SQL语句的几种方法,其实还有一些方法可以用来优化这种问题,这里简单介绍一下。   如下所示
SQL Server优化技巧——如何避免查询条件OR引起的性能问题
2017-06-21

在SQL Server中什么是参数化查询它如何帮助提升性能

参数化查询是指在执行SQL查询时使用参数来代替具体的数值或字符串,这样可以减少SQL语句的文本长度并且可以防止SQL注入攻击。参数化查询可以通过将查询的参数与查询语句分开来执行,从而提高查询的性能。参数化查询可以帮助提升性能的原因包括:缓
在SQL Server中什么是参数化查询它如何帮助提升性能
2024-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录