1

我注意到mysql(5.0.60)经常在负载下一次冻结长达几分钟,在此期间服务器完全没有响应。我已经能够将这种情况隔离为仅在 innotop 将主线程状态显示为“制作检查点”时发生。

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

4

3 回答 3

1

这个回答了你的问题,也有一些解决你的问题的方法:

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

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

于 2009-07-09T00:33:10.003 回答
1

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

于 2009-07-09T00:43:47.197 回答
1

我想我会扩展 Pradeep 的评论:

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 版本中)。

于 2009-08-29T04:44:33.970 回答