您现在的位置是:亿华云 > 系统运维
一入职!就遇到MySQL亿级大表优化....
亿华云2025-10-04 00:46:25【系统运维】4人已围观
简介前段时间刚入职一家公司,就遇到了 MySQL 亿级大表优化这事!图片来自 Pexels背景XX 实例(一主一从)xxx 告警中每天凌晨在报 SLA 报警,该报警的意思是存在一定的主从延迟。(若在此时发
前段时间刚入职一家公司,入职就遇到了 MySQL 亿级大表优化这事!

图片来自 Pexels
背景
XX 实例(一主一从)xxx 告警中每天凌晨在报 SLA 报警,遇到L亿该报警的表优意思是存在一定的主从延迟。(若在此时发生主从切换,入职需要长时间才可以完成切换,遇到L亿要追延迟来保证主从数据的表优一致性)
XX 实例的慢查询数量最多(执行时间超过 1s 的 SQL 会被记录),XX 应用那方每天晚上在做删除一个月前数据的入职任务。
分析
使用 pt-query-digest 工具分析最近一周的服务器托管遇到L亿 mysql-slow.log:
pt-query-digest --since=148h mysql-slow.log | less结果第一部分:

最近一个星期内,总共记录的表优慢查询执行花费时间为 25403s,最大的入职慢 SQL 执行时间为 266s,平均每个慢 SQL 执行时间 5s,遇到L亿平均扫描的表优行数为 1766 万。
结果第二部分:

select arrival_record 操作记录的入职慢查询数量最多有 4 万多次,平均响应时间为 4s,遇到L亿delete arrival_record 记录了 6 次,表优平均响应时间 258s。
select xxx_record 语句
select arrival_record 慢查询语句都类似于如下所示,云服务器where 语句中的参数字段是一样的,传入的参数值不一样:
select count(*) from arrival_record where product_id=26 and receive_time between 2019-03-25 14:00:00 and 2019-03-25 15:00:00 and receive_spend_ms>=0\G
select arrival_record 语句在 MySQL 中最多扫描的行数为 5600 万、平均扫描的行数为 172 万,推断由于扫描的行数多导致的执行时间长。
查看执行计划:
explain select count(*) from arrival_record where product_id=26 and receive_time between 2019-03-25 14:00:00 and 2019-03-25 15:00:00 and receive_spend_ms>=0\G;很赞哦!(979)
热门文章
站长推荐

众所周知,com域名拥有最大的流通市场和流通历史。最好选择com域名,特别是在购买域名时处理域名。其次可以是cn域名、net域名、org域名等主流域名,现在比较流行的王域名和顶级域名,都是值得注册和投资的。

PHP 到底排第几?TIOBE 排行榜来证明!

面试官:“最后再写道算法吧,就用单链表做个加法...”

Java 14 都快来了,为什么还有这么多人固守Java 8?

网站页面结构改版,仅是页面样式发生变化,不会对排名、收录有影响;只有涉及到页面URL改变,才会对网站排名、收录有影响。

Spring Boot异步请求和异步调用,一文搞定!

不是高级码农也没事,五招帮您提高网站性能

Java中GC原理及GC日志剖析