テスト用に、データベースに約 5 億行のガベージ データを挿入しようとしています。現在、PHP スクリプトがいくつかのSELECT/INSERT
ステートメントをそれぞれ a 内にループしていますが、TRANSACTION
明らかにこれは最善の解決策ではありません。テーブルは InnoDB (行レベルのロック) です。
プロセスを(適切に)フォークするかどうか疑問に思っていますが、これによりプロセスがスピードアップしINSERT
ますか?このままだと140時間はかかります。次の 2 点が気になります。
ステートメントが書き込みロックを取得する必要がある場合
INSERT
、複数のプロセスが同時に同じテーブルに書き込むことができないため、フォークは役に立たなくなりますか?私は
SELECT...LAST_INSERT_ID()
(の中でTRANSACTION
)を使用しています。INSERT
複数のプロセスがデータベースに接続している場合、このロジックは壊れますか? フォークごとに新しいデータベース接続を作成できたので、これで問題が回避されることを願っています。いくつのプロセスを使用する必要がありますか? クエリ自体はシンプルで、2GB RAM の通常のデュアルコア開発ボックスを使用しています。8 つのスレッドを使用するように InnoDB をセットアップしました (
innodb_thread_concurrency=8
) が、8 つのプロセスを使用する必要があるかどうか、またはこれが一致について考える正しい方法であるかどうかはわかりません。
ご協力いただきありがとうございます!