事务隔离级别神话与误解
在今天的文章里我想谈下SQL Server里现存的各种事务隔离级别的神话和误解。主要我会谈谈下列话题: 什么是事务隔离级别(Transaction Isolation Levels)? NOLOCK从不阻塞!? 提交读(Read Committed)不会持锁!? Key Range Locks只针对可串行化?! 好,让我们从第1个开始奠定SQL Server里事务隔离级别的基础。 什么是事务隔离级别(Transaction Isolation Levels)? 每次当我站在客户角度,处理各类乱七八糟的SQL Server问题(或进行SQL Server体检),有时问题的根源是躲在数据库里的锁/阻塞行为。当你有一个糟糕的查询(可能是丢失一个非常重要的索引),整个数据库的性能都会下降。 你是否尝试过启动一个新的事务(却不曾提交它),它会获取你生产数据库主数据表的排它锁(exclusive lock)?相信我:你数据库的性能和生产力就会挂掉——就在你面前!!!因此听我老人言:不要这样做! 当我们在任何关系数据库里谈论锁和阻塞,我们也要谈到那个数据库管理系统(DBMS)所支持的各种事务隔离级别...
