易截截图软件、单文件、免安装、纯绿色、仅160KB

关于SQLServer死锁的诊断和定位

原创于2008年06月18日,2009年10月18日迁移至此。
关于
SQLServer
死锁的诊断和定位
 

SQLServer
中经常会发生死锁情况,必须连接到企业管理
器—
>
管理—
>
当前活动—
>

/
进程
ID
去查找相关死锁进程和定位死锁的原因。
ITPUB个人空间4eD!w!`JD
&h{X!tH{6517
通过查询分析器也要经过多个系统表
(sysprocesses,sysobjects

)
和系统存储过程
(sp_who,sp_who2,sp_lock

)
,而且不一定能够直接定位到。
本存储过程参考
sp_lock_check

sysprocesses
系统表,同时利用了
DBCC
命令,直接将死锁和造成死锁的进程和相关语句列出,以方便分析和定位。
ITPUB个人空间&g5yR
P5Bt~
ITPUB个人空间yv?wpH7B
 
Create procedure sp_check_deadlock            
as
set nocount on
 /*
selectITPUB个人空间6lE|*`f4`\0jE
spid   
被锁进程
ID,
Mao^#Qz9w~6517
blocked
锁进程
ID,
2W O+G;a2KSP6517
status 
被锁状态
,
!j0Qzbhx6517
SUBSTRING(SUSER_SNAME(sid),1,30)
被锁进程登陆帐号
,
%i'j/Z;w(G7v3fO)Sf2E6517
SUBSTRING(hostname,1,12)        
被锁进程用户机器名称
,ITPUB个人空间 h9@uU2W&e6eT
SUBSTRING(DB_NAME(dbid),1,10)   
被锁进程数据名称
,
wUX \2o6517
cmd
被锁进程命令
,
U}]fa8x,U?"q
{6517
waittype
被锁进程等待类型
4[P1M[VM@Y$r6517
from master..sysprocessesITPUB个人空间9O2s"OQ*@
WHERE blocked>0ITPUB个人空间*PD2C,Z%G iq
-ZVf4d4y/bz6517
--dbcc inputbuffer(66)
输出相关锁进程的语句
*/ITPUB个人空间_
R~!kt;TW a
-H4HSV1O6517
--
创建锁进程临时表
CREATE TABLE #templocktracestatus (ITPUB个人空间&X7X8Ix8z,` @8~
  EventType varchar(100),ITPUB个人空间mn^V `
  Parameters INT,
w'a"r p!G6517
  EventInfo varchar(200)
dDM2z&l0A6517
  )
ITPUB个人空间xPuK^ K F5I&o%Y
9d#}g`_y(j6517
--
创建被锁进程临时表
CREATE TABLE


相关文档:

sqlserver 性能优化--Join说明

由于工作需求,要对负责的产 品做点性能优化,在网上找到了相关的东西,拿 出来与大家分享:
看到很多朋友对数据库的理解、认识还是没有突破一个瓶颈,而这个瓶颈往往只是一层窗纸,越过了你将看到一个新世界。
04、05年做项目的时候,用SQL Server 2000,核心表(大部分使用频繁的关键功能每次都要用到)达到了800万数据 ......

关于oracle导入sqlserver存在的唯一索引问题

我在把oracle数据导入sqlserver中时,发现在oracle中字段定义为唯一索引时,不同记录的此字段如果为空不被认为是重复的,但在sqlserver中如果此字段为唯一索引字段,不允许有2个以上的空值。郁闷。所以只好将sqlserver中的唯一索引字段手工修改为几个非空的值,但这样程序肯定要进行修改了。需要在程序中为此字段设置不重复 ......

Sqlserver 存储过程大集合

 =================分页==========================
/*分页查找数据*/
CREATE PROCEDURE [dbo].[GetRecordSet] 
@strSql varchar(8000),--查询sql,如select  * from [user]
@PageIndex int,--查询当页号
@PageSize int--每页显示记录
AS
set nocount on
declare @p1 int
declare @current ......

sqlserver字符串拆分(split)方法汇总

sqlserver字符串拆分(split)方法汇总
--方法0:动态SQL法
declare @s varchar(100),@sql varchar(1000)
set @s='1,2,3,4,5,6,7,8,9,10'
set @sql='select col='''+ replace(@s,',',''' union all select ''')+''''
PRINT @sql
exec (@sql)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号