MariaDB 缓存一夜之间变冷

MariaDB 缓存一夜之间变冷

我们正在运行一个 LAMP 堆栈,其中包括 Centos 7 上的 MariaDB 10.5.15。它是一台具有 4 个 CPU 和 8GB RAM 的专用服务器。

直到最近几周才遇到问题,我注意到慢查询日志中的慢查询需要 8-9 秒。

这些查询针对多个 INNODB 数据库,但始终是大型表(即 10,000+ 行)。它们总是发生在上午 6 点到 8 点之间。

所讨论的表有索引,并且相同的查询通常执行时间不到一秒。

我发现,在周日早上 8 点登录服务器并使用简单的 select 语句查询这些大型表,它们需要 8-9 秒才能执行。然后,在当天的剩余时间里,甚至在午夜之后,针对该表的任何查询都会很快。

上午 6 点至 8 点也是万物在经过凌晨一段时间的沉寂之后“恢复生机”的时间。

似乎某种缓存正在变冷,需要预热,但我不确定为什么在多年无故障使用后突然发生这种情况。据我所知,服务器上没有在夜间运行大型进程,发生这种情况时服务器也没有处于负载状态。

我们全天候监控 CPU 负载,并定期检查 Apache 和 MariaDB 的连接数,这些连接数全天都保持在较低水平。通常,除了缓冲区和缓存外,大约有 3GB 的内存可用。

编辑

令人尴尬的是,我发现有问题的慢查询实际上没有使用索引,而是在进行全表扫描。初始查询可能需要几秒钟,然后在一天的剩余时间内,甚至全表扫描也只需不到一秒钟。我假设这是某种磁盘缓存,它在一夜之间就变冷了。

虽然全表扫描出现性能问题似乎并不罕见,但突然间这个问题成为一个问题似乎还是很奇怪。

答案1

您似乎已经排除了夜间转储和一些缓慢的过程?

更多调试建议:

降低全局设置long_query_time并保持 slowlog 处于打开状态;您可能会抓住恶棍。

您的查询运行频率是多少?我在这里要寻找的是缩短查询变慢的时间。

检查SHOW GLOBAL STATUS LIKE "Uptime" 如果小于 86400,则 MariaDB 已在不到 24 小时前重新启动。在这种情况下,您应该能够将时间精确到秒。(但无法确定原因)。

向我们显示查询,加上SHOW CREATE TABLE我们EXPLAIN... 也许能够帮助您加快速度(例如,通过更好的索引或查询的重新表述),从而消除问题(尽管没有解决原因)。

相关内容