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