SQL Server 阻塞、死锁和最大并行度

如何监控和解决SQL Server的阻塞(1) (当前阻塞) 什么是"阻塞"? 阅读详情

1.阻塞

阻塞:是指当一个数据库会话中的事务,正在锁定其他会话事务想要读取或修改的资源,造成这些会话发出的请求进入等待的状态。SQL Server 默认会让被阻塞的请求无限期地一直等待,直到原来的事务释放相关的锁,或直到它超时 (根据 SET LOCK_TIMEOUT参数)、进程被杀死、服务器关闭。一般系统中,偶尔有短时间的阻塞是正常且合理的;但若设计不良的程序,就可能导致长时间的阻塞,这样就不必要地锁定了资源,而且阻塞了其他会话欲读取或更新的需求,系统表现为很卡。

项目中平时遇到的大多数是阻塞问题,比如系统页面报超时错误、SSMS中执行一条原本很快的SQL却卡住执行不了或需要执行很久、甚至整个数据库处于瘫痪卡死状态(严重情况)等。

阻塞的原因有很多,这里简单罗列下:

1.并发执行大量表扫描的SQL,由于缺失索引,造成大量阻塞,这种现象非常常见,例如网站首页中某个模块加载的SQL中缺失索引,导致网站首页访问超时。

2.隔离级别的问题,SQL Server默认隔离级别为READ COMMITTED,级别越高,并发性越差,造成阻塞的几率也越高。

3.长时间运行的SQL或者存储过程,由于执行效率较低或内容较多,事务期间会阻塞住其他会话执行


 

2.死锁

死锁:是指多个事务会话互相等待对方释放持有的锁而造成的环路,如果没有外部干预,死锁将无限期持续下去。Sqlserver 中默认产生死锁时,会根据事务开销选择终止并回滚其中某一个事务,让其他事务获取所需的锁完成事务提交。如果系统出现大量死锁,会导致用户使用过程中出现大量死锁报错页面,事务数据无法正常提交,影响系统使用。

死锁发生的现象往往是很明显的,页面会出现报错,如下图

3.阻塞与死锁区别

阻塞现象:系统访问超时、卡慢 
死锁现象:系统访问报错

死锁其实也是由于阻塞造成的,会话之间先是阻塞,然后又因为产生交叉访问,造成环路,最终死锁。死锁的发生其实和阻塞是类似的,只不过阻塞是一种串行的等待,而死锁是交叉环路。

等待方式:默认情况下,当数据库出现阻塞时,如果没有人工干预,那么该会话会一直阻塞下去,直到阻塞该会话的事务结束,或直到LOCK_TIMEOUT设置的超时等待时间(默认为0即无限); 而当出现死锁时,数据库会立即根据事务的回滚开销,来选择终止(回滚)其中一个事务,进而解除死锁,所以死锁会造成操作无效。

4.排查维护

SQLServer 性能排查指南

4.1 阻塞处理

当系统突然发生了超时或卡顿等情况,可以先使用下面的脚本查看数据库阻塞情况,正常情况下没有结果或者出现少量短时间阻塞,问题发生时,通常会出现大量长时间阻塞,可以根据显示的BlockingSession_TSQL进行查看是SQL性能问题还是程序问题,必要时可以选择kill掉阻塞的会话来解决。

 SELECT  R.session_id AS WaitingSessionID ,  
            S.session_id AS BlockingSessionID ,  
            Q1.text AS WaitingSession_TSQL ,  
            Q2.text AS BlockingSession_TSQL ,  
            A.wait_duration_ms as WAIT_DURATION_MS ,
            S.original_login_name AS BlockingSession_LoginName ,  
            S.program_name AS BlockingSession_ApplicationName ,  
            S.host_name AS BlockingSession_HostName 
    FROM    sys.dm_exec_requests AS R  
            INNER JOIN sys.dm_exec_sessions AS S ON R.blocking_session_id = S.session_id  
            INNER JOIN sys.dm_exec_connections AS C1 ON R.session_id = C1.most_recent_session_id  
            INNER JOIN sys.dm_exec_connections AS C2 ON S.session_id = C2.most_recent_session_id  
            INNER JOIN sys.dm_os_waiting_tasks AS A ON A.session_id = C1.most_recent_session_id  
            CROSS APPLY sys.dm_exec_sql_text(C1.most_recent_sql_handle) AS Q1  
            CROSS APPLY sys.dm_exec_sql_text(C2.most_recent_sql_handle) AS Q2  

示例:

4.2 死锁处理

当系统中出现死锁时,可以使用SQl Profile进行死锁监控(具体方法参考SQLServer 性能排查指南),捕捉到死锁后进行分析,看是否是由于SQL缺失索引导致。

5.最大并行度

SQL Server 通过设置最大并行度来限制并行计划执行时所用的处理器数,默认为0,即不限制,由SQL Server自己控制并行。

并行开销阈值:指定SQLServer创建和运行并行查询计划的阈值,仅当运行同一查询的串行计划的估计开销高于在“并行的开销阈值”中设置的值时,SQLServer才创建和运行该查询的并行计划。开销指的是在特定硬件配置中运行串行计划估计需要花费的时间(秒)。

我们的业务系统一般都是为OLTP,理想情况下事务很短,这时候其实就没必要通过并行来提高运行速度,所以对于这类系统来说,可以把最大并行度设为1,也就是不适用并行操作,从而减少不必要的资源等待。

如果是OLAP,由于事务普遍较长,所以并行操作往往能提高速度和资源利用率。

个人观点:对于最大并行度,项目上出现过几次该问题,导致系统访问超时,修改为1也就是关闭最大并行度后,问题解决。对于我们公司的系统来说,大部分事务都很短,不需要并行,小部分较长的事务可以改写SQL来使用并行; 另外也可以调整并行阈值,同时设置并行度为0或是固定值;

SELECT * FROM TEST  WHERE OBJECT_ID =1 OPTION (MAXDOP 8) 

没有最好的方法,只有最适合的方法

SQL Server数据库中的并行度参数与最大并行度参数 总结起来,最大并行度参数是SQL Server数据库中一个重要的配置参数,它对查询的并行执行进行限制,从而影响查询的性能和资源利用。在SQL Server中,默认情况下,最大并行度参数的值为0,表示可以使用尽可能多的并行线程执行查询。在SQL Server数据库中,最大并行度(Max Degree of Parallelism)是一个重要的参数,它对查询的执行计划中可以使用的并行线程数量进行限制。然而,简单的查询可能不需要并行执行,过高的最大并行度参数可能导致不必要的开销。如有更多问题,请随时提问。 阅读详情

相关推荐

15、SQL Server 阻塞与死锁分析及自动化管理

本博客详细介绍了 SQL Server 中阻塞与死锁的概念、成因及分析方法,并提供了相应的解决和预防策略。内容涵盖阻塞进程报告、死锁的处理机制、性能优化方法,以及如何通过 SQL Server Agent 实现数据库的自动化管理,包括作业、操作员、警报和数据库邮件的配置与使用。同时,还提供了具体的实践场景和操作步骤,帮助管理员有效减少阻塞和死锁的发生,提升数据库系统的稳定性与性能。

sunny的博客 145

SQL Server数据库 最大并行度

SQL Server数据库 最大并行度,优化查询效率

u010992421的专栏 3011

49、SQL Server性能监控与故障排除:阻塞、死锁及错误处理

本文深入探讨了SQL Server中的阻塞和死锁问题,以及如何利用专用管理员连接(DAC)进行数据库错误排查。内容涵盖SQL Server 2005的隔离级别、死锁检测与处理、性能监控工具的使用,以及优化建议,帮助管理员和开发人员快速诊断并解决常见的并发性能问题。

f9g0h的博客 104

数据库阻塞和死锁的区别(转载)

数据库阻塞和死锁的区别(转载) 数据库阻塞和死锁在程序开发过程经常出现,怎么样避免呢?下面通过Demo简单模拟下,数据库发生阻塞和死锁的现象: 一、数据库阻塞: 数据库阻塞的现象:第一个连接占有资源没有释放,而第二个连接需要获取这个资源。如果第一个连接没有提交或者回滚, 第二个连接会一直等待下去,直到第一个连接释放该资源为止。对于阻塞,数据库无法处理,所以对数据库操作要及时地提交...

jangta的专栏 981

SQL Server死锁与阻塞排查:查询定位进程并Kill处理

在数据库并发访问中,锁机制是保障数据一致性的基石,但锁的竞争也会引发性能问题。死锁(Deadlock)与阻塞(Blocking)是两类常见却易混淆的现象:阻塞是一个事务持锁导致其他事务等待,而死锁则是多个事务循环等待资源,最终由锁监视器选择牺牲者回滚。理解二者差异,才能针对性排查。通过查询sys.sysprocesses等系统视图,可以快速定位阻塞链的源头会话及其执行的SQL,进而决定是否使用Kill命令终止进程,或等待其自然完成。对于已经发生的死锁,可通过系统健康会话或跟踪标志获取死锁图,分析资源竞争本质

weixin_31412781的博客 258

告别手动打点计时:用Lauterbach TRACE32的RunTime功能,5分钟搞定嵌入式代码段性能分析

本文深入解析了Lauterbach TRACE32的RunTime功能在嵌入式代码性能分析中的革命性应用。通过硬件级计时原理和非侵入式设计,该功能能快速精确测量代码执行时间,显著提升开发效率,特别适用于汽车电子和工业控制领域。文章还提供了从基础设置到高级分析的完整实战指南,帮助工程师轻松掌握这一强大工具。

weixin_30615767的博客 281

【实用技能】 SQL Server 中阻塞和死锁分别是什么?如何监视和解决阻塞和死锁问题?

在本文中,我们将探讨 SQL Server 中阻塞和死锁的基础知识以及这两个概念之间的区别。我们还将讨论防止阻塞问题和死锁的场景和方法。最后,我们将研究如何使用 dbForge Studio for SQL Server 监视和解决阻塞和死锁问题。

开发者效率提升工具的博客 1764

openEuler 22.03 安装及配置Gitlab容器

在 openEuler 22.03 上安装及配置Gitlab容器

轻步玉阶 3317

SQL Server阻塞的检查

除了内存、CPU、I/O这些系统资源以外,阻塞和死锁是影响数据库应用性能的另一大因素。所谓的「阻塞」,是指当一个数据库会话中的事务,正在锁定其他会话事务想要读取或修改的资源,造成这些会话发出的请求进入等待的状态。SQL Server 默认会让被阻塞的请求无限期地一直等待,直到原来的事务释放相关的锁,或直到它超时、服务器关闭、进程被杀死。一般的系统中,偶尔有短时间的阻塞是正常且合理的;但若设计不良的程序,就可能导致长时间的阻塞,这样就不必要地锁定了资源,而且阻塞了其他会话欲读取或更新的需求。

hongjian006的博客 1162

别再只调API了!深度拆解Dify文件上传的两种传参方式(sys.file vs. inputs.upload_file)

本文深度解析Dify平台文件上传的两种传参方式——sys.file与inputs.upload_file,详细对比其设计原理、技术实现及适用场景。通过代码示例和性能分析,帮助开发者在本地大模型应用中做出精准技术选型,提升文件处理效率与系统稳定性。

weixin_29063979的博客 268

第2章 数据库关系模型-单元测验-数据库原理及应用

第2章 数据库关系模型---数据库与机器学习 作业 常用的关系查询操作包括选择、投影、连接、并、交等。 v 实体完整性是指关系表的属性组成必须是完整的。 x 自然连接是一种等值连接。 v 在参照完整性中,可以定义级联操作。 v 用户自定义完整性可以实施数据的业务约束。 v 每个关系是一个二维表,但二维表不一定是关系。 v 关系中复合键至少包含两个属性。 v 代理键是为了唯一标识关系的不同元组,需要在表单或报表中显示出来。 x ...

aiqq136的博客 5728

sql server 2000阻塞和死锁问题的查看与解决方法(转)

在实际引用当中,数据库阻塞和死锁在程序开发过程经常出现,下面通过介绍数据库阻塞和数据库死锁,并提供查看和解决阻塞和死锁的方法https://www.jb51.net/article/45473.htm 数据库发生阻塞和死锁的现象: 一、数据库阻塞的现象:第一个连接占有资源没有释放,而第二个连接需要获取这个资源。如果第一个连接没有提交或者回滚,第二个连接会一直等待下去,直到第一个连接释放该资源为...

anlidong的专栏 1327

Ovito隐藏技巧:用Expression Selection快速提取分子链(附模糊背景配置参数)

本文详细介绍了Ovito软件中Expression Selection功能的隐藏技巧,用于从复杂的分子动力学模拟数据中快速、精准地提取目标分子链。通过结合Expand Selection和Invert Selection等修饰器,形成一套高效的工作流,并深入解析了实现SCI论文级渲染效果的景深模糊参数配置,帮助研究者大幅提升数据处理与图片生成效率。

pz890123的博客 869

阻塞与死锁

当来自应用程序的第一个连接控制锁而第二个连接需要相冲突的锁类型时,将发生阻塞。其结果是强制第二个连接等待,而在第一个连接上阻塞。不管是来自同一应用程序还是另外一台客户机上单独的应用程序,一个连接都可以阻塞另一个连接。             说明     一些需要锁保护的操作可能不明显,例如系统目录表和索引上的锁。         大多数阻塞问题的发生是因为一个进程控制锁的时间过

疯子风的个人空间 1700

SAP BSIS:总账未清项表(Open Items)总账未清项 包含哪些业务 请给以举例说明

SAP总账未清项是指需要未来核销的会计行项目,仅适用于勾选"未清项管理"的总账科目。典型业务场景包括:供应商预付款(借方未清项)、员工备用金(借方未清项)、客户预收款(贷方未清项)和保险理赔(借方未清项)。系统通过表BSIS/BSAS跟踪未清项,支持明细追踪和账实核对。核心价值在于提供总账级别的明细管理能力,确保往来款项完整清账,简化对账流程,满足特殊业务管理需求。可通过FBL3N事务码查询和管理所有总账未清项。

金牌架构师 725

基于DO-178C/331的飞控软件研发环境的研究

本研究提出了一套基于DO-178C/331标准的飞控系统软件开发和验证框架。通过优化模型库的设计、代码生成配置和测试验证流程,显著提升了飞控系统软件的开发效率和安全性。未来的研究可以进一步扩展模型库的功能,以适应更复杂的飞控系统需求。

qq_41854911的博客 563

SQL Server死锁总结

SQL Server死锁总结   1. 死锁原理     根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。     死锁的四个必要条件: 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。 请求与保持条件(Hold and wait):已经得到资源的进程可

jiva1的专栏 1198

自动驾驶感知新方案:YOLOv13多模态(RGB+LiDAR+热成像)融合实战

YOLOv13的RGB+LiDAR+热成像多模态融合方案,解决了自动驾驶感知的鲁棒性问题,通过跨模态特征互补和注意力融合,实现了复杂场景下的高精度检测。本文从架构设计、数据预处理、核心模块实现到车载部署,完成了全流程实战。动态模态权重:根据场景自动调整各模态的权重(如黑夜场景提升热成像权重);端到端3D检测:直接从原始点云与图像进行3D检测,减少预处理步骤;轻量化优化:针对车载设备进一步剪枝量化,提升推理速度。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 536

sql server死锁_了解SQL Server死锁图的图形表示

sql server死锁 #contentor img { float: left; } #contentor img { float: left; } 介绍 (Introduction) If you are reading this I am sure you already know what a deadlock is, but just in...

culuo4781的博客 1597

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

sql server死锁_如何使用扩展事件和SQL Server代理自动执行SQL Server死锁收集过程

sql server死锁 介绍 (Introduction) This article is the last one of a series in which we discussed how to collect data about deadlocks so that we can not only monitor them but also build reports based ...

culuo4781的博客 649

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SQL Server死锁详解

博主提示:此文章适合细细体会。 简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的。理解死锁首先需要对死锁所涉及的相关观念有一个理解。   一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理解死锁。比如说一个经典的例子就是汽车(主体)对于道路(资源)的征用,如图1所示。 图1.对于死锁的直观理解   在图1的例子中,每队汽车都占有一

高粱的旅程... ... 963

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SQL Server死锁的原因

SQL Server死锁问题相信大家都遇到过,下面就为您分析SQL Server死锁问题产生的原因,供您参考学习之用。 1 .提交执行时间长的查询。 长时间运行的查询会阻塞其它查询。例如,影响很多行的DELETE 或UPDATE操作能获取很多锁,这些锁不论是否升级到表锁都阻塞其它查询。因此,一般不要将长时间运行的决策支持查询和联机事务处理 (OLTP) 查询混在一起。解决方案是想办法优化查询,如更改索引、将大的复杂查询分成简单的查询或在空闲时间或单独的计算机上运行查询。 2 .查询不适当地使用游标。

small_mavericks的博客 8060

深入浅出SQL Server中的死锁

本文讲述了死锁的概念,产生死锁的四个必要条件,死锁的处理方式和在SQL Server中如何检测避免和处理死锁。死锁是由于阻塞引起的,了解这部分基本概念对于死锁方面的排错是非常必要的 简介     死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的。理解死锁首先需要对死锁所涉及的相关观念有一个理解。   一些基础知识     要理解SQL Server中

歡迎來到 proMakccの窝.. 814

sql server阻塞和死锁跟踪sql

在master中查询(这个是一直查询的,不需要等待查询结果) USE [master] GO /****** Object: Table [dbo].[trace_blocksql] Script Date: 07/06/2015 11:31:00 ******/ SET ansi_nulls ON GO SET quoted_identifier ON GO IF NOT EX...

Tonny8711的博客 426

深入浅出 SQL Server 死锁

死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的。理解死锁首先需要对死锁所涉及的相关观念有一个理解。 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理解死锁。比如说一个经典的例子就是汽车(主体)对于道路(资源)的征用,如图 1 所示。 图 1 对于死锁的直观理解   在图 1 的例子中,每队汽车都占有一条道路,但都需要另外一队汽车所占有的另一条道路,因此互相阻塞,谁都无法前行,因此造成了死锁。由这个简单的例子可以看出,发生死锁需要四个必要条件,如下: 互斥条件:

Ruishine的博客 509

SQL Server 死锁排查:扩展事件捕获死锁图与阻塞链分析

【代码】SQL Server 死锁排查:扩展事件捕获死锁图与阻塞链分析。

2501_93892011的博客 375
上一篇: 从代理机制到Spring AOP
下一篇: Java自定义注解及个性化扫描注解
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值