【发布时间】:2013-09-11 22:06:57
【问题描述】:
我正在使用 TABLOCK 表提示阅读该内容
对于这样的陈述
INSERT INTO Tab1
SELECT * FROM Tab2
可以优化事务日志。
我不明白这是因为Tablock 将锁定整个表,因此其他进程无法访问它,那么这将如何优化事务日志记录?
【问题讨论】:
标签: sql-server logging optimization transactions
我正在使用 TABLOCK 表提示阅读该内容
对于这样的陈述
INSERT INTO Tab1
SELECT * FROM Tab2
可以优化事务日志。
我不明白这是因为Tablock 将锁定整个表,因此其他进程无法访问它,那么这将如何优化事务日志记录?
【问题讨论】:
标签: sql-server logging optimization transactions
如果没有TABLOCK 提示,SQL Server 将使用其正常的行级锁定 - 因此对于它尝试插入的每一行,它将锁定正在插入的新行,然后继续。这可能会增加很多需要持有和管理的锁。
使用TABLOCK 只是为进程锁定整个表,所以当INSERT ... SELECT ... 语句正在运行时,没有其他事务可以访问该表 - 但只有一个锁(在表上),所以与在新插入的行上拥有数十个、数百个甚至数千个单独的锁相比,管理开销要小得多。
【讨论】: