Apo*_*sis 2 sql-server sql-server-2000 hints isolation-level
我需要获取MAX
交易中某个字段的聚合。我在事务中进一步使用此值。我想避免在整个表中插入,而我正在从中获取MAX
事务完成时。
我研究了可用的隔离模式和锁定提示。最接近的似乎是TABLOCKX
,这是唯一避免在整个表中插入(也更新和选择)的方法。
由于我不会受到表中更新或选择的影响,我希望避免在事务期间仅插入。这个有可能?
更新:执行的字段MAX
仅在插入时设置,因此没有获得更新结果过时的风险。
我正在使用 SQL Server 2000。
将隔离级别设置为SERIALIZABLE将具有相同的效果:
最高隔离级别,可序列化,保证事务在每次重复读取操作时都将检索到完全相同的数据,但它通过执行可能影响多用户系统中其他用户的锁定级别来实现这一点。
TABLOCK
就足够了,目前不需要TABLOCKX
实现您所描述的内容。如果您稍后提到的事务更新或插入到表中,那么TABLOCKX
如果只是为了读取MAX
它是不必要的,其他进程至少可以从表中读取。
使用隔离级别还是TABLOCK
提示取决于您将扫描的表的比例以查找MAX
聚合。如果您需要触摸任何显着百分比的行TABLOCK
是合乎逻辑的。一个小百分比和希望保持一定程度的并发然后尝试SERIALIZABLE
。TABLOCK
也将消除死锁风险。
这两个选项都可以实现您防止汇总结果不一致的目的。
归档时间: |
|
查看次数: |
1788 次 |
最近记录: |