SQL Server阻塞诊断】的更多相关文章

在数据仓库维护过程中,经常会出现定时更新程序和查询SQL发生冲突而引起阻塞的情况,需要进行SQL Server诊断. SQL Server诊断一般会用到2个视图:sys.sysprocesses(系统进程表) 和sys.dm_exec_sql_text(系统执行内容表) . 通过查看当前运行的进程信息可以查看阻塞的情况: SELECT spid, blocked, DB_NAME(sp.dbid) AS DBName, program_name, waitresource, lastwaitty…
需要我们了解的SQL Server阻塞原因与解决方法 上篇说SQL Server应用模式之OLTP系统性能分析.五种角度分析sql性能问题.本章依然是SQL性能 五种角度其一“阻塞与死锁” 这里通过连接在sysprocesses里字段值的组合来分析阻塞源头,可以把阻塞分为以下5种常见的类型(见表).waittype,open_tran,status,都是sysprocesses里的值,“自我修复?”列的意思,就是指阻塞能不能自动消失.  5种常见的阻塞类型 类型 waittype open_tr…
SQL Server阻塞与锁 在讨论阻塞与加锁之前,需要先理解一些核心概念:并发性.事务.隔离级别.阻塞锁及死锁. 并发性是指多个进程在相同时间访问或者更改共享数据的能力.一般情况而言,一个系统在互不干扰的情况下可以激活的并发用户的进程数越多,该系统的并发性就越强.就像通常所说的系统性能表现,系统同时处理的并发用户数越多,说明系统的性能越强.当正在更改数据的进程阻止其他进程读取该数据时,或者当读取数据的进程阻止其它进程更改该数据时,并发行会减弱.另外,当多个进程试图同时更改相同数据时,且无法在不…
一.加锁(locking).阻塞(blocking).死锁(deadlock)定义        加锁:用于管理多个连接的进程.当连接需要访问一块数据时,在这些数据上放置某种类型的锁.      阻塞:指一个连接需要访问一块数据时,必须等待另一个连接的锁解除.      死锁:指两个连接形成被称为"僵局"的形式,它们互相等待对方的锁解除.        在 SQL Server 中,每个连接都可以看作是一个单独的会话.     二.数据库锁   1.锁粒度        为了改善并发性…
背景知识: 是什么造成了阻塞? 从锁的观点来看.可访问对象前一定要对对象加锁不管你是读还是写,如果用户A以经持有对象,说明A以在对象上加锁,如果这时B 也想访问这个对象.它也要对对象加锁.重点来了如果A用户加的是排它锁,B用户可以做的就是乖乖等A用完再说.B乖乖等这个问题 就是阻塞,是因为这两把锁不可以共存才造成了阻塞. 场景再现: 为在再现场景我们要开三个通向数据的连接.就是说要打开三个managerment studio 或是开三个sqlcmd.我用ssms(SQL Server Manag…
上周,在SQL Server数据库下面遇到了一个有意思的SQL阻塞(SQL Blocking)案例.其实个人对SQL Server的阻塞还是颇有研究的.写过好几篇相关文章. 至于这里为什么要总结一下这个案例,因为这个案例有点意思: 1:使用DMV视图捕获到的Blocking SQL为一个查询语句(这个不是真正引起阻塞的源头SQL语句),等待事件为LCK_M_S. 2:出现阻塞的会话非常多,阻塞的量非常大,使用DMV视图始终捕获不到相关表的DML操作语句.捕获到全是SELECT语句. 我们知道,在…
1. 由于语句运行时间太长而导致的阻塞,语句本身在正常运行中,只须等待某些系统资源 解决办法: a. 语句本身有没有可优化的空间 b. Sql Server 整体性能如何,是不是有资源瓶颈影响了语句执行速度,如 内存.硬盘 和 CPU 等 2. 由于一个未按预期提交的事务导致的阻塞 这一类阻塞的特征,就是问题连接早就进入了空闲状态(sysprocesses.status='sleeping'和sysprocesses.cms='awaiting command'),但是,如果检查 sysproc…
这里通过连接在sysprocesses里字段值的组合来分析阻塞源头,可以把阻塞分为以下5种常见的类型(见表).waittype,open_tran,status,都是sysprocesses里的值,“自我修复?”列的意思,就是指阻塞能不能自动消失. 5种常见的阻塞类型 类型 waittype open_tran status 自我修复 原因/其他特征 1 不为0 >=0 runnable 是的,当语句运行结束后 语句运行的时间比较长,运行时需等待某些系统资源(如硬盘读写.CPU或内存等). 2…
1. 阻塞   除了内存.CPU.I/O这些系统资源以外,阻塞和死锁是影响数据库应用性能的另一大因素. 所谓的「阻塞」,是指当一个数据库会话中的事务,正在锁定其他会话事务想要读取或修改的资源,造成这些会话发出的请求进入等待的状态.SQL Server 默认会让被阻塞的请求无限期地一直等待,直到原来的事务释放相关的锁,或直到它超时.服务器关闭.进程被杀死.一般的系统中,偶尔有短时间的阻塞是正常且合理的:但若设计不良的程序,就可能导致长时间的阻塞,这样就不必要地锁定了资源,而且阻塞了其他会话欲读取或…
死锁概述 对于数据库中出现的死锁,通俗地解释就是:不同Session(会话)持有一部分资源,并且同时相互排他性地申请对方持有的资源,然后双方都得不到自己想要的资源,从而造成的一种僵持的现象.当然,在任何一种数据库中,这种僵持的情况不会一直持续下去,因为一直持续下去双方永远都无法执行,没有任何意义,在SQL Server中,后台线程会以3秒钟一次的频率检测死锁Session,并且选择其中一个回滚代价相对较低的作为牺牲品,从而使解除不同Session相互僵持的现象.因此SQL Server中死锁的僵…