Postgres 数据库并发控制配置

在设置数据库的并发控制之前,请记住, *数据库的事务和锁机制是无法解决第二类丢失更新的* 。




基本资料



事务,锁和事务隔离级别



事务 的概念跳过,大家可以自行上网搜索。


事务 是用来保证数据的一致性(integrity )而 是保证数据的并发(控制多个事务的并发)( concurrency )。


的级别太高,可能会影响数据库的并发。 的级别越低一般来说数据库的并发越好。


事务隔离级别
在数据库操作中,为了有效保证并发操作的正确性,提出了 事务隔离级别 的概念。


事务隔离级别 就是 为了同时解决一致性和并发的问题 而存在的,SQL标准中定义了4中隔离级别,分别是串行化(SERIALIZABLE)、可重复读(REPEATABLE READ)、读已提交(READ COMMITED)和读未提交(READ UNCOMMITED)四个等级。四个等级并发性能依次升高,隔离度依次降低。


再次请记住, 数据库的事务和锁机制是无法解决第二类丢失更新的


Postgres版本及文档



现在Postgres最新版本是9.1.3,可以用pgAdmin看到postgres的版本。
Postgres 9.1的英文文档可以在这里找到, http://www.postgresql.org/docs/9.1/interactive/mvcc.html .


Postgres MVCC配置



MVCC(multi-version concurrency control),多版本并发控制。现在流行的新的数据库并发控制技术,也是下一代的发展方向。该技术通过数据快照(数据的某个版本)来解决并发读写的问题。
MVCC 模型的好处是任何时候读锁和写锁都不相互干扰。读锁不会阻塞写锁,写锁不会干扰读锁。读锁操作一般是用共享锁实现,读锁与读锁直接不冲突。写锁一般用排他锁,所以写锁会保证并发写会变成串行的(针对同一个行或者字段的操作),保证不会出现第一类脏写.


Postgres用MVCC做数据库级别并发访问控制机制。该特性不可配置,不可移除。
同时, Postgres提供锁机制,让应用开发人员可以手动做并发控制。


Postgres 事务隔离级别设置



事务隔离级别决定了数据库系统对行锁,表锁的使用。如果需要在事务之外进行并发控制,可以手动加表锁行锁。


MVCC只工作在REPEATABLE READ和READ COMMITED隔离级别下。READ UNCOMMITED不是MVCC兼容的,因为查询不能找到适合他们事务版本的行版本;它们每次都只能读到最新的版本。SERIABLABLE也不与MVCC兼容,因为读操作会锁定他们返回的每一行数据。
所以在PostGres中,READ UNCOMMITTED被当做READ COMMITTED来处理,SERIALIZABLE被当做REPEATABLE READ来处理。


实际上, MVCC模型中还有一个隔离级别:Serializable Snapshot Isolation, 这不是一个SQL 标准的隔离级别,只适用于实现了MVCC的数据库。它和 SERIABLABLE级别差不多,定义上略有差异,并且,MVCC是无法解决幻读的问题的,所以,它也无法解决幻读的问题。


手动设置事务隔离级别



用sql设置隔离级别


Postgres默认事务隔离级别是READ-COMMITTED,可以通过SET TRANSACTION语句来设置当前事务的隔离级别,注意,该语句仅对当前事务有影响。如果要修改一个回话(session)的事务隔离级别,可以通过 SET SESSION CHARACTERISTICS语句来修改回话中所有事务的隔离级别。SET TRANSACTION可以覆盖SET SESSION CHARACTERISTICS语句,只作用于当前transaction.


postgres 锁机制解释



这里面有解释postgres怎么样选择锁的类型(排他锁,共享锁),锁的粒度(行锁,表锁)。其行为由用户的操作和设置的隔离级别决定。
http://www.postgresql.org/docs/7.2/static/locking-tables.html 






参考



http://www.php100.com/manual/PostgreSQL8/mvcc.html , PostgreSQL 8.1 中文文档。
http://www.postgresql.org/docs/9.1/interactive/mvcc.html 。
http://baike.baidu.com/view/2943500.htm 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值