主要观点总结
本文解释了MySQL在进行全表扫描时,对DB主机内存以及InnoDB引擎内存的影响。文章详细阐述了全表扫描对server层的影响,包括服务端处理流程、内存使用和发送数据的流程。同时,也解释了全表扫描对InnoDB的影响,包括InnoDB的内存作用、Buffer Pool的管理以及改进的LRU算法等。
关键观点总结
关键观点1: 全表扫描对server层的影响
MySQL在进行全表扫描时,服务端不会保存完整的结果集,而是边读边发。如果客户端接收得慢,会导致MySQL服务端由于结果发不出去,事务执行时间变长。因此,服务端发送阻塞时,需要调整net_buffer_length参数。
关键观点2: 全表扫描对InnoDB的影响
InnoDB使用Buffer Pool(BP)来加速查询和更新。全表扫描会淘汰BP中的当前数据,存入扫描过程中访问到的数据页的内容,可能导致BP内存命中率急剧下降,磁盘压力增加,SQL语句响应变慢。但InnoDB对LRU算法进行了改进,通过区分New区和Old区,以及对数据页的访问时间判断,能够在全表扫描时保证Buffer Pool对正常业务查询的命中率。
关键观点3: 小结
全表扫描虽然会消耗一定的IO资源,但不会导致内存暴涨。由于MySQL的边算边发逻辑和InnoDB的淘汰策略,全表扫描对内存的影响可控。但在业务高峰期,仍需要避免在线上主库执行全表扫描。
免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。
原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过
【版权申诉通道】联系我们处理。