SQL死锁
我们操作数据库大量数据时,可能会出现死锁现象。
所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象:死锁。
死锁的四个必要条件
通常都会介绍死锁的四个必要条件。这四个条件缺一不可,或者说只要破坏了其中任何一个条件,死锁就不可能发生。我们来复习一下,这四个条件是:
•互斥(Mutual exclusion):存在这样一种资源,它在某个时刻只能被分配给一个执行绪(也称为线程)使用;
•持有(Hold and wait):当请求的资源已被占用从而导致执行绪阻塞时,资源占用者不但无需释放该资源,而且还可以继续请求更多资源;
•不可剥夺(No preemption):执行绪获得到的互斥资源不可被强行剥夺,换句话说,只有资源占用者自己才能释放资源;
•环形等待(Circular wait):若干执行绪以不同的次序获取互斥资源,从而形成环形等待的局面,想象在由多个执行绪组成的环形链中,每个执行绪都在等待下一个执行绪释放它持有的资源。
检测是否有死锁:
USE [master]
GO DECLARE @return_value int EXEC @return_value = [dbo].[auto_checkblocks] SELECT 'Return Value' = @return_value GO
如果有死锁Return Value的是不是0
直接在sql中执行 Kill ‘Return Value 非0的值’ ,就OK了。
存储过程
use master
go
--sql server性能分析--检测资料库阻塞语句
create PROCEDURE [dbo].[auto_checkblocks] AS
set nocount on
if exists ( select * from master..sysprocesses where blocked <> 0 )
begin
/**//* show top blockers, but no duplicates */
select '请尝试使用KILL [SPID] 来杀进程' select '以下是引起阻塞的语'
select distinct
'进程ID' = str( a.spid, 4 ),
'进程ID状态' = convert( char(10), a.status ),
'分块进 µ{的进 µ{ID' = str( a.blocked, 2 ),
'工作站名称' = convert( char(10), a.hostname ),
'执行命令的用户' = convert( char(10), suser_name( a.uid ) ),
'资料库 ¦W' = convert( char(10), db_name(a.dbid ) ),
'应用程式名' = convert( char(10), a.program_name ),
'正在执 ¦æ的命令' = convert( char(16), a.cmd ),
'累计时间' = str( a.cpu, 7 ),
'IO' = str( a.physical_io, 7 ),
'登录W' = a.loginame,
'执行语'=b.text
from master..sysprocesses a
cross apply sys.dm_exec_sql_text(a.sql_handle) b
where spid in ( select blocked from master..sysprocesses )
and blocked = 0
order by str(spid,4)
/**//* 显示阻塞牺 ¹品*/
select '以下是被阻塞的等待执行的语句'
select
'进程ID[SPID]' = str( a.spid, 4 ),
'进程ID状态' = convert( char(10), a.status ),
'分块进 µ{的进 µ{ID' = str( a.blocked, 2 ),
'工作站名称' = convert( char(10), a.hostname ),
'执行命令的用户' = convert( char(10), suser_name( a.uid ) ),
'资料库 ¦W' = convert( char(10), db_name( a.dbid ) ),
'应用程式名' = convert( char(10), a.program_name ),
'正在执 ¦æ的命令' = convert( char(16), a.cmd ),
'累计时间' = str( a.cpu, 7 ),
'IO' = str( a.physical_io, 7 ),
'登录' = a.loginame,
'执行语'=b.text
from master..sysprocesses a
cross apply sys.dm_exec_sql_text(a.sql_handle) b
where blocked <> 0
order by spid
end
else
begin
select '恭喜!当前没有阻塞,当前的进程资讯如下.', convert (char(24),getdate(),13)
select
'进程ID' = str( spid, 4 ),
'进程ID状态' = convert( char(10), status ),
'分块进 µ{的进 µ{ID' = str( blocked, 2 ),
'工作站名称' = convert( char(10), hostname ),
'执行命令的用户' = convert( char(10), suser_name( uid ) ),
'资料库 ¦W' = convert( char(10), db_name( dbid ) ),
'应用程式名' = convert( char(10), program_name ),
'正在执 ¦æ的命令' = convert( char(16), cmd ),
'累计时间' = str( cpu, 7 ),
'IO' = str( physical_io, 7 ),
'登录 ¦W' = loginame
from master..sysprocesses
where blocked = 0
order by spid
end
SQL死锁的更多相关文章
- [翻译]:SQL死锁-死锁排除
As we already saw, the reasons why we have blocking issues and deadlocks in the system are pretty mu ...
- [SQL]死锁处理语句
原文:[SQL]死锁处理语句 引言 今天在群里看到分享的解决死锁的sql语句,就想着这东西以后肯定用的着,就下载下来,在这里记录一下,以后查找也方便. SQL SET QUOTED_IDENTIFIE ...
- SQL死锁知识及解决办法
[翻译]:SQL死锁-死锁排除 min.jiang 2014-03-18 00:23 阅读:874 评论:1 项目中死锁的解决经历 min.jiang 2014-03-17 01:09 阅读: ...
- [翻译]:SQL死锁-阻塞探测
到了这篇,才是真正动手解决问题的时候,有了死锁之后就要分析死锁的原因,具体就是需要定位到具体的SQL语句上.那么如何发现产生死锁的问题本质呢?下面这篇讲的非常细了,还提到了不少实用的SQL,但对我个人 ...
- [翻译]:SQL死锁-阻塞
一般情况下死锁不是一步到位的,它必须满足特定的条件,然后形成资源的循环依赖才会产生死锁,死锁之前一定会出现阻塞,由阻塞升级才有可能出现死锁,所以我们有必要了解系统中都有哪些已经被阻塞的锁. 我在解决共 ...
- [翻译]:SQL死锁-锁与事务级别
其实这一篇呢与解决我项目中遇到的问题也是必不可少的.上一篇讲到了各种锁之间的兼容性,里面有一项就是共享锁会引起死锁,如何避免呢,将我们的查询都设置中read uncommitted是否可行呢?其结果显 ...
- [翻译]:SQL死锁-锁的类型
很久没有写博客了,这里面的原因有很多.最近的一个项目由于客户明确提出要做下性能压力测试,使用的工具就是VS自带的压力测试工具.以前其它项目做压力测试后反馈的其中一个重要问题就是数据库的死锁.没想到我们 ...
- SQL死锁操作
这两天数据库经常被锁,所以记录一下操作: 查看被锁表:select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) ...
- SQL 死锁进程查询
use master go declare @spid int,@bl int DECLARE s_cur CURSOR FOR ,blocked ) a ) b where a.blocked=sp ...
随机推荐
- 完全用 Linux 工作
GNU/Linux 不是每個人都想用的.如果你只需要處理一般的事務,玩遊戲,那就不需要了解 Linux. UNIX 比 Windows 更適合用於科學研究工作. 大多數科學家和工程師以 UNIX 作為 ...
- 重学css3(概览)
css3新特性概览: 1.强大的选择器 2.半透明度效果的实现 3.多栏布局 4.多背景图 5.文字阴影 6.开放字体类型 7.圆角 8.边框图片 9.盒子阴影 10.媒体查询 浏览器内核又可以分成两 ...
- 仅用移动开发服务:开发native应用
不花一分钱,就可以做native应用开发,这在以前是根本不敢想象的事儿.然而在今天,移动开发工具和服务已经五花八门,聪明的开发者只要随心所欲的抓取几个顺手的,就能完成native开发.今天给大家介绍的 ...
- C# 运用FileInfo类创建、删除文件
通过FileInfo类,我们可以方便地创建出文件,并可以访问文件的属性同时还可以对文件进行打开文件.关闭文件.读写文件等基本的操作.下面的代码显示了如何创建一个文本文件并且去访问其创建时间.文件的绝对 ...
- 关于java中异常机制
什么是异常:异常就是程序在运行时出现的不正常情况.对于严重的情况Java通过Error类进行描述,一般不用编写代码处理:对于不严重的情况Java通过Exception描述,一般编写针对性代码对其进行处 ...
- ios swift 里面关于变量 常量 可选类型 控制流的一些心得
//swift 里面没有头文件和实现文件.只有一个.swift文件 //swift 里面没有main的概念,程序从main.swift开始执行 //swift 每一条执行语句可以不用分号结束,多条语句 ...
- 3.Cisco Packet Tracer中关于交换机端口安全的设置
本次实验将在这幅拓扑图的基础上完成 我们会对pc0在交换机上进行mac地址绑定,pc1访问时则交换机断开端口 1.为pc机配置ip地址 pc0:192.168.1.1 pc1:192.168.1.2 ...
- Java课堂作业
- 自动化运维之使用Python3收发电子邮件~~~附源码
一.背景介绍 1.1 一些专业名称的解释 MUA——Mail User Agent,邮件用户代理.是用户与电子邮件系统的交互接口,一般来说它就是我们PC机上的一个程序,提供一个好的用户界面,它提 ...
- (转)curl常用命令
本文转自 http://www.cnblogs.com/gbyukg/p/3326825.html 下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.cent ...