資料庫隔離性

2022-07-28 09:48:22 字數 1002 閱讀 5902

事務的特性:原子性、一致性、隔離性、永續性

多事務同時執行的時候,可能會出現的問題:髒讀、不可重複讀、幻讀

事務隔離級別:讀未提交、讀提交、可重複讀、序列化

不同事務隔離級別的區別:

讀未提交:乙個事務還未提交,它所做的變更就可以被別的事務看到

讀提交:乙個事務提交之後,它所做的變更才可以被別的事務看到

可重複讀:乙個事務執行過程中看到的資料是一致的。未提交的更改對其他事務是不可見的

序列化:對應乙個記錄會加讀寫鎖,出現衝突的時候,後訪問的事務必須等前乙個事務執行完成才能繼續執行

配置方法:啟動引數transaction-isolation

事務隔離的實現:每條記錄在更新的時候都會同時記錄一條回滾操作。同一條記錄在系統中可以存在多個版本,這就是資料庫的多版本併發控制(mvcc)。

回滾日誌什麼時候刪除?系統會判斷當沒有事務需要用到這些回滾日誌的時候,回滾日誌會被刪除。

什麼時候不需要了?當系統裡麼有比這個回滾日誌更早的read-view的時候。

為什麼盡量不要使用長事務。長事務意味著系統裡面會存在很老的事務檢視,在這個事務提交之前,回滾記錄都要保留,這會導致大量占用儲存空間。除此之外,長事務還占用鎖資源,可能會拖垮庫。

事務啟動方式:一、顯式啟動事務語句,begin或者start transaction,提交commit,回滾rollback;二、set autocommit=0,該命令會把這個執行緒的自動提交關掉。這樣只要執行乙個select語句,事務就啟動,並不會自動提交,直到主動執行commit或rollback或斷開連線。

建議使用方法一,如果考慮多一次互動問題,可以使用commit work and chain語法。在autocommit=1的情況下用begin顯式啟動事務,如果執行commit則提交事務。如果執行commit work and chain則提交事務並自動啟動下乙個事務。

在開發過程中,盡可能的減小事務範圍,少用長事務,如果無法避免,保證邏輯日誌空間足夠用,並且支援動態日誌空間增長。監控innodb_trx表,發現長事務報警。

2014 7 27 資料庫的隔離性

演示不同隔離級別下的併發問題 1.當把事務的隔離級別設定為read uncommitted 會引發髒讀,不可重複讀,虛讀 a視窗set transaction isolation level read uncommitted start transaction select from account...

2014 7 27 資料庫的隔離性

演示不同隔離級別下的併發問題 1.當把事務的隔離級別設定為read uncommitted 會引發髒讀。不可反覆讀。虛讀 a窗體set transaction isolation level read uncommitted start transaction select from account...

mysql Spring資料庫隔離級別與效能分析

這裡以mysql為例,先明確以下幾個問題 一.一般專案如果不自己配置事務的話,一般預設的是autocommit,即執行完乙個操作後自動commit,提交事務。注 事務是繫結在資料庫操作上的,也就是當程式執行 statement.excute等操作 轉而到資料庫層面上的時候,事務才開始發生 當然spr...