欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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()

 

 

 

 

 

 

相关标签: MySQLdb cursor