L'utilisation de fdw dans la base de données postgresql entraîne un nombre de requêtes trop lent

L'utilisation de fdw dans la base de données postgresql entraîne un nombre de requêtes trop lent

Au cours des derniers jours, la base de données de gestion a constaté que plusieurs tables étaient créées à l'aide de fdw. En raison de la grande quantité de données, la vitesse de requête est passée de 20 secondes à plus de 1 000 secondes. Comme elle ne se trouve pas dans la même base de données, seul fdw peut être utilisé pour se connecter, car la table d'origine La quantité de données est trop grande ou une table normale

Analyse des causes

On soupçonne que le problème de la transmission fdw est lent en raison du grand nombre de tables originales.

Solution

Créez une vue pour la restreindre.
Discutez avec le côté commercial et constatez que certaines tables n'ont pas besoin de toutes les données, mais uniquement des données des derniers jours. J'ai décidé de créer une vue dans le mode où se trouvait la table d'origine, et ne récupérez que les données des derniers jours.

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

Modifier la table spécifiée lors de la recréation de la table externe de fdw (de la table d'origine à la vue)

--创建外部服务器
-- 括号里的三个参数,分别是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') --指定模式和视图
;

Après le test, la requête modifiée ne prend qu'environ 10 secondes

avant de réparer

Insérez la description de l'image ici

Après la modification, il était à l'
Insérez la description de l'image ici
origine utilisé fdw pour tout transmettre pour faire le filtrage, maintenant il s'agit d'utiliser la vue pour récupérer les données requises puis d'utiliser fdw pour transmettre

Deuxièmement, changez la table ordinaire en table de partition

Changer la table ordinaire en partition. Il existe de nombreuses introductions sur Internet. Je n'écrirai pas ici. Je modifierai la base de données de lien pg en une table partitionnée. Changer
la table ordinaire en partition améliore l'efficacité.

(À suivre)

Je suppose que tu aimes

Origine blog.csdn.net/yang_z_1/article/details/114867223
conseillé
Classement