事務可見性的判斷和事務隔離級別,PostgreSQL和MySQL實現上有啥區別
事務可見性(Transaction Visibility)是指在資料庫事務中,一個事務提交後,其對其他事務是否可見的規則。
在 PostgreSQL 和 MySQL 中,事務可見性的實現有一些區別:
在 PostgreSQL 中,每個事務都有一個全域性的可見性戳(Global Visibility Map),該戳用於記錄每個頁面中的行是否對於當前事務可見。在事務開始時,事務會初始化一個可見性掩碼(Visibility Mask),該掩碼用於記錄當前事務所涉及的資料頁的可見性戳的情況。在事務進行過程中,對於訪問到的每個資料頁,事務會檢查可見性戳和可見性掩碼,從而確定當前事務能否看到該資料頁中的行。如果當前事務對於該資料頁中的行不可見,則會執行相應的行版本控制操作(如行版本回滾),以保證事務的可重複性。
在 MySQL 中,使用多版本併發控制(Multi-Version Concurrency Control,MVCC)機制實現事務可見性。在 MVCC 中,每個事務讀取到的資料行的版本號(Version)都是在事務開始時確定的。當事務提交時,資料庫會將該事務所涉及到的所有資料行的版本號更新為該事務的提交版本(Commit Version)。其他事務讀取到該資料行時,會根據自己的事務版本號和資料行版本號,判斷當前資料行是否對於自己可見。
總的來說,PostgreSQL 和 MySQL 的事務可見性實現有一些差異,但它們都採用了行版本控制的機制,以保證事務的可重複性和資料一致性。
PostgreSQL 和 MySQL 在事務隔離級別的實現上也有一些區別。
PostgreSQL 和 MySQL 都支援四種標準的事務隔離級別:讀未提交(Read Uncommitted)、讀已提交(Read Committed)、可重複讀(Repeatable Read)和序列化(Serializable)。這些隔離級別都有不同的特點和適用場景。
在 PostgreSQL 中,隔離級別的實現是基於多版本併發控制(Multi-Version Concurrency Control,MVCC)機制的。在 MVCC 中,每個事務讀取到的資料行的版本號(Version)都是在事務開始時確定的,事務提交時,資料庫會將該事務所涉及到的所有資料行的版本號更新為該事務的提交版本(Commit Version)。不同的隔離級別主要體現在如何確定當前事務可見的資料行的版本號。例如,在可重複讀隔離級別中,PostgreSQL 會對每個事務建立一個獨立的快照,該快照用於記錄事務開始時的所有資料行版本號,在事務執行期間,只能讀取該快照中的資料行,而不能讀取其他事務提交的新版本資料行。
在 MySQL 中,隔離級別的實現也是基於 MVCC 機制的。在 MySQL 中,每個事務也有一個獨立的事務檢視(Transaction View),用於記錄當前事務可以讀取的資料行版本號。不同的隔離級別主要體現在如何確定當前事務可見的資料行的版本號以及如何處理事務間的衝突。例如,在可重複讀隔離級別中,MySQL 會為每個事務建立一個獨立的快照,該快照用於記錄事務開始時的所有資料行版本號,在事務執行期間,只能讀取該快照中的資料行,而不能讀取其他事務提交的新版本資料行。在 MySQL 中,還有一個特殊的隔離級別“讀已提交(Read Committed)”,該隔離級別可以透過加鎖機制實現。
總的來說,PostgreSQL 和 MySQL 在事務隔離級別的實現上都基於 MVCC 機制,但在細節方面可能有所差異,例如如何確定當前事務可見的資料行版本號、如何處理事務間的衝突等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2936913/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 啥是 MySQL 事務隔離級別?MySql
- PostgreSQL事務隔離級別SQL
- MySQL事務隔離級別和MVCCMySqlMVC
- mysql事務隔離級別和鎖MySql
- MySQL 事務隔離級別解析和實戰MySql
- SqlServer事務詳解(事務隔離性和隔離級別詳解)SQLServer
- MySQL 事務隔離級別實現原理MySql
- MySQL 事務隔離級別MySql
- MySQL事務隔離級別MySql
- [Mysql]事務/隔離級別MySql
- MySQL事務隔離級別的實現原理MySql
- MySQL事務的隔離級別MySql
- MySQL的事務隔離級別MySql
- 理解MySQL事務隔離級別MySql
- mysql修改事務隔離級別MySql
- 理解mysql的事務隔離級別MySql
- mysql如何修改事務隔離級別MySql
- Mysql 四種事務隔離級別MySql
- Mysql鎖與事務隔離級別MySql
- MySQL事務隔離級別詳解MySql
- PostgreSQL DBA(23) - MVCC#3(事務快照和隔離級別)SQLMVCC#
- MySQL 的四種事務隔離級別MySql
- MySQL 事務的隔離級別初窺MySql
- MySQL的四種事務隔離級別MySql
- 【MySQL】MySQL的四種事務隔離級別MySql
- 事務、特性、隔離級別
- SQL鎖機制和事務隔離級別SQL
- 徹底搞懂 MySQL 事務的隔離級別MySql
- MySQL的事務隔離級別是什麼?MySql
- MySQL的事務處理及隔離級別MySql
- 【mysql】官方的SQL事務隔離級別文件MySql
- MySQL InnoDB中的事務隔離級別和鎖的關係MySql
- 資料庫事務與事務的隔離級別資料庫
- 深入理解MySQL中事務隔離級別的實現原理MySql
- Oracle-事務隔離級別Oracle
- JDBC 事務(一) 隔離級別JDBC
- 事務系統的隔離級別
- SQL Server事務的隔離級別SQLServer