2012-03-26 154 views
4

我的工作現在一個學校項目,需要有關於不同的隔離級別來表徵MySQL性能。我已經在READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ和SERIALIZABLE測試過了。現在我想用快照隔離來測試。如何在MySQL的InnoDB設置的快照隔離級別

我知道,在InnoDB中使用默認值REPEATABLE READ時,快照隔離是結合使用的,但我想知道是否可以將隔離級別設置爲快照隔離?我會怎麼做?

+1

的隔離級別是你提到的4。沒有快照隔離級別,可以在全局範圍內設置。 – 2012-03-26 22:45:26

回答

3

沒有全球快照隔離級別。從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 READSERIALIZABLE)時才提供一致的快照。

所以,你必須隔離級別與上述語法設置爲REPEATABLE READSERIALIZABLE並開始交易。

1

使用變量tx_isolation,你可以在本地和全局設置的事務隔離。

您可以在會話如下

SET tx_isolation = 'READ-COMMITTED'; 

設置您可以設置它在全球以及

SET GLOBAL tx_isolation = 'READ-COMMITTED'; 

,而是一種影響新的數據庫連接前進。你還必須將其設置在當前會話中

0

有MySQL中無快照隔離級別。它使用快照Consistent Nonlocking Reads,但並不意味着它支持快照隔離。

the Wikipedia page,只有數據庫下方支撐快照隔離。

快照隔離已通過幾種主要的數據庫管理系統,如SQL Anywhere中,Interbase的火鳥,甲骨文,PostgreSQL的的Microsoft SQL Server(2005年以後)

在快照隔離,

交易本身就會成功提交只有沒有更新它^ h與因爲該快照

所做的任何併發更新但重複讀水平並沒有這樣做,在所有的,雖然它使用快照製作衝突。