mysql – 我可以确定或限制允许使用的内存查询量

前端之家收集整理的这篇文章主要介绍了mysql – 我可以确定或限制允许使用的内存查询量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在运行一个创建临时表的查询但是限制为64mb并且由于访问权限等原因我无法更改限制.当选择大日期范围时,临时表空间不足并导致mysql错误.

无论如何我可以在尝试运行查询之前确定查询将使用的内存大小或数量,这样我可以优雅地避免上述问题吗?

最佳答案
除了在基本SQL查询查询较少的行数外,无法直接限制临时表的大小.

您能否更具体地了解您所看到的错误MySQL临时表可以在内存中存在,直到tmp_table_sizemax_heap_table_size中的较小者.如果临时表较大,MysqL会将其转换为磁盘上的临时表.

这将使临时表比内存存储慢很多,但除非you have no space available in your temp directory,否则不会导致错误.

除临时表存储外,还有很多ways MySQL uses memory.您可以调整其中许多变量,但这与对查询使用的内存设置限制不同.

错误1114表示您的空间不足.如果它是磁盘上的InnoDB表,这可能意味着您有一个ibdata1文件没有为表空间定义autoextend.对于内存表,这意味着您达到了max_heap_table_size的限制.

由于您无法更改max_heap_table_size,因此您可以选择减少一次放入表中的行数,或者使用磁盘上的临时表而不是内存.

使用MysqL主要版本的最新版本也要小心.我发现bug 18160报告MysqL计算表大小不正确的堆表(用于内存临时表).因此,例如,确保您至少使用MysqL 5.0.23或5.1.10来获取错误的修复程序.

猜你在找的MySQL相关文章