Подтвердить что ты не робот

Как заставить mysql MEMORY ENGINE хранить больше данных?

Я хочу изменить таблицу из INNODB в MEMORY ENGINE.

Итак, я набрал эту команду:

alter table sns ENGINE=MEMORY;

Затем MySQL показывает

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

Размер данных для таблицы составляет 1 ГБ, а у меня 8 ГБ памяти.

Я проверил my.cnf, и я не нашел, где изменить параметр max_size. Разве я не могу хранить больше данных?

4b9b3361

Ответ 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;

Ответ 3

Увеличить max_heap_table_size.

Ответ 4

Если у вас все еще есть проблемы, помните, что пространство на диске, которое занимает таблица, часто меньше, чем потребность в памяти. Использование VARCHAR (256) с длиной строки 8 будет потреблять 8 байтов на диске, но поскольку STORAGE не поддерживает динамические строки, он резервирует 256 байт в памяти для каждого экземпляра.