2017-12-04 19 views
0

500個の列と100,000個の行を含むVertica 8.1テーブルを使用しています。Verticaテーブルの列数はクエリのパフォーマンスに影響しますか?

次のクエリは、(任意のネットワーク遅延の問題を解消するために)まっすぐにVerticaクラスタノードのいずれかにVSQLクライアントを使用する場合でも、実行するのに約1.5秒かかります。

SELECT COUNT(*) FROM MY_TABLE WHERE COL_132 IS NOT NULL and COL_26 = 'anotherValue'

しかしチェックquery_requestsテーブル、request_duration_msはわずか98ミリ秒であり、resource_acquisitionsテーブルはリソース取得における遅延を示さない。私は残りの時間がどこで使われたのか理解できません。

次に、クエリで使用されている列のみを新しいテーブルにエクスポートして、この新しい小さいテーブルでクエリを実行すると、query_requestsテーブルで依然としてrequest_duration_msがわかります約98ms。

したがって、これらの列のほとんどが参照されていなくても、表の列の数は問合せの実行時間に影響するようです。私が間違っている ?もしそうなら、どうしてそうですか?事前

+1

500カラムテーブルのソート方法は?そして2列のバージョンはどうですか?あなたは説明の計画を共有していただけますか? – mauro

答えて

0

によって

おかげで、あなたのクエリがすべてのテーブルが含まれます(デフォルト)superprojectionに対して実行されているように聞こえます。 Verticaは(圧縮とエンコーディングが関連付けられた)列データベースであるにもかかわらず、クエリはおそらくまだ必要以上に多くのデータに触れているでしょう。

クエリを最適化するためにprojectionsを作成することができます。投影には列のサブセットが含まれます。クエリが必要とするすべての列を持つクエリが使用可能な場合、クエリはスーパープロジェクションの代わりにそのクエリを使用します。 (物理的な位置も要因ですので、それはa little more complicatedです。)Database Designerを使用すると、スキーマとサンプルクエリに基づいて初期投影を作成し、時間の経過と共に反復的に改善することができます。

+0

お返事ありがとうございました。私はテーブル構造が自動的に生成され、更新され、移入され、それに対して実行されるクエリを制御することができないので、このようにしたくないのですが、私は投影マニュアル作成を掘り下げなければならないと思います。 –

0

私はVertica 8.1.0-1を実行していましたが、パフォーマンスの低下を引き起こすVertica計画段階でVerticaのバグが問題だったようです。オプティマイザ - - この修正クエリ計画段階複雑なクエリのパフォーマンスを向上させ [https://my.vertica.com/docs/ReleaseNotes/8.1.x/Vertica_8.1.x_Release_Notes.htm]

VER-53602:それは> = 8.1.1のバージョンで解決しました。

関連する問題