gpt4 book ai didi

使用 CURRENT_DATE - 1 但不使用硬编码日期时,PostgreSQL postgres_fdw 在大型外部表上查询速度非常慢

转载 作者:行者123 更新时间:2023-12-05 07:14:25 27 4
gpt4 key购买 nike

我正在使用 postgres_fdw 连接到另一个 PostgreSQL 数据库。有时查询的性能很好,但有时查询可能会花费异常长的时间。我遇到了一个问题,如果我使用函数 CURRENT_DATE,查询需要大约 30 分钟,但如果我硬编码相同的日期,查询需要 1 秒。查看两个查询的 EXPLAIN ANALYZE,当我使用 CURRENT_DATE 时,它会扫描整个外部表,但是当我对日期进行硬编码时,它只会扫描它需要的行。就好像使用 CURRENT_DATE 不使用表索引,但对日期进行硬编码一样。但是,很难知道是否属于这种情况,因为 EXPLAIN ANALYZE 只是将这两个查询都列为“外部扫描”。为什么这两个查询的执行时间会如此不同?

这是我正在比较的两个查询:

SELECT *
FROM pjm.prices
WHERE pricedate = CURRENT_DATE - 1
ORDER BY pricedate, hour, node_id;
SELECT *
FROM pjm.prices
WHERE pricedate = '2020-01-24'
ORDER BY pricedate, hour, node_id;

这是分别来自每个查询的 EXPLAIN ANALYZE:

Sort  (cost=4620220.79..4621390.74 rows=467980 width=120) (actual time=2258506.411..2258509.528 rows=31752 loops=1)  
Sort Key: hour, node_id
Sort Method: quicksort Memory: 5196kB
-> Foreign Scan on prices (cost=100.00..4576146.22 rows=467980 width=59) (actual time=8737.505..2258486.086 rows=31752 loops=1)
Filter: (pricedate = (CURRENT_DATE - 1))
Rows Removed by Filter: 93563101
Planning Time: 107.264 ms
Execution Time: 2258547.132 ms
Sort  (cost=122729.63..122816.37 rows=34694 width=120) (actual time=1006.677..1009.733 rows=31752 loops=1)
Sort Key: hour, node_id
Sort Method: quicksort Memory: 5196kB
-> Foreign Scan on prices (cost=753.45..120113.29 rows=34694 width=59) (actual time=987.827..989.274 rows=31752 loops=1)
Planning Time: 108.424 ms
Execution Time: 1046.897 ms

我在 Ubuntu 18.04 服务器上运行 PostgreSQL 12.1。

如果您还有其他问题,请告诉我!

编辑:当我在本地使用 CURRENT_DATE 运行查询时忘记添加(因为我实际上登录到我的 fdw 连接到的数据库并从那里运行它),它只需要 1 秒。

最佳答案

我遇到了类似的问题并寻找了所有可能的选项,只需尝试对 FDW 查询中涉及的所有数据库进行 Vacuum 全面分析,然后再进行 FDW 相关查询。

关于使用 CURRENT_DATE - 1 但不使用硬编码日期时,PostgreSQL postgres_fdw 在大型外部表上查询速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59914646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com