BLCL的博客小馆

标签 · 数据库结果集客户端缓存

首页

关于

归档

MySQL 大表查询内存溢出Python 生成器 yield 内存泄漏ThreadPoolExecutor 任务队列积压SSCursor 流式游标使用数据库结果集客户端缓存Python 信号量限流控制并发线程池无界队列内存爆炸生产者消费者背压实现MySQL 百万级数据批量处理优化Python 多线程数据迁移内存优化ThreadPoolExecutor shutdown 死锁问题数据库连接池与游标类型选择

Python脚本使用yield与线程池处理MySQL300万行数据查询内存飙升优化

前段时间处理一个数据批量更新任务,需要从 MySQL 表中读取大约 300 万条记录,经过一系列逻辑处理(调用外部 API 更新标签)后写回。为了控制资源,我使用了 ThreadPoolExecutor 配合生成器逐条产出数据,期望做到“边读边处理”,避免一次性加载全部结果集。 然而上线后观察监控,发现 Python 进程的内存占用随着迭代不断攀升,最终几乎吃满机器内存,导致 OOM 风险。最初直觉是 yield 没有真正实现流式,或者数据库驱动缓存了全部结果,但深入排查后发现事情没那么简单。 初始代码结构 简化后的核心代码如下: from mysql.connector.pooling import MySQLConnectionPool dbpool = MySQLConnectionPool() def..

更多