6

デフォルト構成で実行されているmyisam専用の32GBRAMmysqlサーバーがあります。テーブルのロックを回避するために、エンジンタイプを1つのテーブルのInnoDBに変更したいと思います。5,000万件のレコードがあり、ディスク上のサイズは約15GBです。私はmysqlバージョン5.5を使用しています。次のオプションを追加してmysqlを再起動する必要があると思います。

innodb_buffer_pool_size=1G
innodb_log_file_size=100M
innodb_file_per_table=1

エンジンタイプを変更する際に他に何が必要と考えられますか?

4

2 に答える 2

17

実際には、各テーブルを変換するコマンドを実行します。

最初にテーブルを並べ替える方が速くなります。

ALTER TABLE tablename ORDER BY primary_key_column;

次に、alterコマンドを実行します。

ALTER TABLE tablename ENGINE = INNODB;

テーブルが非常に大きい場合は時間がかかることがあり、CPUを大量に使用します。

于 2012-04-06T04:50:16.023 に答える
7

まず、データベースがInnoDBエンジンをサポートしているかどうかを確認します(サポートされていると思います;)):

SHOW ENGINES\G

その場合、デフォルトのinnodb関連のパラメーターがすでに配置されているので、次のように確認してください。

SHOW VARIABLES LIKE '%innodb%'

それらを理解し、特定のニーズに合わせて変更してみてください。デフォルトのパラメーターを使用している場合でも、InnoDBテーブルをいじくり回すことができます。

InnoDBテーブルのみを作成する場合は、現在のセッションのデフォルトのストレージエンジンを、次のコマンドで変更するか、デフォルトのストレージエンジンオプションSET storage_engine=INNODB;を使用して構成で変更できます。

ちなみに、テーブルをInnoDBに変換する最速の方法は、上記の方法ではありません。データを挿入するだけで、次のようにしてテーブルをInnoDBに変換できます。

CREATE TABE new AS SELECT * FROM old WHERE 1<>1;
ALTER TABLE new ENGINE = INNODB;
INSERT INTO new SELECT * FROM old;

もちろん、必要なインデックスを手動で追加する必要がありますが、通常は、ALTER TABLE ...少し大きいテーブルに比べて時間(および労力)を節約する価値があります。

于 2012-04-06T06:23:12.593 に答える