【发布时间】:2011-04-20 10:14:11
【问题描述】:
我阅读了另一篇文章的评论,说 InnoDB 可以通过不在每次提交时刷新二进制日志来优化速度。
这是我第一次听说这个,那么这些二进制日志是什么?这个刷新是怎么回事?我为什么要这样做(以及何时不这样做)以及如何做?
【问题讨论】:
我阅读了另一篇文章的评论,说 InnoDB 可以通过不在每次提交时刷新二进制日志来优化速度。
这是我第一次听说这个,那么这些二进制日志是什么?这个刷新是怎么回事?我为什么要这样做(以及何时不这样做)以及如何做?
【问题讨论】:
MySQL 的二进制日志充当数据库,相当于日志文件系统中的日志。每个查询都会记录在其中,因此如果数据库在某个时候崩溃,您可以“重放”二进制日志并以最小的痛苦重建数据库。它也用于复制。
【讨论】:
InnoDB 通过重放日志从崩溃中恢复。它还用于将主服务器复制到从服务器。
【讨论】:
二进制日志用于崩溃恢复和复制。假设它们已启用,有关刷新的两个主要适用设置是:
这些设置有利于速度而不是“保证”可靠性,因为它们允许操作系统延迟将缓冲区刷新到磁盘。
如果您在廉价的磁盘控制器上运行(大多数人都是这样),那么在每次提交时刷新日志都会非常慢。在一个进行大量写入的网站上,我看到页面执行时间下降了 10 到 100 倍!运行您自己的基准测试并查看它对您的影响很容易。
非常清楚,如果您想要最大的恢复优势,您必须将这两个值都设置为 1。如上配置,在系统崩溃的情况下您可能会丢失几秒钟的数据。对于某些网站,这是不可接受的。对于博客和论坛,这可能是一个值得权衡的选择。
您可以在此处阅读有关设置的更多信息:
http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html
还有许多与内存相关的选项,例如“innodb_buffer_pool_size”需要配置。搜索 MySQL InnoDB 调优应该会有所帮助。
【讨论】: