Pg Adminツールを使用してPostgresデータベースでクエリを実行すると、SECSは2つしかかかりません(プランで使用されている並列ワーカーを確認できます)が、DBeaverで同じクエリを実行すると、完了するまでに約3分かかりました(プランが異なり、並列ワーカーが呼び出されているのがわかりません。これらのツールの違いの理由を誰かが説明できますか?ドライバーが異なるプランと実行時間を引き起こしていますか?PG管理がPostgresデータベースに接続するために使用しているドライバーは何ですか? ?。
DBeaverがわからないので、推測できるのは、カーソルを使用してステートメントの結果を処理することだけです。これには2つの結果があります。
クエリは実行中に一時停止される可能性があります。部分的または増分的な実行が発生する可能性があるとシステムが判断する状況では、並列プランは生成されません。たとえば、
DECLARE CURSOR
を使用して作成されたカーソルは、並列プランを使用しません。
cursor_Tuple_fraction
(floating point
)取得するカーソルの行の割合のプランナの推定を設定します。デフォルトは0.1です。この設定の値を小さくすると、プランナはカーソルの「ファストスタート」プランを使用するようにバイアスされます。これにより、最初の数行がすばやく取得され、すべての行のフェッチに時間がかかる可能性があります。値が大きいほど、合計推定時間に重点が置かれます。最大設定1.0では、カーソルは通常のクエリとまったく同じように計画され、最初の行が配信されるまでの時間ではなく、推定合計時間のみが考慮されます。
ローレンツアルベの診断は正しいと思いますが、少なくとも11ページ目では、cursor_Tuple_fraction = 1.0
を設定しても、DBeaverから起動されたクエリの並列プランは作成されませんでした。しかしdidの作業では、DBeaverのResultSetフェッチサイズを0に設定していました。DBeaverはこの設定ですべてのクエリのすべての結果をフェッチするため、クエリでlimit N
をさらに使用する必要がある場合があります。結果の一部のみが必要な場合。