我的工作現在一個學校項目,需要有關於不同的隔離級別來表徵MySQL性能。我已經在READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ和SERIALIZABLE測試過了。現在我想用快照隔離來測試。如何在MySQL的InnoDB設置的快照隔離級別
我知道,在InnoDB中使用默認值REPEATABLE READ時,快照隔離是結合使用的,但我想知道是否可以將隔離級別設置爲快照隔離?我會怎麼做?
我的工作現在一個學校項目,需要有關於不同的隔離級別來表徵MySQL性能。我已經在READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ和SERIALIZABLE測試過了。現在我想用快照隔離來測試。如何在MySQL的InnoDB設置的快照隔離級別
我知道,在InnoDB中使用默認值REPEATABLE READ時,快照隔離是結合使用的,但我想知道是否可以將隔離級別設置爲快照隔離?我會怎麼做?
沒有全球快照隔離級別。從MySQL的文檔,START TRANSACTION
語法:
你也可以開始一個事務是這樣的:
START TRANSACTION WITH CONSISTENT SNAPSHOT;
的
WITH CONSISTENT SNAPSHOT
選項啓動存儲引擎,能夠成爲一個穩定的讀取。這僅適用於InnoDB。效果與發佈任何InnoDB表中的START TRANSACTION
後跟SELECT
相同。見13.6.8.2, 「Consistent Nonlocking Reads」。WITH CONSISTENT SNAPSHOT
選件不會更改當前事務隔離級別,因此只有噹噹前隔離級別允許一致性讀取(REPEATABLE READ
或SERIALIZABLE
)時才提供一致的快照。
所以,你必須隔離級別與上述語法設置爲REPEATABLE READ
或SERIALIZABLE
並開始交易。
使用變量tx_isolation,你可以在本地和全局設置的事務隔離。
您可以在會話如下
SET tx_isolation = 'READ-COMMITTED';
設置您可以設置它在全球以及
SET GLOBAL tx_isolation = 'READ-COMMITTED';
,而是一種影響新的數據庫連接前進。你還必須將其設置在當前會話中
有MySQL中無快照隔離級別。它使用快照Consistent Nonlocking Reads,但並不意味着它支持快照隔離。
據the Wikipedia page,只有數據庫下方支撐快照隔離。
快照隔離已通過幾種主要的數據庫管理系統,如SQL Anywhere中,Interbase的火鳥,甲骨文,PostgreSQL的和的Microsoft SQL Server(2005年以後)
在快照隔離,
交易本身就會成功提交只有沒有更新它^ h與因爲該快照
所做的任何併發更新但重複讀水平並沒有這樣做,在所有的,雖然它使用快照製作衝突。
的隔離級別是你提到的4。沒有快照隔離級別,可以在全局範圍內設置。 – 2012-03-26 22:45:26