- 浏览: 1884601 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
错误:
2010-07-15 11:48:39 ERROR com.ving.xzfw.persistence.impl.CaseDaoImpl - 执行:class com.ving.xzfw.persistence.impl.CaseDaoImpl.getCountsFromReceiveFee()方法出错!
2010-07-15 11:48:39 ERROR com.ving.xzfw.persistence.impl.CaseDaoImpl - SqlMapClient operation; SQL [];
--- The error occurred while applying a parameter map.
--- Check the ReceiveFee.getCounts-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 事务(进程 ID 76)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred while applying a parameter map.
--- Check the ReceiveFee.getCounts-InlineParameterMap.
--- Check the statement (query failed).
看看高手写的一篇完整,颇受启发:
其实所有的死锁最深层的原因就是一个:资源竞争 表现一:
一个用户A 访问表A(锁住了表A),然后又访问表B
另一个用户B 访问表B(锁住了表B),然后企图访问表A
这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了
同样用户B要等用户A释放表A才能继续这就死锁了
解决方法:
这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法
仔细分析你程序的逻辑,
1:尽量避免同时锁定两个资源
2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源.
表现二:
用户A读一条纪录,然后修改该条纪录
这是用户B修改该条纪录
这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释
放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。
这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。
解决方法:
让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock
语法如下:
select * from table1 with(updlock) where ....
==========================
在联机事务处理(OLTP)的数据库应用系统中,多用户、多任务的并发性是系统最重要的技术指标之一。为了提高并发性,目前大部分RDBMS都采用加锁技术。然而由于现实环境的复杂性,使用加锁技术又不可避免地产生了死锁问题。因此如何合理有效地使用加锁技术,最小化死锁是开发联机事务处理系统的关键。
死锁产生的原因
在联机事务处理系统中,造成死机主要有两方面原因。一方面,由于多用户、多任务的并发性和事务的完整性要求,当多个事务处理对多个资源同时访问时,若双方已锁定一部分资源但也都需要对方已锁定的资源时,无法在有限的时间内完全获得所需的资源,就会处于无限的等待状态,从而造成其对资源需求的死锁。
另一方面,数据库本身加锁机制的实现方法不同,各数据库系统也会产生其特殊的死锁情况。如在Sybase SQL Server 11中,最小锁为2K一页的加锁方法,而非行级锁。如果某张表的记录数少且记录的长度较短(即记录密度高,如应用系统中的系统配置表或系统参数表就属于此类表),被访问的频率高,就容易在该页上产生死锁。
几种死锁情况及解决方法
清算应用系统中,容易发生死锁的几种情况如下:
● 不同的存储过程、触发器、动态SQL语句段按照不同的顺序同时访问多张表;
● 在交换期间添加记录频繁的表,但在该表上使用了非群集索引(non-clustered);
● 表中的记录少,且单条记录较短,被访问的频率较高;
● 整张表被访问的频率高(如代码对照表的查询等)。
以上死锁情况的对应处理方法如下:
● 在系统实现时应规定所有存储过程、触发器、动态SQL语句段中,对多张表的操作总是使用同一顺序。如:有两个存储过程proc1、proc2,都需要访问三张表zltab、z2tab和z3tab,如果proc1按照zltab、z2tab和z3tab的顺序进行访问,那么,proc2也应该按照以上顺序访问这三张表。
● 对在交换期间添加记录频繁的表,使用群集索引(clustered),以减少多个用户添加记录到该表的最后一页上,在表尾产生热点,造成死锁。这类表多为往来账的流水表,其特点是在交换期间需要在表尾追加大量的记录,并且对已添加的记录不做或较少做删除操作。
● 对单张表中记录数不太多,且在交换期间select或updata较频繁的表可使用设置每页最大行的办法,减少数据在表中存放的密度,模拟行级锁,减少在该表上死锁情况的发生。这类表多为信息繁杂且记录条数少的表。
如:系统配置表或系统参数表。在定义该表时添加如下语句:
with max_rows_per_page=1
● 在存储过程、触发器、动态SQL语句段中,若对某些整张表select操作较频繁,则可能在该表上与其他访问该表的用户产生死锁。对于检查账号是否存在,但被检查的字段在检查期间不会被更新等非关键语句,可以采用在select命令中使用at isolation read uncommitted子句的方法解决。该方法实际上降低了select语句对整张表的锁级别,提高了其他用户对该表操作的并发性。在系统高负荷运行时,该方法的效果尤为显著。
例如:
select*from titles at isolation read uncommitted
● 对流水号一类的顺序数生成器字段,可以先执行updata流水号字段+1,然后再执行select获取流水号的方法进行操作。
小结
笔者对同城清算系统进行压力测试时,分别对采用上述优化方法和不采用优化方法的两套系统进行测试。在其他条件相同的情况下,相同业务笔数、相同时间内,死锁发生的情况如下:
采用优化方法的系统: 0次/万笔业务;
不采用优化方法的系统:50~200次/万笔业务。
所以,使用上述优化方法后,特别是在系统高负荷运行时效果尤为显著。总之,在设计、开发数据库应用系统,尤其是OLTP系统时,应该根据应用系统的具体情况,依据上述原则对系统分别优化,为开发一套高效、可靠的应用系统打下良好的基础。
============
--转
if exists (select * from dbo.sysobjects where id = object_id(N [dbo].[sp_who_lock] ) and OBJECTPROPERTY(id, N IsProcedure ) = 1)
drop procedure [dbo].[sp_who_lock]
GO
/***************************************************************************
// 创建 : fengyu 邮件 : maggiefengyu@tom.com 日期 :2004-04-30
// 修改 : 从http://www.csdn.net/develop/Read_Article.asp?id=26566学习到并改写
// 说明 : 查看数据库里阻塞和死锁情况
***************************************************************************/
use master
go
create procedure sp_who_lock
as
begin
declare @spid int,@bl int,
@intTransactionCountOnEntry int,
@intRowcount int,
@intCountProperties int,
@intCounter int
create table #tmp_lock_who (
id int identity(1,1),
spid smallint,
bl smallint)
IF @@ERROR<>0 RETURN @@ERROR
insert into #tmp_lock_who(spid,bl) select 0 ,blocked
from (select * from sysprocesses where blocked>0 ) a
where not exists(select * from (select * from sysprocesses where blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from sysprocesses where blocked>0
IF @@ERROR<>0 RETURN @@ERROR
-- 找到临时表的记录数
select @intCountProperties = Count(*),@intCounter = 1
from #tmp_lock_who
IF @@ERROR<>0 RETURN @@ERROR
if @intCountProperties=0
select 现在没有阻塞和死锁信息 as message
-- 循环开始
while @intCounter <= @intCountProperties
begin
-- 取第一条记录
select @spid = spid,@bl = bl
from #tmp_lock_who where Id = @intCounter
begin
if @spid =0
select 引起数据库死锁的是: + CAST(@bl AS VARCHAR(10)) + 进程号,其执行的SQL语法如下
else
select 进程号SPID: + CAST(@spid AS VARCHAR(10))+ 被 + 进程号SPID: + CAST(@bl AS VARCHAR(10)) + 阻塞,其当前进程执行的SQL语法如下
DBCC INPUTBUFFER (@bl )
end
-- 循环指针下移
set @intCounter = @intCounter + 1
end
drop table #tmp_lock_who
return 0
end
==========================
呵呵,解决死锁,光查出来没有多大用处,我原来也是用这个存储过程来清理死锁的
我解决死锁的方式主要用了:
1 优化索引
2 对所有的报表,非事务性的select 语句 在from 后都加了 with (nolock) 语句
3 对所有的事务性更新尽量使用相同的更新顺序来执行
现在已解决了死锁的问题,希望能对你有帮助
with (nolock)的用法很灵活 可以说只要有 from的地方都可以加 with (nolock) 标记来取消产生意象锁,这里 可以用在 delete update,select 以及 inner join 后面的from里,对整个系统的性能提高都很有帮助
==========================
use master --必须在master数据库中创建
go
if exists (select * from dbo.sysobjects where id = object_id(N [dbo].[p_lockinfo] ) and OBJECTPROPERTY(id, N IsProcedure ) = 1)
drop procedure [dbo].[p_lockinfo]
GO
/*--处理死锁
查看当前进程,或死锁进程,并能自动杀掉死进程
因为是针对死的,所以如果有死锁进程,只能查看死锁进程
当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程
感谢: caiyunxia,jiangopen 两位提供的参考信息
--邹建 2004.4--*/
/*--调用示例
exec p_lockinfo
--*/
create proc p_lockinfo
@kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示
@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),标志,
进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,
数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,
登陆时间=login_time,打开事务数=open_tran, 进程状态=status,
工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,
域名=nt_domain,网卡地址=net_address
into #t from(
select 标志= 死锁的进程 ,
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select |_牺牲品_> ,
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2
select @count=@@rowcount,@i=1
if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 标志= 正常的进程 ,
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end
if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@标志 varchar(10)
while @i<=@count
begin
select @spid=进程ID,@标志=标志 from #t where id=@i
insert #t1 exec( dbcc inputbuffer( +@spid+ ) )
if @标志= 死锁的进程 exec( kill +@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s= dbcc inputbuffer( +cast(进程ID as varchar)+ ) from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,进程的SQL语句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
go
引用
2010-07-15 11:48:39 ERROR com.ving.xzfw.persistence.impl.CaseDaoImpl - 执行:class com.ving.xzfw.persistence.impl.CaseDaoImpl.getCountsFromReceiveFee()方法出错!
2010-07-15 11:48:39 ERROR com.ving.xzfw.persistence.impl.CaseDaoImpl - SqlMapClient operation; SQL [];
--- The error occurred while applying a parameter map.
--- Check the ReceiveFee.getCounts-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 事务(进程 ID 76)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred while applying a parameter map.
--- Check the ReceiveFee.getCounts-InlineParameterMap.
--- Check the statement (query failed).
看看高手写的一篇完整,颇受启发:
其实所有的死锁最深层的原因就是一个:资源竞争 表现一:
一个用户A 访问表A(锁住了表A),然后又访问表B
另一个用户B 访问表B(锁住了表B),然后企图访问表A
这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了
同样用户B要等用户A释放表A才能继续这就死锁了
解决方法:
这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法
仔细分析你程序的逻辑,
1:尽量避免同时锁定两个资源
2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源.
表现二:
用户A读一条纪录,然后修改该条纪录
这是用户B修改该条纪录
这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释
放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。
这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。
解决方法:
让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock
语法如下:
select * from table1 with(updlock) where ....
==========================
在联机事务处理(OLTP)的数据库应用系统中,多用户、多任务的并发性是系统最重要的技术指标之一。为了提高并发性,目前大部分RDBMS都采用加锁技术。然而由于现实环境的复杂性,使用加锁技术又不可避免地产生了死锁问题。因此如何合理有效地使用加锁技术,最小化死锁是开发联机事务处理系统的关键。
死锁产生的原因
在联机事务处理系统中,造成死机主要有两方面原因。一方面,由于多用户、多任务的并发性和事务的完整性要求,当多个事务处理对多个资源同时访问时,若双方已锁定一部分资源但也都需要对方已锁定的资源时,无法在有限的时间内完全获得所需的资源,就会处于无限的等待状态,从而造成其对资源需求的死锁。
另一方面,数据库本身加锁机制的实现方法不同,各数据库系统也会产生其特殊的死锁情况。如在Sybase SQL Server 11中,最小锁为2K一页的加锁方法,而非行级锁。如果某张表的记录数少且记录的长度较短(即记录密度高,如应用系统中的系统配置表或系统参数表就属于此类表),被访问的频率高,就容易在该页上产生死锁。
几种死锁情况及解决方法
清算应用系统中,容易发生死锁的几种情况如下:
● 不同的存储过程、触发器、动态SQL语句段按照不同的顺序同时访问多张表;
● 在交换期间添加记录频繁的表,但在该表上使用了非群集索引(non-clustered);
● 表中的记录少,且单条记录较短,被访问的频率较高;
● 整张表被访问的频率高(如代码对照表的查询等)。
以上死锁情况的对应处理方法如下:
● 在系统实现时应规定所有存储过程、触发器、动态SQL语句段中,对多张表的操作总是使用同一顺序。如:有两个存储过程proc1、proc2,都需要访问三张表zltab、z2tab和z3tab,如果proc1按照zltab、z2tab和z3tab的顺序进行访问,那么,proc2也应该按照以上顺序访问这三张表。
● 对在交换期间添加记录频繁的表,使用群集索引(clustered),以减少多个用户添加记录到该表的最后一页上,在表尾产生热点,造成死锁。这类表多为往来账的流水表,其特点是在交换期间需要在表尾追加大量的记录,并且对已添加的记录不做或较少做删除操作。
● 对单张表中记录数不太多,且在交换期间select或updata较频繁的表可使用设置每页最大行的办法,减少数据在表中存放的密度,模拟行级锁,减少在该表上死锁情况的发生。这类表多为信息繁杂且记录条数少的表。
如:系统配置表或系统参数表。在定义该表时添加如下语句:
with max_rows_per_page=1
● 在存储过程、触发器、动态SQL语句段中,若对某些整张表select操作较频繁,则可能在该表上与其他访问该表的用户产生死锁。对于检查账号是否存在,但被检查的字段在检查期间不会被更新等非关键语句,可以采用在select命令中使用at isolation read uncommitted子句的方法解决。该方法实际上降低了select语句对整张表的锁级别,提高了其他用户对该表操作的并发性。在系统高负荷运行时,该方法的效果尤为显著。
例如:
select*from titles at isolation read uncommitted
● 对流水号一类的顺序数生成器字段,可以先执行updata流水号字段+1,然后再执行select获取流水号的方法进行操作。
小结
笔者对同城清算系统进行压力测试时,分别对采用上述优化方法和不采用优化方法的两套系统进行测试。在其他条件相同的情况下,相同业务笔数、相同时间内,死锁发生的情况如下:
采用优化方法的系统: 0次/万笔业务;
不采用优化方法的系统:50~200次/万笔业务。
所以,使用上述优化方法后,特别是在系统高负荷运行时效果尤为显著。总之,在设计、开发数据库应用系统,尤其是OLTP系统时,应该根据应用系统的具体情况,依据上述原则对系统分别优化,为开发一套高效、可靠的应用系统打下良好的基础。
============
--转
if exists (select * from dbo.sysobjects where id = object_id(N [dbo].[sp_who_lock] ) and OBJECTPROPERTY(id, N IsProcedure ) = 1)
drop procedure [dbo].[sp_who_lock]
GO
/***************************************************************************
// 创建 : fengyu 邮件 : maggiefengyu@tom.com 日期 :2004-04-30
// 修改 : 从http://www.csdn.net/develop/Read_Article.asp?id=26566学习到并改写
// 说明 : 查看数据库里阻塞和死锁情况
***************************************************************************/
use master
go
create procedure sp_who_lock
as
begin
declare @spid int,@bl int,
@intTransactionCountOnEntry int,
@intRowcount int,
@intCountProperties int,
@intCounter int
create table #tmp_lock_who (
id int identity(1,1),
spid smallint,
bl smallint)
IF @@ERROR<>0 RETURN @@ERROR
insert into #tmp_lock_who(spid,bl) select 0 ,blocked
from (select * from sysprocesses where blocked>0 ) a
where not exists(select * from (select * from sysprocesses where blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from sysprocesses where blocked>0
IF @@ERROR<>0 RETURN @@ERROR
-- 找到临时表的记录数
select @intCountProperties = Count(*),@intCounter = 1
from #tmp_lock_who
IF @@ERROR<>0 RETURN @@ERROR
if @intCountProperties=0
select 现在没有阻塞和死锁信息 as message
-- 循环开始
while @intCounter <= @intCountProperties
begin
-- 取第一条记录
select @spid = spid,@bl = bl
from #tmp_lock_who where Id = @intCounter
begin
if @spid =0
select 引起数据库死锁的是: + CAST(@bl AS VARCHAR(10)) + 进程号,其执行的SQL语法如下
else
select 进程号SPID: + CAST(@spid AS VARCHAR(10))+ 被 + 进程号SPID: + CAST(@bl AS VARCHAR(10)) + 阻塞,其当前进程执行的SQL语法如下
DBCC INPUTBUFFER (@bl )
end
-- 循环指针下移
set @intCounter = @intCounter + 1
end
drop table #tmp_lock_who
return 0
end
==========================
呵呵,解决死锁,光查出来没有多大用处,我原来也是用这个存储过程来清理死锁的
我解决死锁的方式主要用了:
1 优化索引
2 对所有的报表,非事务性的select 语句 在from 后都加了 with (nolock) 语句
3 对所有的事务性更新尽量使用相同的更新顺序来执行
现在已解决了死锁的问题,希望能对你有帮助
with (nolock)的用法很灵活 可以说只要有 from的地方都可以加 with (nolock) 标记来取消产生意象锁,这里 可以用在 delete update,select 以及 inner join 后面的from里,对整个系统的性能提高都很有帮助
==========================
use master --必须在master数据库中创建
go
if exists (select * from dbo.sysobjects where id = object_id(N [dbo].[p_lockinfo] ) and OBJECTPROPERTY(id, N IsProcedure ) = 1)
drop procedure [dbo].[p_lockinfo]
GO
/*--处理死锁
查看当前进程,或死锁进程,并能自动杀掉死进程
因为是针对死的,所以如果有死锁进程,只能查看死锁进程
当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程
感谢: caiyunxia,jiangopen 两位提供的参考信息
--邹建 2004.4--*/
/*--调用示例
exec p_lockinfo
--*/
create proc p_lockinfo
@kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示
@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),标志,
进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,
数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,
登陆时间=login_time,打开事务数=open_tran, 进程状态=status,
工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,
域名=nt_domain,网卡地址=net_address
into #t from(
select 标志= 死锁的进程 ,
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select |_牺牲品_> ,
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2
select @count=@@rowcount,@i=1
if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 标志= 正常的进程 ,
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end
if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@标志 varchar(10)
while @i<=@count
begin
select @spid=进程ID,@标志=标志 from #t where id=@i
insert #t1 exec( dbcc inputbuffer( +@spid+ ) )
if @标志= 死锁的进程 exec( kill +@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s= dbcc inputbuffer( +cast(进程ID as varchar)+ ) from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,进程的SQL语句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
go
发表评论
-
Eclipse中HashMap/Hashtable出现警告Type safety本篇文章来源于:开发学院 http://edu.codepub.com 原文
2010-08-03 13:08 2220症状: Type safety: The method pu ... -
Content is not allowed in prolog.
2010-08-03 10:51 4251读取XML时出现错误: 2010-08-03 10:52:2 ... -
java.lang.UnsupportedClassVersionError: Bad version number in .class file
2010-05-13 20:11 1321tomcat启动报错,发现错误版本 、 严重: Error d ... -
Oracle: ORA-00911: 无效字符
2010-04-22 10:41 6852Oracle: java.sql.SQLException: ... -
解决 无法解析导入 javax.servlet.ServletContextEvent
2010-02-09 11:24 5301启动tomcat报错了: 严重: Error configu ... -
...NeedsRefreshException问题分析
2010-02-07 16:44 3841com.opensymphony.oscache.base. ... -
JVMTI_ERROR_NULL_POINTER(100)
2010-01-27 16:49 1980JDWP exit error JVMTI_ERROR_NUL ... -
Couldn't perform the operation prepareCall
2010-01-08 09:43 5571[code="sql"]- ... -
tomcat ClassNotFoundException
2010-01-05 10:49 1216严重: Exception starting filter ... -
javax.servlet.servletexception cannot find actionmappings or actionformbeans col
2010-01-03 11:22 1765异常:javax.servlet.ServletExcepti ... -
错误1111
2010-01-02 14:28 1935org.springframework.jdbc.Un ... -
Cannot resolve reference to bean 'pingFenRecService' while setting bean property
2010-01-02 11:23 5281玩转SSI时重启服务器报错,郁闷啦,怎么可能呢?还报配置出错. ... -
解决为'MM_CURSOR' 的游标已存在问题
2009-12-09 14:45 3880今天写了个存储过程,使用了两个游标,在数据库里实现嵌套多层循环 ... -
TOMCAT 6 警告:Parameters:Invalid chunk ignored 的解决
2009-12-08 11:04 1647编写程序后,重启tomcat,出现警告:Parameters: ... -
解决:sql 排序规则不一致问题
2009-12-03 13:48 4744把程序部署到服务器上 ... -
Ibatis : Attribute "*" must be declared for element type "result".
2009-11-25 16:29 4306整合一Ibatis,竟然报错了! Caused by: com ... -
在建立与服务器的连接时出错。在连接到 sql server 2005 时 在默认的设置下 sql server 不允许进行远程连
2009-11-24 15:21 43882今天连接数据库时突然 ... -
Ibatis :The error occurred while applying a parameter map.
2009-11-18 10:03 23375项目需求变更在修改源程序时,要涉及数据库变动,大刀阔斧一般之后 ... -
Myeclipse:resource is out of sync with the file system的解决办法
2009-11-13 17:50 3950引用在eclipse中,启动run on server时报错: ... -
Ibatis There is no WRITEABLE property named 'depName' in class 'com.ving.xzfw.vo
2009-11-12 18:20 10977ibatis 异常, 报了一大推 错误: Caused by ...
相关推荐
解决Oracle数据库死锁问题,查询出数据库所有死锁,并杀死所有的死锁,解决程序运行问题;
进程、线程、死锁和POSIX规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...
- 长事务:长时间运行的事务可能导致更多资源被锁定,增加死锁风险。 **3. 查询阻塞进程** 当一个SQL查询被另一个正在执行的事务阻塞时,称为阻塞。阻塞可能导致查询延迟或完全停止,影响系统的正常运行。查询阻塞...
银行家算法是一种预防进程死锁的经典策略,由艾兹格·迪杰斯特拉提出,主要用于确保系统的安全性。 实验三"预防进程死锁的银行家算法"旨在让学生理解和实践如何避免死锁的发生。在这个实验中,会模拟一个银行系统,...
### 进程调度与死锁-作业 #### 进程调度与死锁基础知识解析 **进程调度**在操作系统中扮演着至关重要的角色,它决定了进程何时以及如何使用处理器和其他系统资源。进程调度策略多种多样,包括但不限于先进先出...
国外留学生的lab,用c语言实现的进程死锁算法,实现了进程死锁的环路检测,并且使用资源分配算法避免死锁,适用于自学,搭配博客使用,附带测试用例。
进程死锁查看器是一款基于Windows的实用工具,它利用了Windows Crash Dump (WCT) API来检测和分析系统的进程死锁情况。死锁是多线程编程中一个严重的问题,当两个或多个进程互相等待对方释放资源而无法继续执行时,...
安全性算法,银行家算法,避免进程死锁的问题,这是我用C语言编的程序,运行通过。
银行家算法避免进程死锁 可调式文件cpp银行家算法避免进程死锁 可调式文件cpp
本实验报告主要探讨了操作系统中的三个关键概念:死锁、进程和线程,所有实验都在Red Hat 9这一Linux发行版上进行。通过实际操作和代码执行,我们深入理解了这些概念的本质和它们在系统运行中的作用。 首先,我们要...
本文将对操作系统练习题进行详细的总结和分析,涵盖进程、设备死锁等多个方面。 一、文件系统管理 文件系统是操作系统中最重要的组成部分之一,负责管理计算机系统的软件资源,即对各种文件的管理。文件系统的功能...
解决 Oracle 杀死死锁进程的方法可以分为两步:首先,查找被锁定的表和锁定的会话,然后杀死锁定的会话和操作系统进程。 在解决死锁问题时,需要注意以下几点: * 需要拥有足够的权限来杀死锁定的会话和操作系统...
进程死锁是操作系统中一个严重的问题,当两个或多个进程互相等待对方释放资源而陷入僵局时,就发生了死锁。为了避免这种情况,银行家算法(Banker's Algorithm)被引入,这是一种预防死锁的策略,它模拟了银行的贷款...
查询sql的死锁进程,查找并杀死。解决生产数据库中卡死的现象。postgresql查询死锁以及杀死死锁进程sql
关于进程中死锁问题的研究 本文研究的是操作系统进程中的死锁问题,旨在解决计算机科学中一个基本问题,即并行程序的终止性问题。死锁问题是一种普遍现象,不仅在计算机系统中,在日常生活中也是屡见不鲜的。掌握对...
死锁的定义是一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,出现相互的永久“阻塞”,如无外力作用,这组进程将永远不能继续运行。死锁的产生原因包括系统的资源数量不足和进程调用的顺序不当。...
通过查询这个视图,我们可以找出死锁的受害者,即被系统强制中断的事务。 3. **死锁的解决策略**: - **超时机制**:SQL Server默认设置了一个超时时间,当事务等待超过这个时间仍未获得资源,就会触发死锁检测。...
**存储死锁信息**:将从`DBCC INPUTBUFFER`获取的信息分别插入到`#tempbelocktracestatus`和`#templocktracestatus`中,然后再将这些信息整合到`#locktracestatus`表中,形成完整的死锁情况记录,包括被阻塞的进程和...