5

我现在正在做一个学校项目,该项目需要描述 MySQL 在不同隔离级别方面的性能。我已经测试了 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。现在我想使用快照隔离来测试东西。

我知道在 InnoDB 中使用 REPEATABLE READ 的默认值时,会结合使用快照隔离,但我想知道,是否可以将隔离级别设置为仅快照隔离?我该怎么做?

4

3 回答 3

8
于 2012-03-26T22:54:53.300 回答
0

使用变量tx_isolation,您可以在本地和全局设置事务隔离。

您可以在会话中设置如下

SET tx_isolation = 'READ-COMMITTED';

您也可以全局设置它

SET GLOBAL tx_isolation = 'READ-COMMITTED';

但这会影响新的数据库连接。您仍然必须在当前会话中设置它

于 2012-03-26T23:14:41.863 回答
0

MySQL 中没有快照隔离级别。它对Consistent Nonlocking Reads使用快照,但这并不意味着它支持快照隔离。

根据维基百科页面,只有以下数据库支持快照隔离。

快照隔离已被多个主要数据库管理系统采用,例如SQL Anywhere、InterBase、Firebird、Oracle、PostgreSQLMicrosoft SQL Server(2005 及更高版本)

在快照隔离中,

仅当没有更新与自该快照以来所做的任何并发更新发生冲突时,事务本身才会成功提交

但是REPEATABLE READ级别根本不这样做,尽管它使用快照。

于 2015-05-26T04:16:57.577 回答