MS SQL 事务隔离级别


自己在网上看了些资料,整理一下:

事务隔离级别分类:
未提交读:在多个事务之间使用它将会是非常危险,一般不使用。
已提交读:一个事务读取的数据在事务运行期间可能被另一个事务更改,两次读的数据可能不一样。
可重复读:会阻止现有的数据被更改,但不会阻止新数据插入到SELECT语句的结果集中。
可序列化:比可重复读级别更严格,不仅会锁定事务所读取的数据,还会锁定事务的读取范围,锁定范围的叫做范围锁,
              它会锁定SELECT的WHERE的范围,范围锁在关联索引存在的时候使用,如果没有关联索引,则使用表级锁。

行版本控制来读取数据的事务级别:
已提交读快照: 用于减少阻塞,注意这是一个数据库选项。
快照:用于一致性读操作,忽略了事务运行过程中数据的更改。

处理阻塞应该遵守以下规则:

l          事务要尽量短

l          不要在事务之中请求用户输入

l          在读数据的时候考虑使用行版本管理

l          在事务中尽量访问最少量的数据。

l          尽可能地使用低的事务隔离级别。
几个常用阻塞诊断SQL语句:

 

Code

 

为了防止并处理死锁,应该遵守以下原则:

l          遵守最少化阻塞的规则。阻塞越少,发生死锁的机会就越少。

l          在事务中要按一致的顺序访问对象。如果在以上示例中的两个事务都按一个顺序访问表,就不会发生死锁。因此,要在数据库中定义对所有表的访问顺序。

l          在错误处理程序中检查错误1205并在错误发生时重新提交事务。

l          在错误处理程序中加入一个过程将错误的详细信息写入日志。

更多查看http://book.csdn.net/bookfiles/121/1001213922.shtml

posted on 2009-09-21 21:15  leegool  阅读(460)  评论(0编辑  收藏  举报

导航