none
sql server数据库服务器群集下的用户数据库每天凌晨0点开始死锁,过一两分钟恢复正常 RRS feed

  • 问题

  • sql server数据库服务器群集每天凌晨0点开始死锁,过一两分钟恢复正常,现象每天可复现,且死锁涉及语句为CONVERT(VARCHAR, BAGTIME, 110)
    2021年10月25日 9:10

全部回复

  • profiler 或扩展事件,抓下当时的完整操作
    2021年10月26日 0:47
  • Hi @stevezhongzhuofu,

    和邹建建议的一样,抓下当时的情况,确定下问题的原因。还有一个就是建议给字符添加一个字符长度,如把语句改成CONVERT(VARCHAR(10), BAGTIME, 110)试下。你这是转换一个表中一列时间的格式?如果是转换当前时间的格式,建议用CONVERT(VARCHAR(10), GETDATE(), 110)。



    2021年10月26日 1:09
  • 您好,我已经用profiler抓住了当前事件。具体语句如下:

    <executionStack>
         <frame procname="数据库名.dbo.触发器名" line="193" stmtstart="16180" stmtend="16732" sqlhandle="0x0300050010bff12d3d72ea0040ac000000000000000000000000000000000000000000000000000000000000">
    IF NOT EXISTS ( SELECT  BAGID
                                    FROM    CIBAGINFOR
                                    WHERE   IATACODE = @IATACode
                                            AND CONVERT(VARCHAR, BAGTIME, 110) = CONVERT(VARCHAR, @bagtime, 110) )     </frame>
         <frame procname="adhoc" line="1" stmtstart="756" sqlhandle="0x02000000ccd849350804d8ec5d840ea23069f546a72f7e6d0000000000000000000000000000000000000000">
    INSERT INTO [CIBagInfor]([BagID],[BagTime],[DangerArea],[FilePath],[FirstCheckBagID],[FlightNo],[GetBagTime],[IATACode],[JudgeLevel],[InforID],[MachineID],[OptID],[OptJudge],[OptJudgeTime],[OptStation],[SupID],[SupJudge],[SupStation],[TwoAngle],[HSStation],[TransitFlag],[UpdateTime]) values(@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12,@13,@14,@15,@16,@17,@18,@19,@20,@21,@22)     </frame>
         <frame procname="adhoc" line="1" stmtstart="218" sqlhandle="0x020000006ba16a2e7b19e7a819b2ee98b7b265b6e5b5a2e10000000000000000000000000000000000000000">
    Insert into CIBagInfor(BagID,BagTime,DangerArea,FilePath,FirstCheckBagID,FlightNo,GetBagTime,IATACode,JudgeLevel,InforID,MachineID,OptID,OptJudge,OptJudgeTime,OptStation,SupID,SupJudge,SupStation,TwoAngle,HSStation,TransitFlag,UpdateTime)VALUES(&apos;B050016224&apos;,&apos;2021/10/25 0:00:37&apos;,&apos;&apos;,&apos;\\10.30.133.6\Fiscan\B05\211025&apos;,&apos;&apos;,&apos;COMMON&apos;,&apos;2021/10/25 0:00:38&apos;,&apos;MMMMMMMMMM&apos;,&apos;0&apos;,0,&apos;&apos;,&apos;2345678&apos;,&apos;C&apos;,&apos;10&apos;,&apos;0108&apos;,&apos;&apos;,&apos;&apos;,&apos;&apos;,&apos;1&apos;,&apos;&apos;,&apos;&apos;,&apos;2021/10/25 0:00:40&apos;)     </frame>
        </executionStack>
        <inputbuf>
    If  exists( select BagID from CIBagInfor where BagID=&apos;B050016224&apos;) Delete CIBagInfor where BagID=&apos;B050016224&apos;Insert into CIBagInfor(BagID,BagTime,DangerArea,FilePath,FirstCheckBagID,FlightNo,GetBagTime,IATACode,JudgeLevel,InforID,MachineID,OptID,OptJudge,OptJudgeTime,OptStation,SupID,SupJudge,SupStation,TwoAngle,HSStation,TransitFlag,UpdateTime)VALUES(&apos;B050016224&apos;,&apos;2021/10/25 0:00:37&apos;,&apos;&apos;,&apos;\\10.30.133.6\Fiscan\B05\211025&apos;,&apos;&apos;,&apos;COMMON&apos;,&apos;2021/10/25 0:00:38&apos;,&apos;MMMMMMMMMM&apos;,&apos;0&apos;,0,&apos;&apos;,&apos;2345678&apos;,&apos;C&apos;,&apos;10&apos;,&apos;0108&apos;,&apos;&apos;,&apos;&apos;,&apos;&apos;,&apos;1&apos;,&apos;&apos;,&apos;&apos;,&apos;2021/10/25 0:00:40&apos;)    </inputbuf>
       </process>
       <process id="process1034546558" taskpriority="0" logused="764" waitresource="PAGE: 5:1:11004 " waittime="2379" ownerId="14111990" transactionname="INSERT" lasttranstarted="2021-10-25T00:00:37.587" XDES="0xf6787c3a8" lockMode="S" schedulerid="10" kpid="1760" status="suspended" spid="160" sbid="2" ecid="0" priority="0" trancount="1" lastbatchstarted="2021-10-25T00:00:37.583" lastbatchcompleted="2021-10-25T00:00:37.583" lastattention="1900-01-01T00:00:00.583" clientapp=".Net SqlClient Data Provider" hostname="CIX-B-8" hostpid="3336" loginname="netscan" isolationlevel="read committed (2)" xactid="14111990" currentdb="5" lockTimeout="4294967295" clientoption1="671219744" clientoption2="128056">

    2021年10月26日 1:21
  • 我用ssms软件测试证明DateDiff函数比CONVERT函数效率更高,因此在实现相同效果的前提下用前者替换后者了。昨天晚上测试结果表明,替代之后问题解决了,但解释不通为什么是0点发生,其它时间不发生。

    2021年10月26日 1:23
  • 哪位如有兴趣,帮忙解决此问题,或者告诉我如何快速解决此类问题,非常感谢,可有偿,详细联系我:13522993611

    2021年10月26日 1:25
  • 查询的时候走读库,插入走写库,或者查询加上with nolock,或者主库的隔离级别改成READ COMMITTED SNAPSHOT一劳永逸
    2021年10月26日 2:46
  • 这个只能解决死锁问题,但是死锁应该不分时间点,为什么非得0点发生呢。
    2021年10月26日 6:54
  • 有没有监控服务器负载和定时的任务

    通常开销大的操作,包括备份、索引重建之类的维护操作,都是定时在晚上

    2021年10月27日 0:58
  • 现场人员确认没有,但感觉跟系统中某个环节有关系,但又没定位到,谢谢!
    2021年10月27日 1:08
  • profiler 不做筛选,把那个时间段的所有操作抓出来

    操作系统通过 perfmon 把操作系统相关的指标抓 出来,看看系统资源 的情况(CPU、磁盘、网络)

    2021年10月28日 0:48