MySQL用户创建的临时表已满

时间:2013-10-11 00:36:06

标签: mysql memory temp-tables

我使用内存引擎创建了一个临时表,如下所示:

CREATE TEMPORARY TABLE IF NOT EXISTS some_text (
    id INT DEFAULT 0,
    string varchar(400) DEFAULT ''
) engine = memory;

当我在其中插入行时,我遇到#1114错误,因为表已满。它在mysql文档中解释了更改tmp_table_sizemax_heap_table_size没有做任何事情来增加用户创建的临时表的大小,这是我认为我在这里。如何让这张桌子更大?

我希望能够通过调用SET动态执行此操作,但我已尝试设置tmp_table_sizemax_heap_table_size并且它们都远远超出了我期望的数据量在这张表中。那么有谁知道如何在这个表上解决这个错误?感谢任何帮助过的人。

2 个答案:

答案 0 :(得分:10)

max_heap_table_size是对使用MEMORY存储引擎的任何表(临时或其他)的大小的限制。您必须增加此配置选项以在表中存储更多数据。

答案 1 :(得分:3)

在MySQL中,默认情况下,使用内存引擎创建的临时表可以快速增长超过 max-heap-table-size tmp-table-size <的16mb限制因为每行分配的内存比通常需要的多。在您提供的示例中,VARCHAR(400)将根据最大字符串大小而不是数据的实际大小来分配内存。每个字符可能需要超过1个字节才能存储。假设每行需要2kb,那么只需要8k行就可以达到极限。

对于许多应用程序,可以使用 ROW_FORMAT = DYNAMIC 解决此问题,如下所述:

http://www.percona.com/doc/percona-server/5.5/flexibility/improved_memory_engine.html