mysqldb查询大量数据
程序员文章站
2022-05-27 22:40:36
...
最近线上遇到一个问题,python定时任务运行到一半时就因为OOM被kill退出。
程序主要是利用MySQLdb插件导出db流水数据,流水数据比较大,有430w条记录,因此分多次加载数据。
db = MySQLdb.connect(host, user, pwd, db, port) curs = db.cursor() # 由于数据较大,不能通过fetchall()一次性读取 rec = curs.fetchone() while rec: print rec rec = curs.fetchone()
但是做了上述优化后,脚本仍然会因为OOM被kill。gdb调试发现程序在不停的读数据,不是应该通过cursor每次一条条读取吗?
MySQLdb提供了四种游标:
- Cursor/DictCursor 默认Cursor,将结果存储成Tuple; 两者都是将数据缓存到Client侧,然后从内存中fetch。
- SSCursor/SSDictCursor 实现在Server端存储数据,fetchone()时从服务端获取一条记录。
db = MySQLdb.connect(host, user, pwd, db, port, cursorclass=MySQLdb.cursors.SSCursor) curs = db.cursor()
上一篇: 数据分析之hive
下一篇: 支付宝接口的使用自己调用