【问题标题】:Memory capacity for 'range optimizer max mem_size' exceeded超出“范围优化器最大内存大小”的内存容量
【发布时间】:2018-10-20 17:27:35
【问题描述】:

我正在使用 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 的内存容量为 8388608 字节 mem_size' 超出。没有为此查询进行范围优化。

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

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

【问题讨论】:

  • 您是否将“获取大小”设置为默认值以外的值?也许它试图一次加载所有行。
  • @TheImpaler 没有,有 maxrows=1

标签: python mysql sql python-3.x


【解决方案1】:

SET GLOBAL range_optimizer_max_mem_size=0;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多