首页 > 解决方案 > 超出“范围优化器最大内存大小”的内存容量

问题描述

我正在使用 Python 连接到 MySQL,如下所示:

    db = MySQLdb.connect(host="localhost", user="****", passwd="****", db="****", charset='utf8')
    db.query(sql)
    result = db.use_result()
    event_data = result.fetch_row(maxrows=1, how=1)
    if event_data:
         event_data=event_data[0]

所以我不是一次获取所有结果,而是逐行获取,它使用更少的内存并且工作得更快。通常它工作正常,但我遇到了一个奇怪的错误:

3170, "'range optimizer max mem_size' 的内存容量超过了 8388608 字节。没有为此查询进行范围优化。

这很奇怪,因为结果大约是 500 000 行,并不是最大的,而且我正在逐行处理而不将其提取到 RAM 中,而且我以前从未遇到过这个错误。

我有一个很大的“ID in (*ID's LIST)”表达式,但如果查询太长,我会收到 OperationalError,我处理了几块 ID,从来没有问题。

标签: pythonmysqlsqlpython-3.x

解决方案


设置全局范围_优化器_max_mem_size = 0;

0 表示无限内存,您也可以在此处以字节为单位进行限制,例如 8388608


推荐阅读