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

标签 mysql memory

我想将一个表从 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 设置的位置。我不应该能够存储更多数据吗?

最佳答案

您应该调整制作和加载表格的方式

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... 语句之后它们似乎没有改变。这是因为这些设置仅适用于与服务器的新连接。建立一个新连接,您会看到值更新,或者您可以在 session 中通过运行来更改它:

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

关于mysql - 如何让 mysql MEMORY ENGINE 存储更多数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9842720/

相关文章:

c# - 崩溃: Attempted to read or write protected memory c#

javascript - HTML5 到 iOS 应用程序

mysql - MySQL中大表按范围分组

php - 选择、合并和输出购物 list 的 'select where in array' 查询的 mysql 结果

c - realloc 不是重新分配内存

java - 就内存使用而言,使用 float[] 数组还是 16 个 float 哪个更好?

c++ - malloc() 与 new[] 的内存开销

php - 如何在sql查询的select列中按字母顺序获取?

mysql - 从mysql中的xml中提取值

c - 在 C 中实现拼写检查器 : Valgrind reports memory errors