9

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

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并且它们都远远超出了我在此表中预期的数据量。那么有谁知道如何解决这个表上的这个错误?感谢任何提供帮助的人。

4

2 回答 2

13

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

于 2013-10-11T00:48:45.947 回答
3

在 MySQL 中,默认情况下,使用内存引擎创建的临时表可以快速增长到超过max-heap-table-sizetmp-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

于 2015-05-07T17:25:27.490 回答