我們有兩個服務器,最新的將取代最老的一個。除了單個查詢之外,它們在性能上幾乎相同。在兩個不同的服務器(相同的數據庫定義,相同的數據,僅從頭開始重建的索引)中的相同查詢花費了更多時間在最新的實例中。緩慢的查詢與良好的計劃
這兩個計劃都是相同的,並且qwery很簡單:
Nested Loop (cost=0.00..17.83 rows=1 width=2262) (actual time=0.032..0.032 rows=0 loops=1)
Buffers: shared hit=3
-> Index Scan using psan_para_fk_ix on parasetana a0 (cost=0.00..9.48 rows=1 width=1735) (actual time=0.030..0.030 rows=0 loops=1)
Index Cond: (((ca)::text = 'r'::text) AND (idp = 36678502::numeric))
Filter: (flg = '1'::bpchar)
Buffers: shared hit=3
-> Index Scan using seta_pk on seta a1 (cost=0.00..8.33 rows=1 width=527) (never executed)
Index Cond: (((a1.ca)::text = 'r'::text) AND (a1.idgrla = a0.idgrla) AND (a1.prog = a0.prog_set))
Filter: (a1.flgp = '0'::bpchar)
Total runtime: 0.153 ms
(10 rows)
時間:2217.074毫秒
正如你所看到的,總的運行時間爲0.2ms。新舊服務器都是如此。但在舊服務器中的時間是30ms,在新的服務器中是200倍(2.2秒比30毫秒)
什麼會導致這種差異? PostgreSQL的醫生說,在select語句總運行時間和時間應該是幾乎一樣的...
感謝
您是否分析過或清理過有問題的表格? – ntalbs
是的,都是。表btw是從另一個服務器中的轉儲創建的,所以它應該從一開始就是最佳的。 – Wishper