2

我的服务器上运行了一个 VBulletin 4.x 论坛。出于性能原因,根据此说明将一些论坛表转换为 InnoDB 。论坛本身根本不使用事务(源代码中没有 START TRANSACTION 或 BEGIN WORK),并且 InnoDB 表仅用于防止表锁定 UPDATE 查询。论坛当然在自动提交模式下运行。

我是否理解正确,在这种情况下我可以将默认服务器事务隔离级别更改为READ UNCOMMITED并通过这种方式获得一些性能提升?

4

2 回答 2

1

TL;DR:如果您的论坛速度很慢,事务隔离级别很可能不是它的原因,并且将其设置为默认值之外的任何其他值几乎没有帮助。设置 innodb_flush_log_on_trx_commit = 2 会有所帮助,但会对崩溃产生持久性影响。

长版:

我在http://mysqldump.azundris.com/archives/77-Transactions-An-InnoDB-Tutorial.html中写了什么事务隔离级别。查看http://mysqldump.azundris.com/categories/32-InnoDB中的所有 3 篇 InnoDB 概述文章。

结果是,在任何情况下,系统都必须能够回滚,因此即使 READ UNCOMMITTED 也不会改变任何需要在写入时完成的操作。

对于读取事务,当导致读取事务视图的撤消日志记录链较长时,读取速度较慢,因此 READ UNCOMMITTED 或 READ COMMITTED 可能比默认的 REPEATABLE READ 快得多。但是您必须记住,我们在这里讨论的是内存访问,而磁盘访问会减慢您的速度。

关于 AUTOCOMMIT:这会将每个写入语句同步到磁盘。如果您以前使用过 MyISAM 并且已经足够好了,您可能需要配置

[mysqld]
innodb_flush_log_on_trx_commit = 2

在您的 my.cnf 文件中并重新启动服务器。

这将使提交从 mysqld 写入文件系统缓冲区缓存,但延迟将文件系统缓冲区缓存刷新到磁盘,以便每秒仅发生一次。您不会在 mysqld 崩溃时丢失任何数据,但您可能会在硬件崩溃时丢失多达 1 秒的写入。即使在硬件崩溃之后,InnoDB 也会自动恢复,并且即使它不是完整的 ACID,其行为仍然比之前使用 MyISAM 时要好。如果没有该设置,它将比 AUTOCOMMIT 快得多。

于 2010-07-19T08:55:02.323 回答
0

的。它肯定会带来一些性能提升。但是,如果您正在进行任何更新,则必须手动进行提交。

我对 AutoCommit 模式的了解是,它会在 db 操作后自动执行提交,这会导致表上的索引在每次提交时重建,这会降低性能。

于 2010-04-27T07:23:43.247 回答