使用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负载,但是这样可能会影响性能。
|
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。
-
如何在Azure部署时选择合适的SQL Server?
想要在Azure上运行SQL Server,企业一般会面临两种选择:在Azure虚拟机上安装SQL Server或使用Azure SQL Database。
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。