私はMySQLを初めて使用しますが、MySQLについてはほとんど知りません。
私が直面している問題は以下のとおりです。
以前は、MySQLエンジンとしてMyISAMを使用するデータがあり、どのマシンにもインポートされるまでに約15分かかりました。ただし、エンジンをInnoDBに変更すると、どのマシンにもインポートされるまでに約90分かかります。親切に私に同じことを提案してください。
Innodbテーブルは、同時挿入の方が高速です。Innodbパフォーマンス最適化の基本を参照してください
INNODB
最高のパフォーマンスを得るには、ファイル内のエンジンを調整する必要がありmy.cnf
ます。
仮定すると、ファイルを次の4GB RAM
ように構成してみてください。my.cnf
#Innodb
innodb_buffer_pool_size = 1G
innodb_additional_mem_pool_size = 512M
innodb_log_file_size = 1G
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 30
innodb_file_per_table=1
innodb_file_format=barracuda
innodb_strict_mode=1
innodb_autoinc_lock_mode = 0
次に、MySQLサーバーを再起動します。
@Omeshにはいくつかの優れたヒントがあり、3600万行の4.5GBおよび5.0GBSQLの最新のインポートが成功した理由の一部だったと思います。他のいくつかの追加のヒントが役立つ1つの場所を取得したかったのです。
@OmeshMySQL構成の提案に従ってください。
次に、インポートしようとしている実際のSQLファイルを確認します。INSERT
データをダンプするために使用したツールは、ステートメントの直前に次の行を追加しました
。
/*!40000 ALTER TABLE `table_name` DISABLE KEYS */;
私がしたことは、その行のコメントを外すことでした。挿入中の主キーのチェックを無効にし、高速化を可能にします。その行がない場合は、手動で追加できます。
ALTER TABLE `table_name` DISABLE KEYS;
これがアクティブに使用されているライブデータベースである場合は注意してください。
INSERT
ステートメントの直後に、ツールもこの行を追加しました。コメントも削除して、主キーを再度有効にします。
/*!40000 ALTER TABLE `table_name` ENABLE KEYS */;
繰り返しますが、次のようになります。
ALTER TABLE `table_name` ENABLE KEYS;
挿入ステートメントを実際に実行する前に、、をオフautocommit
にunique_checks
しforeign_key_checks
て、クエリを実行します。
set autocommit=0; set unique_checks=0; set foreign_key_checks=0;
次に、インポートを実行します。
source /path/to/your/file.sql
インポートが正常に終了したら、コミットしてから再度有効にして、次の操作unique_checks
を行いforeign_key_checks
ます。
commit; set unique_checks=1; set foreign_key_checks=1;
考慮したいインポートを行うためのその他の考慮事項は次のとおりです。
仮想マシンを使用している場合は、インポートが完了するまで、VMで使用可能なリソース(RAM、CPUコア数)を増やします。
物理マシンを使用している場合は、インポートを完了するのに十分な時間、別のマシンからRAMを借りることができます。
可能であれば、2つの異なるディスクを使用します。1つは読み取り専用(SQLファイルのソース)、もう1つは書き込み専用(DBまたはVMが存在する場所)です。
これが他の誰かに役立つことを願っています!