ここ数日間、お客様の実稼働環境 (データベースは mysql 5.1) でのこのストアド プロシージャの実行時間は 30 ~ 40 分を超えているとのことです。このストアド プロシージャの実装を改善するには:
1. 2 つのテーブルのクエリ (ビジネス上のニーズにより、テーブルのサブクエリも含まれます) は、2 つのテーブルのデータにそれぞれ挿入されます。それぞれ 310W+、120W
2. 途中でさらに作業を行う必要があります。一時テーブルのデータ グループ by を別の一時テーブルに挿入します。3. 最後に、一時テーブルのデータ グループ by を挿入します。正式なテーブルに挿入したデータは 140W+
そして、ここ数日でパフォーマンスを最適化しました。私は道をどんどん遠くへ進み、あらゆる種類の方法を試し、あらゆる種類の苦労を経験しました。
さまざまな試み:
The table 'tmp_item_bu_parter_price' is fullと報告されているので、データ量が多すぎてメモリがバーストしているのでしょうか? 6 番目に、ロジックのさまざまな分岐にも従ったのですが、それらはすべて同じロジックに従っていることがわかりました。これは少し欠点です。私はこれについて以前長い間考えていましたが、最初に顧客の設定を調べませんでした。 7. マルチスレッド。 insert into ...select... の構文がストアド プロシージャで使用されており、where 条件にインデックスが作成されていないため、テーブル全体のロックが発生します。マルチスレッド テストの結果は間違いなくロック テーブルであり、一部のデータの実行は失敗します。 8. 論理的には、完全に挿入されるのではなく、段階的に挿入されますが、既存のデータは引き続き更新する必要があります。したがって、パフォーマンスはほぼ同じになるはずです。 パフォーマンスは主に数百万のデータを挿入することによって消費されます。今私は完全に途方に暮れており、どう対処してよいか分かりません。 【関連する推奨事項】1.
以上が3 日間のパフォーマンス チューニング中に遭遇した問題の一部を共有しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。