7

私はMySQLを初めて使用しますが、MySQLについてはほとんど知りません。

私が直面している問題は以下のとおりです。

以前は、MySQLエンジンとしてMyISAMを使用するデータがあり、どのマシンにもインポートされるまでに約15分かかりました。ただし、エンジンをInnoDBに変更すると、どのマシンにもインポートされるまでに約90分かかります。親切に私に同じことを提案してください。

4

2 に答える 2

12

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サーバーを再起動します。

于 2012-09-11T05:16:05.160 に答える
2

@Omeshにはいくつかの優れたヒントがあり、3600万行の4.5GBおよび5.0GBSQLの最新のインポートが成功した理由の一部だったと思います。他のいくつかの追加のヒントが役立つ1つの場所を取得したかったのです。

  1. @OmeshMySQL構成の提案に従ってください。

  2. 次に、インポートしようとしている実際のSQLファイルを確認します。INSERTデータをダンプするために使用したツールは、ステートメントの直前に次の行を追加しました 。

    /*!40000 ALTER TABLE `table_name` DISABLE KEYS */;

    私がしたことは、その行のコメントを外すことでした。挿入中の主キーのチェックを無効にし、高速化を可能にします。その行がない場合は、手動で追加できます。

    ALTER TABLE `table_name` DISABLE KEYS;

    これがアクティブに使用されているライブデータベースである場合は注意してください。

  3. INSERTステートメントの直後に、ツールもこの行を追加しました。コメントも削除して、主キーを再度有効にします。

    /*!40000 ALTER TABLE `table_name` ENABLE KEYS */;

    繰り返しますが、次のようになります。

    ALTER TABLE `table_name` ENABLE KEYS;

  4. 挿入ステートメントを実際に実行する前に、、をオフautocommitunique_checksforeign_key_checksて、クエリを実行します。

    set autocommit=0; set unique_checks=0; set foreign_key_checks=0;

  5. 次に、インポートを実行します。

    source /path/to/your/file.sql

  6. インポートが正常に終了したら、コミットしてから再度有効にして、次の操作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が存在する場所)です。

これが他の誰かに役立つことを願っています!

于 2016-03-01T16:46:19.333 に答える