2011-01-27 6 views
1

私はPostgreSQLに基づいてデータウェアハウスを持っています。データウェアハウスのパフォーマンスをテストする最良の方法は?

これまでは、実際のデータベースのほんの一部を含むデータベースでクエリを実行しようとしていました。この小さなテスト・データベースで効率的な方法でクエリを書いたら、実際のクエリを実行します。

実際のデータベースでクエリを実行すると、実際のデータベースではメモリが不足し、インデックスや一時テーブルなどのディスクへの書き込みが開始されるという問題があります。つまり、テストデータベースと実際のデータベースで異なるクエリが最適になる可能性があります。これは、どのクエリが最適なものかを知るために、完了するまでに数分かかるクエリを実際に実行しなければならないということですか?

答えて

1

EXPLAINの出力を解釈する方法を学び、EXPLAINの出力が、クエリを実行する前に、大規模なデータベースの選択したクエリプランが期待どおりのものであることを確認します。

0

3つの質問

1)クエリはどのくらい複雑ですか?索引および一時表の生成は、索引付けされていない列に対する複雑な操作のために、サーバーがこれらのものを生成する必要があることを示しています。これはどれくらい可能性がありますか?あなたが報告したところから、 "複雑な"可能性のある回答と思われます。

2)返品セットの額はどれくらいですか?最終結果は100行または100万ですか?あなたが報告しているものから、答えは何でもかまいません。私はこの質問がそれほど重要ではないと考えていますが、少なくとも知っておくことは重要です。

3)質問1を別の言い方をすると、返された集合が小さい場合でも、途中でコンパイルしなければならない巨大な中間結果がありますか?繰り返しますが、ここでの答えは、複雑な中間結果が生成されていると思われます。

これは少なくとも、いくつかのものを索引付けする必要があることを示唆しています。おそらく、照会しようとしているものに近づくようにデータを構造化する必要があります。

もう1つ質問がありますが、これは重要なクエリの大半、または1つまたは2つのみのための広範な問題ですか?

回答に応じて編集:私はデータウェアハウスのクエリを終日行い、一部は10分ほどかかります。いくつかの時間がかかります。私はバックグラウンドの仕事にそれらを押しつけ、すべてを下げることを防ぐためにステージに分割します。それは非常に大きなデータセットを処理する性質です。

問題のクエリがに終わるかどうかを判断するために、元の回答の質問があります。あなたは離れて歩き回ったり、2日後に戻ったり、まだ実行されているほど多くの中間データを生成するクエリを無意識のうちに書くことができます。だから私は最初の3つの質問を述べていますが、実際にあなたの質問に完全に答える唯一の方法です。

要約:はい、クエリにはかなり時間がかかりますが、それは獣の性質です。あなたが望むことができる最高のものは、読み込まれるデータの量に比例したパフォーマンスです。処理する1億行があれば、秒ではなく数分かかるでしょう。しかし、もっと重要なのは、クエリーが100万行で4秒で実行され、1億行で400秒(1時間のように)かかる場合、私が尋ねたオリジナルの質問は、なぜ、それらのクエリ。

+0

私はどのようにクエリを最適化するかについて質問していません、私はそれをテストする方法を尋ねています。私は、任意のクエリ、複雑な、単純な、大きな戻り値セット、小さな戻り値セット、大きな中間結果、小さな中間結果をテストできるようにしたい。数分間待たずにパフォーマンスをテストするにはどうすればよいですか? – David

関連する問題