专栏名称: dbaplus社群
围绕Database、BigData、AlOps的企业级专业社群。资深大咖、技术干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙,每季度XCOPS\x26amp;DAMS行业大会。
目录
今天看啥  ›  专栏  ›  dbaplus社群

100G内存下,MySQL查询200G大表会OOM么?

dbaplus社群  · 公众号  · 互联网安全  · 2025-07-15 07:15
    

主要观点总结

本文解释了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的淘汰策略,全表扫描对内存的影响可控。但在业务高峰期,仍需要避免在线上主库执行全表扫描。


免责声明

免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址:访问原文地址
总结与预览地址:访问总结与预览
推荐产品:   推荐产品
文章地址: 访问文章快照