当主线程状态是“制作检查点”时,mysql实际上在做什么?

时间:2009-07-09 00:29:48

标签: mysql innodb freeze checkpoint

我注意到mysql(5.0.60)经常在负载下冻结最多几分钟,在此期间服务器完全没有响应。当innotop将主线程状态显示为“制作检查点”时,我已经能够将其分离出来。

此时服务器实际在做什么?

3 个答案:

答案 0 :(得分:1)

这个问题可以解答您的问题并为您的问题提供一些解决方案:

您可能知道Innodb存储引擎使用模糊检查点技术作为其恢复策略的一部分。这是非常好的方法,这意味着数据库永远不需要“停止”执行完整的修改页面刷新,而是在小块中逐渐刷新脏页面,因此数据库负载非常均匀。

http://www.mysqlperformanceblog.com/2006/05/10/innodb-fuzzy-checkpointing-woes/

答案 1 :(得分:1)

检查点是数据库服务器将所有内存中更改提交到磁盘的时间。

答案 2 :(得分:1)

我以为我会扩展普拉迪普的评论:

InnoDB(默认)模糊检查点可以很容易地将脏页面刷新到磁盘*。当接近日志文件的末尾并强制检查点时,这可能会产生问题。

这是一个众所周知的InnoDB问题 - 并且有第三方补丁可以提供帮助。在XtraDB中,innodb_adaptive_checkpoint加快页面刷新,随着结束越来越近:

http://www.percona.com/docs/wiki/percona-xtradb:patch:innodb_io

  • 解释为什么有点复杂。主线程具有一些硬编码常量,用于确定服务器是否“忙”以刷新页面,例如,如果已经发生超过100次IO操作/秒(“IOPS”)。 100 IOPS当然是关于单个7200RPM磁盘可以完成的操作数量,如果您的服务器具有RAID和多个磁盘,则可能没有意义。 XtraDB还可以选择描述innodb_io_capacity。

InnoBase在1.0.4插件中发布了一个类似的补丁(尚未在官方的MySQL版本中发布)。