SQL Server - 堆上的批量加载阻塞查询

yur*_*ish 4 sql-server

SQL Server 在线书籍在SET TRANSACTION ISOLATION LEVEL 中说

“对在以下隔离级别下运行的堆块查询进行了优化的批量加载操作:

快照

未提交的阅读

使用行版本控制读取已提交”。

优化的批量加载在这里到底是什么意思?

Pau*_*ite 6

优化的批量加载意味着 SQL Server 使用特殊的批量加载代码路径(快速加载)和最少的日志记录。

这些概念描述于:

从最后一个链接:

尽管 RCSI 下的读取器不受 X 锁的影响,但在 SQL Server 2008 中有两种批量加载情况会阻塞 RCSI 查询(以及 NOLOCK 查询):

  • 使用 BULK INSERT、INSERT-SELECT 或其他批量加载操作使用 TABLOCK 填充堆时。这是因为堆加载获取 BULK OPERATION 意向排他 (IX) 锁,而 NOLOCK 或 RCSI 读取器获取 BULK OPERATION 共享 (S) 锁。要批量加载堆并允许并发读取器甚至使用 RCSI 或 NOLOCK,您必须消除 TABLOCK 提示,从而放弃最少的日志记录。