1

行数が 1 000 000 から 50 000 000 までのテーブルを含む MySQL (InnoDB) データベースがあります。夜間には、情報をカウントしてレポート テーブルに書き込む集計ジョブがあります。

最初のジョブの実行は非常に高速です。すべてのクエリは 100 ミリ秒から 1 秒の間に実行されます。その後、ほぼすべてのクエリが非常に遅くなります。

クエリの例は次のとおりです。

SELECT count(*) FROM tableA 
  JOIN tableB ON tableA.id = tableB.tableA_id

そのクエリの実行計画は、両方のテーブルのインデックスが使用されることを示しています。

重要なことは、CPU、I/O、メモリの使用率が非常に低いことです。MySQL サーバーのバージョン: デフォルト設定の 5.5.28 (Windows 7 開発者コンピューターにインストールされたばかり)。

4

2 に答える 2

0

おそらく、実際にはクエリではなく、レポート テーブルへの書き込みが遅いためです。私は2つのことを試します:

  • レポート テーブルのinsertのパフォーマンスを測定するupdate
  • ジョブを並べ替えます。遅いジョブを前に持って行き、最初のジョブが速いか、最初に実行されるジョブが速いかを確認します
于 2012-11-05T12:26:31.667 に答える
0

提供された情報から判断するのは困難です。EXPLAIN などを行ったことがあると思います。以前の経験では、クエリの 1 つが突然遅くなり、特定のフィールドに突然大量のデータが入力されていることに気付きました。count(*) を使用する代わりに、count(tableA.id) を試してみてください。

これが役立つかどうかを確認するか、デバッグするための詳細情報を提供してください。

于 2012-11-05T09:53:28.803 に答える