私はテスト用に約5億行のガベージデータをデータベースに挿入しようとしています。今私はいくつかのSELECT/INSERT
ステートメントをそれぞれTRANSACTION
の中にループしているPHPスクリプトを持っています - これは明らかに最適な解決策ではありません。テーブルはInnoDB(行レベルのロック)です。フォークMySQL INSERT INTO(InnoDB)
私は(適切に)プロセスをフォークすれば、これがINSERT
プロセスのスピードアップになるのでしょうか?それが完了するまでには140時間かかります。私は2つのことが心配です:
INSERT
文が書き込みロックを取得しなければならない場合は、複数のプロセスが同時に同じテーブルに書き込むことができないので、それは、役に立たないフォークレンダリングされますか?SELECT...LAST_INSERT_ID()
(内はTRANSACTION
)です。複数のプロセスがデータベースに入っているときにこの論理は破損しますか?私は各フォークに対して新しいデータベース接続を作成することができたので、これが問題を回避することを願っています。いくつのプロセスを使用する必要がありますか?クエリ自体はシンプルで、私は2GBのRAMを持つ通常のデュアルコアの開発ボックスを持っています。私はInnoDBを8つのスレッド(
innodb_thread_concurrency=8
)を使用するように設定しましたが、8つのプロセスを使用しなければならないかどうか、またはこれがマッチングについて考える正しい方法であるかどうかはわかりません。
ありがとうございました!
詳細な対応をありがとうございます!懸念することはあまりないことを知ってうれしい。 – ash