- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我在使用 postgres_fdw 时遇到了一些问题。 CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw
使用 postgres_fdw,我需要在指定模式中创建外部表以防止名称冲突。为了隔离我一直遇到的问题,我在同一集群上设置了两个测试 postgres 数据库,import_test 和 export_
我写了这个 PostgreSQL 代码行,但是我有以下错误: ERROR: could not connect to server "server\sqlexpress" SQL state: 080
我有一个生产数据库“PRODdb1”,它有一个只读用户帐户。我需要查询(选择语句)这个数据库并将数据插入到名为“RPTdb1”的辅助数据库中。我最初计划从我的选择中在 PRODdb1 中创建一个临时表
我有两个数据库设置为同一个 Postgresql 9.4 数据库集群的一部分,我正在尝试使用 postgres_fdw 从另一个数据库访问其中一个中的表。我已将其全部设置好并以 super 用户身份工
我正在使用两个 PostgreSQL 9.6 数据库,并尝试使用 postgres_fdw 从另一个数据库查询一个数据库(一个是具有数据的生产备份数据库,另一个是用于进行各种分析的数据库)。 虽然查询
这是我要运行的查询 - 让我运行此查询的当前数据库是 db1,而我要插入记录的数据库是 db2。 insert into db2.employee(id, name, group) values(
如前所述here postgres_fdw 无法访问索引。 解决方法是在远程服务器上创建一个 View ,然后在本地服务器上为该 View 创建外部表包装器。 但是如果我想将参数传递给我的 View
我的想法是我有一个名为 northwind 的本地数据库,并且使用 postgres_fdw 我想连接本地主机上另一个名为 test 的数据库(远程连接模拟,比如当我的数据库中的表被更新时,在其他数据
我正在尝试使用 Azure DB for PostgreSQL 实例中的 PostgreSQL 外部数据包装器 (postgres_fdw) 扩展。应支持外部数据包装器,如 Azure DB for
我正在尝试使用 PostgreSQL Maestro 工具将来自“本地”数据库的外键引用到另一个数据库中的另一个主键(实际上,它们都在同一台远程机器上)。我听说过 postgres_fdw 模块可以创
(警告道歉和骇客入侵...) 背景: 我有一个遗留应用程序,我想避免重写它的大量 SQL 代码。我正在尝试加快它执行的特定类型的非常昂贵的查询(即:容易实现的成果)。 它有一个由 transactio
我有一个用例,将数据分布在许多服务器上的许多数据库中,所有这些都在 postgres 表中。从任何给定的服务器/数据库,我可能需要查询另一个服务器/数据库。查询非常基本,标准选择在标准字段上带有 wh
可以使用 postgres_fdw 通过 ssh 隧道连接吗? 数据库只能从数据库服务器访问,我需要从另一个远程服务器加入。数据库服务器使用 SSH key 登录。 如果可以,请问怎么做? 最佳答案
在 postgreSQL 9.5 中: 我有一个名为:sheetheight(由 file_fdw 创建)的外表和一个名为:dzlog(由 postgres_fdw 创建)的外表。 1- 为了连接外部
我在 RDS 中有两个 Postgres 9.3.5 实例,都在一个安全组中,允许来自安全组内的所有入站流量和所有出站流量。我正在尝试设置一个数据库,以便能够通过 postgres_fdw 从另一个表
我正在使用 postgres_fdw 连接到另一个 PostgreSQL 数据库。有时查询的性能很好,但有时查询可能会花费异常长的时间。我遇到了一个问题,如果我使用函数 CURRENT_DATE,查询
假设我有这样的查询 select * from remote_table join local_table using(common_key) 其中 remote_table 是一个带有 pos
从 PostgreSQL 10.x 开始,外部表支持聚合下推。 我注意到 sum 和 count 操作被推送到远程服务器,但 min 和 max 的推送方式不同。 select min(col) f
我是一名优秀的程序员,十分优秀!