解决方案 »
- 数据库更新问题
- alter table test drop unique (text)错误
- 问个菜鸟的问题
- 这个SQL语句如何写 ?
- 从多条记录中选择最后一条,然后联表查询
- 有没有控件,就是像windows系统时间设置的那样的,可以通过上下调整数值的?
- 关于数据库的查询效率
- 救命呀!!!误执行了存储过程,造成了大量数量丢失,怎么恢复呀/???
- 各位好,ADO高手好,谁用过邓振波 写的,ADO封装的两个类,小弟能连上SQL SERVER,但是老是打不开记录集
- 怎样写一个涵数,类于sum ,例:select myfun(aa) as aa from table 其中myfun 是我将要定义的函数,请问,应怎样去写这个函数?
- 求一条SQL 2005的查询语句
- SQL SERVER2005表报服务器无法访问
建议启用1222跟踪标记,当发生死锁时会将详细的死锁日志记录在SQL日志中,便于分析..
服务器进程 ID=62,为同一个spid会话;
所有者 ID=362976,为同一个进程中的事务;
执行上下文 ID=1或3,都是2个子线程;可能的原因是:同一个事务中,进行了多线程执行,并且有2个连接并发访问。
此外,更多原因还包括,事务中多次访问相同的资源。
应该是进程62和63各自持有一个页级锁,同时,在相互等待对方的锁释放。我的存储过程主要部分是这样的:
BEGIN TRAN UPDATE SingUserLogInfo SET
CookieGuid=@CookieGuid
,loginTime=@loginTime
WHERE UserName=@UserName
and Usertype=@usertype IF @@ROWCOUNT=0
insert into SingUserLogInfo(UserName,CookieGuid,usertype,loginTime)
values(@UserName,@CookieGuid,@usertype,@loginTime) COMMIT TRAN
最后排查出来是缺少索引导致的死锁,但是我还是不太明白单个表也能死锁?
应该是进程62和63各自持有一个页级锁,同时,在相互等待对方的锁释放。我的存储过程主要部分是这样的:
BEGIN TRAN UPDATE SingUserLogInfo SET
CookieGuid=@CookieGuid
,loginTime=@loginTime
WHERE UserName=@UserName
and Usertype=@usertype IF @@ROWCOUNT=0
insert into SingUserLogInfo(UserName,CookieGuid,usertype,loginTime)
values(@UserName,@CookieGuid,@usertype,@loginTime) COMMIT TRAN
最后排查出来是缺少索引导致的死锁,但是我还是不太明白单个表也能死锁?
我这当前页有类似的设计:更新的时候,UserName=@UserName and Usertype=@usertype 只锁定这些资源,其他资源还是可以访问的。
再插入使,也会更新聚集索引。当并发执行时就可能死锁。
如果要不死锁,就得序列化。存储过程设置序列化的事务级别,或者 tablock holdlock 让事务保存到结束