【发布时间】:2015-05-13 08:52:34
【问题描述】:
我们有两台服务器,最新的将替换最旧的。它们在性能方面几乎相同,除了单个查询。两个不同服务器中的相同查询(相同的数据库定义、相同的数据、刚刚从头开始重建的索引)在最新实例中需要更多时间。
这两个计划是相同的,而且非常简单:
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.2 毫秒。在新服务器和旧服务器中都是如此。但是旧服务器中的时间是 30 毫秒,新服务器中的时间是 200 倍(2.2 秒 vs 30 毫秒)
什么会导致这种差异? postgresql 文档说,在 select 语句中,总运行时间和时间应该几乎相同......
谢谢
【问题讨论】:
-
您是否分析或清理了相关表格?
-
是的,两者都有。顺便说一句,该表是从另一台服务器中的一个转储创建的,因此从一开始它就应该是最佳的。
标签: postgresql sql-execution-plan