postgresql 数据库 运用fdw 导致查询数度太慢

postgresql 数据库 运用fdw 导致查询数度太慢

这几天管理数据库发现 有几张使用fdw建的一张表由于数据量太大,导致查询速度从20秒变成1000多秒,由于不是在同一个数据库 只能用fdw进行连接,由于原表数据量太大 还是普通表

原因分析

怀疑是fdw传输的问题 由于原表数量大导致的传输慢的问题

解决方案

一创建视图加以限制
跟业务那边 讨论发现部分表不需要全部的数据,只需要最近几天的数据 ,决定在原先表所在的模式下的建立视图 ,只取最近的几天的数据

CREATE VIEW sss as
 SELECT id
.........................................
   FROM ‘表名’
  WHERE (commit_date >= ((now())::date + '-10 days'::interval))

在重新创建fdw的外部表 修改指定表 (从原表改为视图)

--创建外部服务器
-- 括号里的三个参数,分别是timescaledb的ip、端口和数据库名称

CREATE SERVER baba FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '0.0.0.0', port '5432', dbname 'hrmw');
--创建用户映射
-- 括号里的两个参数,分别是timescaledb数据库的用户名、密码
create user mapping for postgres server baba options(user 'postgres', password '数据库密码');
CREATE FOREIGN TABLE "public"."表名" (
  ...........  --字段
)
SERVER "baba" -- 外部链接名
OPTIONS ("schema_name" '模式名', "table_name" 'v_base_promise') --指定模式和视图
;

经过测试 修改后的查询只需要10秒左右

修改前

在这里插入图片描述

修改后
在这里插入图片描述
原先是利用fdw全部传输过来 在做筛选 ,现在是利用视图去取需要的数据 再利用fdw进行传输

二 把普通表改为分区表

把普通表改为分区 ,网上有很多介绍,这里就不写了 我给个链接pg数据库修改为分区表
把普通表改为分区 确实提高了效率

(未完待续)

猜你喜欢

转载自blog.csdn.net/yang_z_1/article/details/114867223