我知道Serializable的隔离级别是所有隔离级别中最严格的.我很好奇,虽然什么样的应用程序需要这种级别的隔离,或者我应该考虑使用它?
Pau*_*ams 49
问自己以下问题:如果有人在您的交易运行时向您的数据插入新行,那会不会很糟糕?这会以不可接受的方式干扰您的结果吗?如果是这样,请使用SERIALIZABLE级别.
来自MSDN关于SET TRANSACTION ISOLATION LEVEL:
SERIALIZABLE
在数据集上放置范围锁定,防止其他用户在事务完成之前更新或将行插入数据集.这是四个隔离级别中最严格的一个.由于并发性较低,因此仅在必要时使用此选项.此选项与在事务中所有SELECT语句中的所有表上设置HOLDLOCK具有相同的效果.
因此,您的事务在其整个生命周期内都会保持所有锁定 - 即使是在使 这使得所有事务似乎一次运行一个,因此名称为SERIALIZABLE.从注维基百科关于隔离级别:
SERIALIZABLE
此隔离级别指定所有事务以完全隔离的方式发生; 即,好像系统中的所有事务都是一个接一个地连续执行.仅当可以维持串行执行的错觉时,DBMS可以同时执行两个或更多个事务.
隔离SERIALIZABLE级别是基于悲观并发控制的最高隔离级别,其中事务之间完全隔离。
当一个事务读取被第二个事务更改的数据时,ANSI/ISO 标准 SQL 92 涵盖以下读取现象:
Microsoft文档扩展了以下两个内容:
下表显示了不同隔离级别带来的并发副作用:
那么,问题是你的业务需求允许哪些读现象,然后检查你的硬件环境是否可以处理更严格的并发控制?
请注意,有关SERIALIZABLE隔离级别的一些非常有趣的事情 - 它是 SQL 标准指定的默认隔离级别。当然,在 SQL Server 上下文中,默认值是READ COMMITTED.
此外,有关事务锁定和行版本控制指南的官方文档是一个很好的地方,其中涵盖和解释了很多方面。
| 归档时间: |
|
| 查看次数: |
34264 次 |
| 最近记录: |