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来获取该错误的修复程序.

dawei

【声明】:丽水站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章