代码之家  ›  专栏  ›  技术社区  ›  Vladislav Rastrusny

事务级隔离如何影响MySQL中autocommit模式下的性能?

  •  2
  • Vladislav Rastrusny  · 技术社区  · 14 年前

    this instruction

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   l0st3d    11 年前

    热释光;DR:如果你的论坛很慢,事务隔离级别很可能不是原因,将它设置为默认值以外的任何值都不会有帮助。设置innodb \u flush \u log \u on \u trx \u commit=2会有所帮助,但会对崩溃造成持久性后果。

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

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

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

    [mysqld]
    innodb_flush_log_on_trx_commit = 2
    

    然后重新启动服务器。

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

        2
  •  0
  •   Krunal    14 年前

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

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