当主线程状态为“0”时,mysql实际在做什么;制造检查站;?

当主线程状态为“0”时,mysql实际在做什么;制造检查站;?,mysql,innodb,freeze,checkpoint,Mysql,Innodb,Freeze,Checkpoint,我注意到mysql(5.0.60)经常在负载下一次最多冻结几分钟,在此期间服务器完全没有响应。我已经能够隔离这种情况,只有当innotop将主线程状态显示为“making checkpoint”时才会发生 服务器在这一点上实际在做什么?这一个回答了您的问题,并为您的问题提供了一些解决方案: 您可能知道,Innodb存储引擎使用模糊检查点技术作为it恢复策略的一部分。这是一种非常好的方法,这意味着数据库永远不需要“暂停”来执行总修改页面刷新,而是在小块中逐渐刷新脏页面,所以数据库负载非常均匀 检查

我注意到mysql(5.0.60)经常在负载下一次最多冻结几分钟,在此期间服务器完全没有响应。我已经能够隔离这种情况,只有当innotop将主线程状态显示为“making checkpoint”时才会发生


服务器在这一点上实际在做什么?

这一个回答了您的问题,并为您的问题提供了一些解决方案:

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


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

我想我应该扩展Pradeep的评论:

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

这是一个众所周知的InnoDB问题,有第三方补丁可以提供帮助。在XtraDB中,innodb_adaptive_checkpoint在接近尾端时加快页面刷新速度:

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

InnoBase在1.0.4插件中发布了一个类似的补丁(还没有正式的MySQL版本)。

这与“刷新日志”有什么不同?日志不同;它们是自上次备份以来在数据库中保存更改的磁盘文件。如果数据库被破坏,您可以通过恢复备份和重放日志来恢复。检查点将RAM中的内容提交到磁盘。我认为您对二进制日志感到困惑。提交更改时,InnoDB会将更改的历史记录记录到日志文件中,但会延迟对表空间(数据)进行主要更改。它稍后会作为检查点进行这些更改。这是一种优化,因为日志文件IO是顺序IO,检查点不一定按照修改发生的顺序将修改写入表空间。刷新日志只意味着您正在等待,而您正在写下最小数量的日志,以便能够进行崩溃恢复。当mysqld启动时,这是一个自动化的过程。