官术网_书友最值得收藏!

  • Mastering PostgreSQL 9.6
  • Hans Jurgen Schonig
  • 289字
  • 2021-07-09 19:57:13

Understanding transaction isolation levels

Up to now, you have seen how to handle locking as well as some basic concurrency. In this section, you will learn about transaction isolation. To me, this is one of the most neglected topics in modern software development. Only a small fraction of software developers are actually aware of this issue, which in turn leads to disgusting and mind-boggling bugs.

Here is an example of what can happen:

Most users would actually expect the left transaction to always return 300 regardless of the second transaction. However, this is not true. By default, PostgreSQL runs in READ COMMITTED transaction isolation mode. This means that every statement inside a transaction will get a new snapshot of the data, which will be constant throughout the query.

An SQL statement will operate on the same snapshot and will ignore changes by concurrent transactions while it is running.

If you want to avoid that, you can use TRANSACTION ISOLATION LEVEL REPEATABLE READ. In this transaction isolation level, a transaction will use the same snapshot through the entire transactions. Here is what will happen:

As just outlined, the first transaction will freeze its snapshot of the data and provide us with constant results throughout the entire transaction. This feature is especially important if you want to run reports. The first and the last page of a report should always be consistent and operate on the same data. Therefore, repeatable read is key to consistent reports.

Note that isolation-related errors won't always pop up instantly. It can happen that trouble is noticed years after an application has been moved to production.

Repeatable read is not more expensive than read committed. There is no need to worry about performance penalties.
主站蜘蛛池模板: 南乐县| 闻喜县| 体育| 虹口区| 额尔古纳市| 阳谷县| 淮安市| 新源县| 兴山县| 外汇| 岗巴县| 霍邱县| 庆阳市| 阳春市| 右玉县| 长寿区| 鄂尔多斯市| 邻水| 二连浩特市| 拉孜县| 石河子市| 滕州市| 丹棱县| 凤山市| 金溪县| 日照市| 香格里拉县| 神池县| 四平市| 公安县| 灌南县| 游戏| 明光市| 兴化市| 东港市| 元氏县| 民丰县| 广汉市| 新郑市| 河北省| 喀喇|