web-dev-qa-db-ja.com

EXPLAINコストを(実時間)ランタイムに変換するための適切な「経験則」はありますか?

私のデータベースプロセスの利用者は、特定のタスクがいつ実行されるかを見積もることを時々求めます。ほとんどのデータベースエンジンでEXPLAINを読み取る方法を知っているように感じますが、これを「15分後にもう一度質問する」に変換しようとすると問題が発生します。特定のデータベースに使用するのに適した「経験則」を知っている人はいますか?

これは難しいルールではないことは理解していますが、球場の数字を表示できることでさえ、場合によっては役立つ可能性があります。

7
TML

コストベースのオプティマイザーはすべて、さまざまな独自のアルゴリズムを介して機能します(または、オープンソースデータベース用に読み取ることができます)が、通常、参照操作に値1を割り当てることで機能します。たとえば、SQL Serverでは、コスト見積もりが1は、レドモンドの開発者のデスクの下にある参照コンピューターで1/320秒かかります。コストは、クエリのコストの相対的な推測にすぎません。多くのRDBMSは、優先順位を確立する際、またはデッドロックの場合はより安価なクエリを強制終了するためにこのコストを使用します(再実行にかかる時間は短くなります)。ただし、これはすべて、クエリの実行時にクエリオプティマイザが自由に使用できる情報に基づく推測にすぎません。

Peterは正解です。期待できる最善の方法は、理想的なシナリオでいくつかのベンチマーククエリを実行し、それらを使用して最良の推測を行うことです。 RDBMSではさまざまな競合ポイントに対処する必要があるため、特定のクエリが実際の世界でどのように実行されるかを具体的に判断することは困難です。

6

これはあなたが想像する方法では不可能だと思います。重要な理由の1つは、実際の実行時間はハードウェアに大きく依存し、データベースエンジンが行う最適化の決定の多くは、さまざまなハードウェアコンポーネント(ディスク、メモリ、CPUなど)の使用のバランスを効果的にとることです。

アプリケーションに関連する一連のクエリを実行し、コストの見積もりと実行時間を記録して、そのデータを理解するようにすることをお勧めします。あなたは素晴らしい線形関係を得るかもしれません、あるいはあなたはコスト数がこの目的のために無価値であることを学ぶかもしれません。

6