MySQL删除千万级数据量导致的慢查询优化有人删了千万级的数据mysql删除慢怎么优化 , 结果导致频繁的慢查询 。
线上收到大量慢查询告警,于是检查慢查询的SQL,发现不是啥复杂SQL,这些SQL主要针对一个表,基本都是单行查询,看起来应该不会有慢查询 。这种SQL基本上都是直接根据索引查找出来的,性能应该极高 。
是否可能慢查询不是SQL问题,而是MySQL生产服务器的问题?特殊情况下,MySQL出现慢查询还真不是SQL问题,而是他自己生产服务器的负载太高,导致SQL语句执行慢 。比如现在MySQL服务器的
磁盘I/O负载高,每秒执行大量高负载的随机I/O,但磁盘本身每秒能执行的随机I/O有限,导致正常SQL在磁盘执行时,若跑一些随机IO,你的磁盘太忙,顾不上你了,导致你本来很快的一个SQL,要等很久才能执行完毕,这时就可能导致正常SQL也变成慢查询 。
也许网络负载高,导致你一个SQL语句要发到MySQL,光是等待获取一个和MySQL的连接,都很难 , 要等很久或MySQL自己网络负载太高,带宽打满,带宽打满后,你一个SQL也许执行很快,但其查出来的数据返回给你,网络都送不出去,也会变成慢查询 。
若CPU负载过高,也会导致CPU过于繁忙去执行别的任务,没时间执行你的SQL 。
所以慢查询不一定是SQL本身导致,若觉得SQL不应该会慢查询,结果他那个时间段跑这个SQL 就是慢,应排查当时MySQL服务器的负载,尤其看看磁盘、网络及 CPU 的负载,是否正常 。
当某个离线作业瞬间大批量把数据往MySQL里灌入的时 , 他一瞬间服务器磁盘、网络以及CPU的负载会超高 。
此时你一个正常SQL执行下去,短时间内一定会慢查询,类似问题,优化手段更多是控制你导致MySQL负载过高的那些行为,比如灌入大量数据,最好在业务低峰期灌入,别影响高峰期的线上系统运行 。
但看了下MySQL服务器的磁盘、网络以及CPU负载,一切正常,似乎也不是这问题导致 。看起来无解了?
慢 SQL 的头两步排查手段:
这两种办法都不奏效之后,第三步:用MySQL pro?lling工具去细致的分析SQL语句的执行过程和耗时 。
这个工具可以对SQL语句的执行耗时进行非常深入和细致的分析
打开pro?ling,使用
接着MySQL就会自动记录查询语句的pro?ling信息 。此时若执行show pro?les , 就会给你列出各种查询语句的pro?ling信息 , 会记录下来每个查询语句的query id,所以你要针对你需要分析的query找到对他的query id,mysql删除慢怎么优化我们当时就是针对慢查询的那个SQL语句找到了query id 。
然后针对单个查询语句,看其pro?ling信息,使用show pro?le cpu, block io for query xx,这里的xx是数字,此时就可以看到具体的pro?le信息 。
除了cpu以及block io以外,还能指定去看这个SQL语句执行时候的其他各项负载和耗时 。
会给你展示出来SQL语句执行时候的各种耗时,比如磁盘IO的耗时,CPU等待耗时,发送数据耗时,拷贝数据到临时表的耗时等 , SQL执行过程中的各种耗时都会展示 。
检查该SQL语句的pro?ling信息后 , 发现问题,其Sending Data耗时最高,几乎使用1s , 占据SQL执行耗时的99%mysql删除慢怎么优化!其他环节耗时低可以理解,毕竟这种简单SQL执行速度真的很快,基本就是10ms级别 , 结果跑成1s,那肯定Sending Data就是问题根源!
这Sending Data在干啥呢?
MySQL官方释义:为一个SELECT语句读取和处理数据行 , 同时发送数据给客户端的过程,简单来说就是为你的SELECT语句把数据读出来,同时发送给客户端 。
推荐阅读
- 闪艺经营游戏,闪艺游戏有哪些
- 声卡显卡驱动怎么丢了,声卡显卡驱动怎么丢了呢
- 珠海游戏动作捕捉,动作捕捉 游戏
- 如何认证电商公司,如何认证电商公司资质
- Python先学函数 python函数菜鸟教程
- 关于军事文章的公众号,军事题材公众号
- 毕业设计引用网络文献可以吗,毕业设计引用网络文献可以吗知乎
- postgresqlwhile事务的简单介绍
- c语言基本字符函数 c语言字符函数应用