SQLBulkCopy导致死锁

时间:2016-08-24 13:11:43

标签: c# sql-server deadlock sqlbulkcopy

我有以下代码..它实际上使用SQLBulkCopy将数据插入目标。由于死锁,此代码在源SQL服务器中经常失败。仅供我们执行批量复制时,正在复制的表可以正在使用(我的意思是一些插入/选择将运行)。

这是导致问题还是“TABLOCK”提示有什么关系?根据我的理解,TABLOCK只获取共享锁,不应该是一个问题。

def function():

    choice = raw_input("> ")
    if choice == "attack":
        print "Killed the monster."
    elif choice == "run":
        print "You run but the monster follows you. Activate jetpack? (y/n)"
        def function_in_function():
            choice = raw_input("> ")
            if choice == "y":
                print "You fly to safety."
            elif choice == "n":
                print "You get stomped."
            else:
                print "That's not an option."
                function_in_function()
        function_in_function()
    else:
        print "That's not an option."
        function()


function()

1 个答案:

答案 0 :(得分:3)

批量插入需要在表中插入行。插入行需要独占锁。获得的确切锁将取决于并发模型。

如果指定TableLock选项,您的进程将尝试获取独占表锁。如果您的进程首先获取共享表锁,其他进程具有共享行锁,并且两个进程都尝试将其锁升级为独占锁,则肯定会导致死锁。

有几种方法可以获得有关死锁的更多信息: