相关疑难解决方法(0)

SQL Server中的并发执行

表模式(SQL Server 2012)

Create Table InterestBuffer
(
    AccountNo CHAR(17) PRIMARY KEY,
    CalculatedInterest MONEY,
    ProvisionedInterest MONEY,
    AccomodatedInterest MONEY,
)

Create Table #tempInterestCalc
(
    AccountNo CHAR(17) PRIMARY KEY,
    CalculatedInterest MONEY
)
Run Code Online (Sandbox Code Playgroud)

我正在做一个upsert.更新存在的行并插入其他行.

UPDATE A
SET A.CalculatedInterest = A.CalculatedInterest + B.CalculatedInterest
FROM InterestBuffer A
INNER JOIN #tempInterestCalc B ON A.AccountNo = B.AccountNo

INSERT INTO InterestBuffer
SELECT A.AccountNo, A.CalculatedInterest, 0, 0
FROM #tempInterestCalc A
LEFT JOIN InterestBuffer B ON A.AccountNo = B.AccountNo
WHERE B.AccountNo IS NULL
Run Code Online (Sandbox Code Playgroud)

一切都很好.并发执行期间出现问题.我#tempInterestCalc通过加入其他各种表来插入数据,包括与表的左连接,InterestBuffer#tempInterestCalc为每个并发执行插入不同的数据集.

我的问题是,有时执行会被另一个执行锁定,直到我将它们串行提交. …

sql sql-server rowlocking

10
推荐指数
1
解决办法
1772
查看次数

SQL Server死锁在同一个表上

我们的应用程序中存在死锁情况问题.在过去的几天里,我已经阅读了很多关于阻塞,锁定和死锁的内容,试图了解问题以便解决问题.

现在,当我读取有关死锁的错误日志信息时,我无法理解这种情况是如何存在的.看看这个(我已经重命名了表名,但重要的是在日志消息中名为OurTable的名称):

deadlock-list
deadlock victim=process1e2ac02c8
process-list
    process id=process1e2ac02c8 taskpriority=0 logused=0 waitresource=OBJECT: 11:290100074:0  waittime=704 ownerId=3144354890 transactionname=SELECT lasttranstarted=2011-12-01T14:43:20.577 XDES=0x80017920 lockMode=S schedulerid=6 kpid=7508 status=suspended spid=155 sbid=0 ecid=0 priority=0 trancount=0 lastbatchstarted=2011-12-01T14:43:20.577 lastbatchcompleted=2011-12-01T14:43:20.577 clientapp=.Net SqlClient Data Provider hostname=DE-1809 hostpid=5856 loginname=2Ezy isolationlevel=read committed (2) xactid=3144354890 currentdb=11 lockTimeout=4294967295 clientoption1=673185824 clientoption2=128056
     executionStack
      frame procname=.dbo.RetrieveSomething line=23 stmtstart=1398 stmtend=3724 sqlhandle=0x03000b0030d42d645a63e6006a9f00000100000000000000
         select
            Col1
            ,Col2
            ,(
                SELECT TOP(1)
                    Col1
                FROM
                    OurTable2 AS C
                        JOIN OurTable AS ETC ON C.Id = ETC.FKId
                            AND E.Id = C.FKId
                ORDER BY ETC.Col2
            ) AS Col3
        from …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server deadlock

9
推荐指数
1
解决办法
8527
查看次数

标签 统计

sql-server ×2

deadlock ×1

rowlocking ×1

sql ×1

t-sql ×1