我有以下代码..它实际上使用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()
答案 0 :(得分:3)
批量插入需要在表中插入行。插入行需要独占锁。获得的确切锁将取决于并发模型。
如果指定TableLock
选项,您的进程将尝试获取独占表锁。如果您的进程首先获取共享表锁,其他进程具有共享行锁,并且两个进程都尝试将其锁升级为独占锁,则肯定会导致死锁。
有几种方法可以获得有关死锁的更多信息: