iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >sqlserver排查死锁优化性能
  • 463
分享到

sqlserver排查死锁优化性能

2024-04-02 19:04:59 463人浏览 薄情痞子
摘要

一.概述 记得以前客户在使用软件时,有偶发出现死锁问题,因为发生的时间不确定,不好做问题的重现,当时解决问题有点棘手了。现总结下查看死锁的常用二种方式。 1.1 第一种是图形化监听:

一.概述

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

1.1 第一种是图形化监听:

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

监听到的死锁图形如下图

这里的描述大致是:有二个进程 一个进程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 infORMation
Wait-for graph
NULL
node:1 
PAGE: 7:1:6229275 CleanCnt:2 Mode:IX Flags: 0x3
Grant List 3:
Owner:0x00000004E99B7880 Mode: IX Flg:0x40 Ref:1 Life:02000000 SPID:219 ECID:0 XactLockInfo: 0x0000000575C7E970
SPID: 219 ECID: 0 Statement Type: UPDATE Line #: 84
Input Buf: Language Event: exec proc_PUB_StockDataImport
Requested by: 
ResType:LockOwner Stype:'OR'Xdes:0x0000000C7A905D30 Mode: U SPID:64 BatchID:0 ECID:59 TaskProxy:(0x0000000E440AAFE0) Value:0x8d160240 Cost:(0/0)
NULL

Node:2 
PAGE: 7:1:5692366 CleanCnt:2 Mode:U Flags: 0x3
Grant List 3:
Owner:0x0000000D12099B80 Mode: U Flg:0x40 Ref:0 Life:00000001 SPID:64 ECID:0 XactLockInfo: 0x000000136B4758F0
SPID: 64 ECID: 0 Statement Type: UPDATE Line #: 108
Input 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-list
deadlock victim=process956f4c8
process-list
process 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=128056
executionStack
frame procname=Test.dbo.proc_CnofStock line=108 stmtstart=9068 stmtend=9336 sqlhandle=0x03000700c503123601ba25019ca800000100000000000000
update dbo.pub_stock
set UpdateTime=GETDATE()
from pub_stock a
join 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排查死锁优化性能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: sqlserver排查死锁优化性能

本文链接: https://www.lsjlt.com/news/145474.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • sqlserver排查死锁优化性能
    一.概述 记得以前客户在使用软件时,有偶发出现死锁问题,因为发生的时间不确定,不好做问题的重现,当时解决问题有点棘手了。现总结下查看死锁的常用二种方式。 1.1 第一种是图形化监听:...
    99+
    2022-11-13
  • sql server怎么排查死锁优化性能
    本篇内容主要讲解“sql server怎么排查死锁优化性能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sql server怎么排查死锁优化性能”吧!一.概述记得以前客户在使...
    99+
    2023-06-29
  • sqlserver查询语句阻塞优化性能
     在生产环境下,有时公司客服反映网页半天打不到,除了在浏览器按F12的Network响应来排查,确定web服务器无故障后。就需要检查数据库是否有出现阻塞 当时数据库的生产环...
    99+
    2022-11-13
  • Android性能优化死锁监控知识点详解
    目录前言死锁检测线程Block状态获取当前线程所请求的锁通过锁获取当前持有的线程线程启动nativePeer 与 native Thread tid 与java Thread tid...
    99+
    2022-11-13
    Android性能优化死锁监控 Android死锁监控
  • ORACLE死锁(ORA-00060)故障排查的一般性手法
    ORACLE死锁(ORA-00060)故障排查的一般性手法       【背景】 今晨巡检发现SAP PRD产生一个死锁: Sun Ju...
    99+
    2022-10-18
  • 如何实现MySQL底层优化:事务锁的性能优化和避免死锁的方法
    如何通过事务锁的性能优化和避免死锁来实现MySQL底层优化导言:在MySQL数据库中,事务锁起着至关重要的作用。如果事务锁的性能不好或者存在死锁,将严重影响数据库的性能和稳定性。因此,本文将重点介绍如何通过优化事务锁的性能和避免死锁来实现M...
    99+
    2023-11-08
    MySQL 优化 死锁 事务锁
  • SQLSERVER使用表分区优化性能
    目录1.简介2.表分区2.1分区范围2.2分区键2.3索引分区3.创建表分区3.1创建文件组3.2指定文件组存放路径3.3创建分区函数3.4创建分区方案3.5创建分区表3.6创建分区...
    99+
    2022-11-13
  • 如何实现MySQL底层优化:事务锁的高级性能优化和避免死锁的方法
    如何实现MySQL底层优化:事务锁的高级性能优化和避免死锁的方法引言:在数据库系统中,事务锁是保证数据一致性和并发访问的重要机制之一。然而,在高并发场景下,事务锁可能会导致性能问题和死锁。为了提高MySQL性能,我们需要对事务锁进行高级性能...
    99+
    2023-11-08
    死锁 MySQL底层优化关键词:事务 锁优化
  • mysql-查询性能优化
    不要取出全部列,取出全部列,会让优化器无法完成索引覆盖扫描这类优化,还会为服务器带来额外的I/O、内存和CPU的消耗。应该严格禁止SELECT * 的写法。MySQL使用如下三种方式应用WHERE条件,从好到坏依次...
    99+
    2021-02-18
    mysql-查询性能优化
  • 优化与调整MySQL锁的性能
    MySQL 锁的性能优化与调整在使用MySQL数据库进行开发和应用时,锁的性能优化和调整是一个非常重要的问题。合理的锁策略能够有效地提高数据库并发性能,保证数据的一致性和完整性。本文将从锁的基本概念开始,介绍MySQL锁的类型和使用方法,并...
    99+
    2023-12-21
    MySQL锁优化 锁性能调整 MySQL锁调优
  • MYSQL(四)查询性能优化
    优化数据访问1.是否向数据库请求了不需要的数据解决方式:A. 查询后加limitB. Select后写需要的列而不是*2. 是否扫描了额外的数据数据库的访问方式速度由...
    99+
    2022-10-18
  • DB2性能优化 – 如何通过调整锁参数优化锁升级
    1、概念描述所谓的锁升级(lock escalation),是数据库的一种作用机制,为了节约内存的开销, 其会将为数众多并占用大量资源的细粒度的锁转化为数量较少的且占用相对较少资源的粗粒度的锁,多数情况下主...
    99+
    2022-10-18
  • MySQL优化 - 性能分析与查询优化
    MySQL优化 - 性能分析与查询优化    优化应贯穿整个产品开发周期中,比如编写复杂SQL时查看执行计划,安装MySQL服务器时尽量合理配置(见过太多完全使用默认配置安装的情况),根...
    99+
    2022-10-18
  • SqlServer性能优化,查看CPU、内存占用大的会话及SQL语句
    1,查看CPU占用量最高的会话及SQL语句   select spid,cmd,cpu,physical_io,memusage, (select top 1 [text] from ::fn_get_sql(sql_handle...
    99+
    2019-07-24
    SqlServer性能优化,查看CPU 内存占用大的会话及SQL语句
  • Java服务假死之生产事故的排查与优化问题
    目录一、现象二、排查1、打印堆栈2、查看socket连接3、查看JVM基本信息4、查看GC日志5、分析dump文件三、优化四、总结一、现象 在服务器上通过curl命令调用一个Java...
    99+
    2022-11-13
  • 优化 MySQL 并发控制锁的性能
    MySQL 锁的并发控制与性能优化,需要具体代码示例摘要:在MySQL数据库中,锁的并发控制是非常重要的,它能够确保数据的一致性和完整性。本文将详细介绍MySQL中锁的种类和使用场景,以及如何优化锁的性能。同时,还会提供一些实际的代码示例,...
    99+
    2023-12-21
    性能优化 并发控制 MySQL
  • Golang中锁机制的性能优化技巧
    在Golang中,锁(Mutex)是一种常用的并发控制机制,但在某些情况下,使用锁可能会导致性能问题。以下是一些Golang中锁机制...
    99+
    2023-10-08
    Golang
  • 如何优化MySQL的查询性能?
    如何优化MySQL的查询性能?MySQL是一款广泛应用于Web开发的关系型数据库管理系统。然而,在处理大量数据和复杂查询时,MySQL的查询性能可能会受到影响,从而导致应用程序的响应时间变慢。为了提高MySQL的查询性能,我们可以采取以下几...
    99+
    2023-10-22
    索引优化 数据库缓存 查询重写
  • MySQL中怎么优化查询性能
    MySQL中怎么优化查询性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。WHERE条件字段使用函数假设我们有如下创建表的语句mysq...
    99+
    2022-10-18
  • MySQL高性能索引策略和查询性能优化
    前缀索引和索引选择性 有时候需要索引很长的字符,这会让索引变得大且慢。一个策略是模拟哈希索引。 通常可以索引开始的部分字符,这样可以大大解约索引空间,提高索引效率。但这样会降低索引的选择性。 索引的选择性:不重复的索引值(也成为基数)和...
    99+
    2017-05-17
    MySQL高性能索引策略和查询性能优化
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作