我使用内存引擎创建了一个临时表,如下所示:
CREATE TEMPORARY TABLE IF NOT EXISTS some_text (
id INT DEFAULT 0,
string varchar(400) DEFAULT ''
) engine = memory;
当我在其中插入行时,我遇到#1114错误,因为表已满。它在mysql文档中解释了更改tmp_table_size
和max_heap_table_size
没有做任何事情来增加用户创建的临时表的大小,这是我认为我在这里。如何让这张桌子更大?
我希望能够通过调用SET动态执行此操作,但我已尝试设置tmp_table_size
和max_heap_table_size
并且它们都远远超出了我期望的数据量在这张表中。那么有谁知道如何在这个表上解决这个错误?感谢任何帮助过的人。
答案 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