2011-02-08 17 views
6

長時間実行しているplpgsqlストアド・プロシージャのパフォーマンスを向上させようとしていますが、プロファイリング・ツールがあれば、それがあれば何があるかわかりません。このような手順をプロファイリングする方法を提案する人はいますか?plpgsqlプロシージャのプロファイル方法

答えて

5

clock_timestamp()を含む手順から一部のnoticesを上げて、データベースの所要時間を確認します。そして、手順をできるだけシンプルにする。

例を教えてください。

+0

私は、プロシージャの変更を必要としないメソッドを望んでいましたが、それはおそらく何もないより優れています。 http://www.depesz.com/index.php/2010/03/18/profiling-stored-proceduresfunctions/にも同様の手順が記載されていますが、使用可能なデータを取得するのは非常に複雑です。このプロシージャは、Solrデータインポートハンドラクエリ用のドキュメントを作成するために使用されるネストされたループのセットです。 – Aneurysm9

+0

それは素晴らしい方法ではありませんが、それは唯一の方法です。そのため、短く簡単なことを保つことが重要です。ショートプロシージャは、他のコードと同様に、デバッグやプロファイルを行うのがずっと簡単です。 –

+0

残念ながら、この手順はほぼ可能です。いくつかのデータを選択し、nを反復し、より多くのデータを選択し、ネストされた1:nの関係を反復してから、完全な行が準備完了したら内部ループからRETURN NEXTを実行することによって、 SELECTやFORより複雑なものは、すでに他のプロシージャに入れられています。 – Aneurysm9

1

まず、logging of all statementsをPostgresログファイルに入れることができます。ログには、各ステートメントのランタイムが含まれます。これにより、最も遅いクエリを特定し、最適化しようとします。

フランクのポストにあなたのコメントを読んで、私はループがあなたの問題だと思います。ルーピングを取り除き、すべてを単一のクエリで実行してください。多くの行を読み取る文のほうが、ほんの数行しか読んでいない文よりも効率的です。

2

現在、この質問へのより良い答えを探している、そしてこのツールに出くわしています: http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/ でホストされている: https://bitbucket.org/openscg/plprofiler

それはあなたの合計時間を含めて、探しているものをあなたに与えると主張

関数の各行に費やされます。我々はまだそれを調査していないが、著者の主張に基づいて、我々は楽観的である。

関連する問題