1

Apache Derby DB でパフォーマンス テストを行っているときに、いくつかの奇妙な動作に気付きました。

パフォーマンス テストのために 5 回テストを実行します。各実行の前に、テーブルにいくつかのデータを挿入します。たとえば、最初の実行ではテーブルに 500k タプルを使用し、2 回目の実行では 1000k のタプルを使用し、5 回目の実行では 2500k のタプルを使用します。

クエリの実行時間は次のようになります: 200ms、450ms、700ms、500ms、550ms

つまり、4 回目の実行では 3 回目の実行よりも高速ですが、4 回目の実行ではより多くのデータをスキャンして取得する必要があります。それは非常に奇妙です。

私が想像できる唯一の理由は、Derby が時々、またはテーブル内のデータが特定のしきい値を超えるとすぐに、いくつかの内部構造または物理レイアウトを最適化することです。とにかく、この最適化を手動でトリガーして、単調に非減少の実行時間測定値を取得できますか?

または、この動作の正確な理由を知っていますか?

前もって感謝します!

4

1 に答える 1

1

何が起こっているのかを理解するには、おそらくクエリ プランの出力を読む方法を学ぶ必要がありますが、とにかく推測してみましょう。行がテーブルに追加されると、Derby サーバーはテーブルのサイズが大幅に変更されたことを定期的に認識し、オプティマイザーがクエリ プランに使用する統計を自動的に再計算するため、まったく異なるクエリ プランが作成される可能性があります。

これを確認するには、データをロードするたびに自分で統計を再計算して、最適なクエリ プランを取得できるかどうかを確認してください: http://db.apache.org/derby/docs/10.8/tuning/ctunperfstatistics.html

于 2012-07-26T03:03:52.150 に答える