一个最令人费解的 MySQL 问题:查询偶尔变慢

Posted

技术标签:

【中文标题】一个最令人费解的 MySQL 问题:查询偶尔变慢【英文标题】:A Most Puzzling MySQL Problem: Queries Sporadically Slow 【发布时间】:2011-02-12 03:05:51 【问题描述】:

这是我作为管理员在职业生涯中遇到的最令人费解的 mysql 问题。任何精通 MySQL 的人都可以帮助我吗?:

现在,我运行一个应用程序,每秒多次查询我的 MySQL/InnoDB 表。这些查询简单且经过优化——单行插入或带有索引的选择。

通常,查询速度非常快,运行时间不到 10 毫秒。但是,每隔一小时左右,所有查询都会变慢。比如今天5:04:39,一堆简单的查询都跑了1-3秒以上,见我的慢查询日志。

为什么会这样,您认为解决方案是什么?

我有一些自己的想法:也许那段时间硬盘很忙?我确实运行了一个云服务器(机架空间)但是我将 flush_log_at_trx_commit 设置为 0 和大量的缓冲内存(磁盘上表大小的 10 倍)。那么插入和选择应该从内存中完成吗?

以前有没有人经历过这样的事情?我在这个论坛和其他论坛上进行了搜索,这真的是我以前从未见过的其他 MySQL 问题。

【问题讨论】:

您应该在serverfault.com 上提问。你在同一个盒子上有其他网站吗?任何 cron 作业正在运行?您是否有足够的物理内存来防止交换? 只有一个站点,但很可能正在进行后台活动。有没有办法设置 innoDB 以便它作为缓冲区写入内存,并且只在 HDD 中保持持久性?我肯定有足够多的内存:这些表总共 galz 评论(回来)this answer 可以帮助你 【参考方案1】:

突然停顿的原因有很多。例如 - 即使您使用的是 flush_log_at_trx_commit=0,InnoDB 也需要短暂暂停,因为它会扩展数据文件的大小。

我在 Rackspace 上使用较小的实例类型的经验是 IO 非常糟糕。我见过随机写入(应该需要 10 毫秒)需要 500 毫秒。

内置 MySQL 中没有任何东西可以帮助您更轻松地识别问题。您可能想做的是查看 Percona Server 的慢查询日志增强功能。有一个名为“profiling_server”的特定功能可以分解时间: http://www.percona.com/docs/wiki/percona-server:features:slow_extended#changes_to_the_log_format

【讨论】:

以上是关于一个最令人费解的 MySQL 问题:查询偶尔变慢的主要内容,如果未能解决你的问题,请参考以下文章

三个数据分析里最难攻破的“悖论”,每一个都令人费解

令人费解的题目(Noip2006)

令人费解的 php 解析器错误

令人费解的 javascript 数组行为

.NET:RsaCryptoServiceProvider 中令人费解的加密异常

令人费解的差距和孤岛 ORACLE SQL