我有一个运行 Percona MySQL 的 LAMP 堆栈。
通过 New Relic,我正在监控/调整/调优我的新服务器,以备实时使用。
然而,让我恼火的是,我定期(通常在一段时间不活动之后)会遇到数据库响应时间(对于通常在几毫秒内响应的简单查询)激增并破坏我的平均值。
看起来好像缓存正在分页,但实际上没有。它有 3GB 的 RAM,消耗量徘徊在 512MB 左右,分页字节为 0。
见图。
知道是什么原因造成的吗?这不太可能成为生产中的问题,因为会有持续不断的流量保持一切正常运行,但我仍然想调查一下,以防万一。
谢谢。
答案1
在没有仔细检查的情况下,我最好的猜测是自动清理或将日志事务同步到磁盘。您说错误行为是周期性的,周期是多少?周期是否与任何 mysql 可调参数一致?
答案2
DNS 可能确实是问题所在。即使 MySQL 位于本地主机上,如果 my.cnf 中没有 skip-name-resolve,它也会发出 DNS 请求。是的,这可能需要 500 毫秒甚至更长时间。
我会使用 long_query_time=0 来收集慢日志,并使用 pt-query-digest 分析日志。它将揭示查询可能存在的问题,例如锁定时间比平时长、错误的查询执行计划、偶尔的长 IO 请求。
如果峰值每天都重复出现,则收集该时间前后的日志。
您还可以增加慢速日志的详细程度,它将提供更多详细信息以供分析。
将查询响应时间图与 InnoDB 检查点年龄图进行比较 - 也许 InnoDB 当时进行了风暴刷新?
答案3
只是一个拍摄:也许解析数据库服务器的 DNS 名称。