2012-03-26 167 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与因为该快照

所做的任何并发更新但重复读水平并没有这样做,在所有的,虽然它使用快照制作冲突。