TABLOCK是否会提高BULK INSERT的性能



我只是想知道TABLOCK是否会提高BULK INSERT的性能?

基于中的第一个答案https://dba.stackexchange.com/questions/165966/how-does-one-investigate-the-performance-of-a-bulk-insert-statement,看来TABLOCK会的。

根据官方文件https://learn.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-ver15,它说"如果一个表没有索引并且指定了TABLOCK,那么多个客户端可以同时加载该表。"但对于我的情况,只有一个会话需要将数据大容量插入数据库,所以我似乎根本不需要指定TABLOCK。

我在上问过这个问题https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a957cd37-ec96-4beb-8a4b-03d783c7f91e/whether-tablock-will-improve-the-performance-of-bulk-insert-or-not?forum=transactsql但是没有得到一个满意的答案,所以我不得不把这个问题放在这里。

感谢

TABLOCK指定在大容量导入操作期间获取表级锁。如果表没有索引并且指定了TABLOCK,则多个客户端可以同时加载该表。默认情况下,锁定行为由大容量加载时的表选项表锁定决定。在大容量导入操作期间保持锁可以减少表上的锁争用,在某些情况下可以显著提高性能。

如果您的数据插入到只有一个会话的表中,表锁对您没有任何好处,但当许多会话可以将数据插入到表中时,表锁可以减少过程中的锁争用。但当您的表具有表锁定时,另一个会话无法访问该表。

最新更新