一尘不染

如何使mysql MEMORY ENGINE存储更多数据?

mysql

我想将表格从INNODB更改为MEMORY ENGINE。

所以我输入了以下命令:

alter table sns ENGINE=MEMORY;

然后MySQL显示

ERROR 1114 (HY000): The table '#sql-738_19' is full

该表的数据大小为1GB,我有8GB内存。

我检查了my.cnf,但找不到在哪里更改max_size设置。我不应该能够存储更多数据吗?


阅读 377

收藏
2020-05-17

共1个答案

一尘不染

您应该调整制作和加载桌子的方式

CREATE TABLE sns_memory SELECT * FROM sns WHERE 1=2;
ALTER TABLE sns_memory ENGINE=MEMORY;
INSERT INTO sns_memory SELECT * FROM sns;
DROP TABLE sns;
ALTER TABLE sns_memory RENAME sns;

这将绕过 tmp_table_size
max_heap_table_size
施加的任何限制。

同样,您需要做两件事:

将此添加到/etc/my.cnf

[mysqld]
tmp_table_size=2G
max_heap_table_size=2G

这将涵盖mysql重新启动。要立即在mysqld中设置这些值而不重新启动,请运行以下命令:

SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2;
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2;

如果您正在检查上述变量

SELECT @@max_heap_table_size;

要么

SHOW VARIABLES LIKE 'max_heap_table_size';

您可能会注意到,声明后它们似乎没有变化SET GLOBAL...。这是因为设置仅适用于与服务器的新连接。建立新连接,您将看到值更新,或者可以通过运行以下命令在会话中更改它:

SET tmp_table_size = 1024 * 1024 * 1024 * 2;
SET max_heap_table_size = 1024 * 1024 * 1024 * 2;
2020-05-17