我正在运行时间(几个小时)程序,执行插入,使用选择进行更新。是否有可能对使用过的数据进行尽可能低的锁定?当我的其他程序尝试选择该数据时,我认为我遇到了死锁问题。
我希望在我的程序中使用select大表日期的插入/删除/更新语句,不要以任何方式阻止该数据(或者至少不能用于选择)。
使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
会解决问题吗?我还阅读了有关快照的内容,但数据库太大而无法将其设置为开启。
答案 0 :(得分:0)
是的,在每个查询批处理的顶部使用set transaction isolation level read uncommitted
将有助于解决死锁问题。请记住,这些将是脏读,因为在使用此设置时,您将不会读取任何“已提交”的事务。我经常使用这个语句来避免在具有高流量数据库表的生产环境中导致死锁问题。
阅读完整的专业人士名单在此使用read uncommitted
:http://sqlblog.com/blogs/tamarick_hill/archive/2013/05/06/pros-cons-of-using-read-uncommitted-and-nolock.aspx