web-dev-qa-db-ja.com

mysql MEMORY ENGINEにより多くのデータを保存させる方法は?

テーブルを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設定を変更する場所が見つかりませんでした。より多くのデータを保存できませんか?

34
Bing Hsu

テーブルの作成方法とロード方法を調整する必要があります

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

同じように、2つのことを行う必要があります。

これを/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;
73
RolandoMySQLDBA

max_heap_table_size はあなたが探しているものです

8
Cez

それでも問題が解決しない場合は、テーブルが占有するディスク容量は多くの場合、メモリ要件よりも少ないことに注意してください。長さ8の文字列でVARCHAR(256)を使用すると、ディスクで8バイトを消費しますが、STORAGEは動的行をサポートしないため、インスタンスごとに256バイトすべてをメモリに予約します。

2
Tom Donnelly

増加する max_heap_table_size

2
Karoly Horvath