我们正在运行一个灯栈,其中包括Centos 7上的MariaDB 10.5.15。它是一个专用服务器,具有4CPU和8GB内存。
直到最近几周,我才发现缓慢的查询在缓慢的查询日志中花费了8-9秒的时间。
这些查询针对多个INNODB数据库,但总是针对大型表(即10,000+行)。它们总是发生在早上6点到8点之间。
所讨论的表具有索引,相同的查询通常在不到1秒钟内执行。
我发现,通过在周日上午8点登录服务器,并使用简单的select语句查询这些大型表,它们将花费8-9秒的时间执行。然后,在一天剩下的时间里,甚至在午夜以后,对该表的任何查询都将是快速的。
早上6点到早上8点也是事情“恢复生机”的时候,在早期的几个小时里,没有活动的一段时间。
似乎有某种缓存正在变冷,需要热身,但我不知道为什么这种情况在多年的麻烦免费使用后突然开始发生。据我所知,在服务器上一夜之间没有大进程在运行,当这种情况发生时,服务器没有负载。
我们监视CPU负载24/7,并定期检查连接到Apache和MariaDB的数量,这些连接在一天中始终保持在较低的水平。通常有大约3GB的内存空闲,不包括缓冲区和缓存。
令人尴尬的是,我发现问题中的慢速查询实际上并没有使用索引,而是在进行全表扫描。一个初始的查询可能需要几秒钟,然后在一天的剩余时间里,甚至整个表扫描也需要不到1秒的时间。我假设这是某种类型的磁盘缓存,一夜之间就会变冷。
虽然全表扫描出现性能问题似乎并不少见,但突然间突然变成了一个问题似乎还是很奇怪的。
发布于 2022-05-09 01:17:35
你似乎已经排除了夜间的垃圾场和一些缓慢的过程?
更多调试建议:
降低long_query_time
的全局设置,并保持慢速日志打开;您可能会抓到坏人。
您的查询多久运行一次?我在这里钓的是把事情变慢的时间缩短了。
检查SHOW GLOBAL STATUS LIKE "Uptime"
是否小于86400,那么MariaDB在不到24小时前就重新启动了。在这种情况下,您应该能够将时间锁定在第二位。(但不确定原因)。
向我们展示这个查询,加上SHOW CREATE TABLE
和EXPLAIN...
,我们也许可以帮助您加快速度(例如,通过更好的索引或查询的重新编排),从而消除问题(尽管没有解决问题的原因)。
https://serverfault.com/questions/1100432
复制相似问题