我注意到mysql(5.0.60)经常在负载下一次冻结长达几分钟,在此期间服务器完全没有响应。我已经能够将这种情况隔离为仅在 innotop 将主线程状态显示为“制作检查点”时发生。
此时服务器实际上在做什么?
我注意到mysql(5.0.60)经常在负载下一次冻结长达几分钟,在此期间服务器完全没有响应。我已经能够将这种情况隔离为仅在 innotop 将主线程状态显示为“制作检查点”时发生。
此时服务器实际上在做什么?
这个回答了你的问题,也有一些解决你的问题的方法:
您可能知道 Innodb 存储引擎使用模糊检查点技术作为其恢复策略的一部分。这是一种非常好的方法,这意味着数据库永远不需要“停止”来执行总修改页面刷新,而是以小块逐渐刷新脏页面,因此数据库负载非常均匀。
http://www.mysqlperformanceblog.com/2006/05/10/innodb-fuzzy-checkpointing-woes/
检查点是指数据库服务器将所有内存中的更改提交到磁盘。
我想我会扩展 Pradeep 的评论:
InnoDB 的(默认)模糊检查点可以很容易地将脏页刷新到磁盘*。当接近日志文件的末尾并强制检查点时,这可能会产生问题。
这是一个众所周知的 InnoDB 问题——并且有第三方补丁可以提供帮助。在 XtraDB 中,innodb_adaptive_checkpoint 加快了页面刷新速度,因为末尾越来越近:
http://www.percona.com/docs/wiki/percona-xtradb:patch:innodb_io
InnoBase 在 1.0.4 插件中发布了一个类似的补丁(尚未在官方 MySQL 版本中)。