当前位置: 首页 > 面试题库 >

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

司空学智
2023-03-14
问题内容

我想将表格从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...。这是因为设置仅适用于与服务器的新连接。建立新连接,您将看到值更新,或者可以通过运行以下命令在会话中更改它:

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


 类似资料:
  • 现在,每次运行脚本时,我都会导入一个相当大的作为数据帧。有没有一个好的解决方案可以让数据帧在运行之间不断可用,这样我就不用花那么多时间等待脚本运行了?

  • 问题内容: 目前,我正在使用一项服务来执行操作,即从服务器检索数据,然后将数据存储在服务器本身上。 取而代之的是,我想将数据放入本地存储中,而不是将其存储在服务器上。我该怎么做呢? 问题答案: 这是我存储和检索到本地存储的代码的一部分。我使用广播事件来保存和恢复模型中的值。

  • 这是一个相当广泛的问题,不是特定于代码的。我正在寻找那些知道如何实施这一要求的人的意见 我正在构建一个音乐应用程序,人们可以在其中排队音乐对象。音乐对象看起来像 我非常想实现具有以下功能的相同的 即使在浏览器关闭时也能保持队列 检索任何队列(如果存在)的能力 能够洗牌,强制队列中对象的顺序播放 我对此非常陌生,所以不知道在哪里存储这些数据。请帮助我理解我需要学习什么来实现这一点。

  • 问题内容: 我已经搜索了很长一段时间,但对于如何实际保存其数字却一无所获。它们是字符数组吗?还有吗 以及如何将数据转换为? 从我发现的结果来看,我假设所有任意精度类(例如和)都将数据保存为字符数组。这实际上是这样吗?还是只是人们的猜测? 我之所以问是因为我一直在自己完成类似的实现,但是我不知道如何保存大于(不记得实际的数字)的数字。 提前致谢。 问题答案: 带着 从来源:

  • 我问这个是因为在redis网站上说,“小”哈希比几个键更好地存储几个值,但我不知道它是否仍然适用于真正的大哈希。

  • 来自标准::set_new_handler 每当内存分配尝试失败时,分配函数都会调用new-handler函数。它的预期目的有三个: 使更多内存可用 终止程序(例如,通过调用 std::terminate) 抛出类型 std::bad_alloc 或派生自 std::bad_alloc 的异常 以下超载保证会有什么影响吗?