gpt4 book ai didi

php - 事务级别隔离如何影响 MySQL 自动提交模式下的性能?

转载 作者:行者123 更新时间:2023-11-29 03:14:35 25 4
gpt4 key购买 nike

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

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

最佳答案

TL;DR:如果您的论坛速度很慢,那么 TRANSACTION ISOLATION LEVEL 很可能不是问题的原因,将其设置为默认值以外的任何其他值都无济于事。设置 innodb_flush_log_on_trx_commit = 2 会有所帮助,但会导致崩溃的持久性后果。

长版:

What TRANSACTION ISOLATION LEVEL does I have written up in http://mysqldump.azundris.com/archives/77-Transactions-An-InnoDB-Tutorial.html .查看 http://mysqldump.azundris.com/categories/32-InnoDB 中的所有 3 篇 InnoDB 概述文章.

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

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

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

[mysqld]
innodb_flush_log_on_trx_commit = 2

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

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

关于php - 事务级别隔离如何影响 MySQL 自动提交模式下的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2719269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com