如果您正在使用复合PK并且并行插入大量数据,则可能会受到资源哈希冲突的影响.对于一个真实世界的例子,请参阅"可疑僵局和不那么逻辑锁的奇怪案例".
为了解释资源哈希冲突,我将引用Remus Rusanu的"%% lockres %% collision probability magic marker:16,777,215"(推荐阅读):
SQL Server中的锁管理器不知道它锁定了什么,它只是锁定'资源'(基本上是字符串).这是更高级别组件的工作,例如存储引擎的访问方法,将"资源"呈现给锁管理器并请求所需的锁.当锁定堆或b树中的行时,存储引擎将从记录标识符合成"资源".由于这些资源的长度有限,因此存储引擎必须将密钥的有效长度减少到允许向锁管理器提供的最大长度,这意味着记录的密钥将减少到6个字节.这是通过将密钥散列为6字节散列值来实现的.
[...]
在6个字节上有281,474,976,710,656个不同的可能值.这是一个相当大的数字?实际上并不是那么大.[...]因此,SQL %% lockres %%哈希将生成两个具有相同哈希值的记录,其中50%的概率在表中,任何表中只有16,777,215条记录.
| 归档时间: |
|
| 查看次数: |
962 次 |
| 最近记录: |