Postgresql
DBEaver 與 PG 管理員
當我使用 Pg Admin 工具在 Postgres 數據庫中執行查詢時,它只用了 2 秒(我可以看到計劃中使用的並行工作人員)但是當我在 DBeaver 中執行相同的查詢時,大約需要 3 分鐘才能完成(計劃不同,我看不到並行工作人員被呼叫。誰能解釋為什麼這些工具的差異?驅動程序是否導致不同的計劃和執行時間?PG Admin 用於連接 Postgres 數據庫的驅動程序是什麼?.
不知道 DBeaver,我只能猜測:它使用游標來處理語句結果。這有兩個後果:
查詢可能會在執行期間暫停。在系統認為可能發生部分或增量執行的任何情況下,都不會生成並行計劃。例如,使用創建的游標
DECLARE CURSOR
永遠不會使用並行計劃。
cursor_tuple_fraction
(floating point
)設置計劃者對將被檢索的游標行的分數的估計。預設值為 0.1。此設置的較小值會使規劃器傾向於使用游標的“快速啟動”計劃,這將快速檢索前幾行,而可能需要很長時間才能獲取所有行。較大的值更加強調總估計時間。在最大設置為 1.0 時,游標的計劃與正常查詢完全相同,只考慮總估計時間,而不考慮第一行的傳遞時間。
我確實相信 Laurenz Albe 的診斷是正確的,但至少對第 11 頁的我來說,設置
cursor_tuple_fraction = 1.0
並沒有導致從 DBeaver 啟動的查詢的並行計劃。但是起作用的是將DBeaver中的 ResultSet 獲取大小設置為 0。請注意,DBeaver 將使用此設置獲取每個查詢的所有結果,因此limit N
當您只需要一些結果時,您可能需要在查詢中更多地使用.