使用SQL Server时必须注意的10个特性:读、写器相互block

日期: 2013-09-16 作者:Alex Bolenok 来源:TechTarget中国

使用SQL Server时必须注意的10个特性:读、写器相互block

 

SQL Server的锁定系统会让读、写器相互block,有时即便它们访问的是不同的记录也会相互block。

这一行为并没有在标准中加以定义,而且这一现象会发生在SQL Server和MySQL(带有MyISAM)中。

任何像样的数据库系统都应该有ACID特性,这确保了其事务具备原子性、一致性、隔离性以及持久性。

与其他事情相比,这意味着任何查询都不应部分地改变一个数据库的状态(对外部可见)。如果一个查询更新100行,不应该有只看到30行已更新70行未更新这样的会话存在:它应该始终是全或无。

不同的系统通过不同的方式实现这一点,不过这总是可以归结为一到两点:创建一份记录更新的备份,或是锁定此记录以使其只能由一个会话进行访问。

SQL Server采用的是第二种方法。如果一个会话要更新一条记录,它会创建一个称之为锁的特殊对象,它可以阻止对此记录的并发访问。即便一个会话要读取一条记录,它也都会在其上加锁(尽管在某种程度上会造成并发读取的可能)。

锁是存储在内存中的而且维护成本非常高昂。所以当它们数量增长时,SQL Server可能就会决定对它们进行升级:使得锁保护不仅仅影响记录,而是记录或甚至是整个表所在的整个数据库页。这样会释放一些内存,但会使锁降低选择性,所以那些从未被查询接触过的记录很可能就会锁定并且其他会话对其也变得无法访问。

为了解决这一问题,SQL Server提供了一个称之为SNAPSHOT的特殊事务隔离级别。它并不依赖于加锁来获得一致性,而是在临时数据库(一个临时数据的特殊存储区域)中对每个受影响记录做一个备份。这就使得读、写器不会相互锁定,而是增加系统的存储需求和I/O负载,但是这样可能会影响性能。

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐