1

私は大量のインポートを行うプロジェクトに取り組んでいます。私の場合は、20列のデータを含む約20000行を意味し、途中でエラーが発生した場合にデータがインポートされないようにするための自家製の安全でないソリューションを計画していました。

使用するデータの量を考慮すると、MySQLトランザクションはこの目的には適さないと想定しました。念のために、私はそれをテストしました。インポートの前にトランザクションを開始し、インポートを終了してコミットします。commitステートメントでは、インポート中に顕著なメモリやCPUを使用することなく、20000以上の行が数ミリ秒でテーブルにスムーズに挿入されます。

心を包むことができない!これはどのように作動しますか?制限はどこにありますか?TRANSACTIONのドキュメントをざっと読みましたが、ボンネットの下でどのように動作するかについての情報が見つかりません。私は確かにMySQLがいくつかのトリックを引っ張っていると思っているので、裏目に出た場合に注意する必要があります。

上記の段落に関する確かな情報があれば、どんな回答でも受け入れます

4

1 に答える 1

3

これは、redo_log_sizeと、もちろんハードウェアの仕様によってのみ制限されます。大規模なトランザクションを実行する場合(20.000は十分ですが、数百万のトランザクションは前代未聞ではありません)、inno_db_log_file_size =[256M以上のようなアクセス可能なファイルサイズ]が大規模に設定されていることを確認してください十分な数。

優れたmysqlperformanceblogに関するより有用な情報:http ://www.mysqlperformanceblog.com/2009/01/13/some-little-known-facts-about-innodb-insert-buffer/

于 2012-06-18T07:15:51.017 に答える