苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 9177|回复: 5

[其他] 事务(进程 ID 51)与另一个进程被死锁在 锁 资源上,并...

[复制链接]
发表于 2013-9-29 18:21:54 | 显示全部楼层 |阅读模式
新增数据的时候抛出异常:事务(进程 ID 51)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。有木有遇到的高手啊,指教一下,谢谢


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-9-29 18:26:25 | 显示全部楼层
Sql出现了死锁,你是不是在其他操作上加了锁了,而且在执行这条语句时并没有释放

看下Sql语句吧
 楼主| 发表于 2013-9-29 18:32:37 | 显示全部楼层
没有加任何锁,连事务都没有使用
发表于 2013-9-29 21:22:48 | 显示全部楼层
你是不是使用了什么orm,一般的orm都自带事务的
发表于 2013-9-30 07:59:50 | 显示全部楼层
除了你这一个操作应该不家其他的操作影响,不一定是因数你这个语句引起的。
给你一些语句自己检查一下吧

[code=sql]sp_who active  --看看哪个引起的阻塞,blk
sp_lock  --看看锁住了那个资源id,objid ,select object_name(objid) 得到
dbcc inputbuffer(@blk) -- 看看是那个语句[/code]





[code=sql] 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   [/code]
 楼主| 发表于 2013-9-30 12:26:44 | 显示全部楼层
这是事件探查器跟踪出来的,不太看得懂C:\Users\XLJ\Desktop\QQ图片20130930122346.jpg

事件探查器跟踪的死锁信息

事件探查器跟踪的死锁信息
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-28 13:13

© 2014-2021

快速回复 返回顶部 返回列表