我的工作现在一个学校项目,需要有关于不同的隔离级别来表征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