Postgresql dblink扩展太慢

时间:2019-04-19 12:42:18

标签: postgresql

我需要合并视图中不同数据库上两个表的结果。 据我搜索,我们可以为此使用dblink扩展。

我决定使用dblink扩展通过全部合并来合并这些表,但是它变得太慢了。

例如:

CREATE DATABASE Test1;

此后,我在pgadmin中运行以下查询并分析了同一数据库中的并集

CREATE TABLE A_Test1(id int NOT NULL);
INSERT INTO A_Test1
   SELECT x
   FROM generate_series(1, 1000000) AS x;   
CREATE TABLE B_Test1(id int NOT NULL);
INSERT INTO B_Test1
   SELECT x
   FROM generate_series(1, 1000000) AS x;   
SELECT id FROM  A_Test1
UNION ALL
SELECT id FROM  B_Test1
-- a_test1 TotalCost 14425 , Actual Total Time 202.336
-- b_test1 TotalCost 14425 , Actual Total Time 216.108
-- Append  TotalCost 38850 , Actual Total Time 607.316


CREATE DATABASE Test2;
CREATE EXTENSION dblink;--Run on Test1 Database
CREATE TABLE B_Test2(id int NOT NULL);--Run on Test2 Database

INSERT INTO B_Test2 --Run on Test2 Database
   SELECT x
   FROM generate_series(1, 1000000) AS x;

使用dblink扩展,结果如下所示

SELECT id FROM A_Test1
UNION ALL
SELECT id FROM dblink('dbname=test2','select id from b_test2') AS f(id integer);
-- a_test1          TotalCost 14425 , Actual Total Time 197.493
-- Function Scan    TotalCost 10    , Actual Total Time 3188.188
-- Append           TotalCost 19440 , Actual Total Time 3537.514

使用dblink的总时间要比不使用dblink的总时间长。

  1. 此问题的解决方法是什么?我们使用相同的一个数据库而不是两个单独的数据库解决了这个问题。
  2. 这种缓慢的原因是什么?
  3. Postgresql开发人员或开发此扩展的开发人员是否考虑解决此性能问题?
  4. totalcost是什么意思?
  5. 我必须使用哪个度量标准来解释结果?”-b_test1 TotalCost 14425“的总成本低于“-Function Scan TotalCost 10”的总成本。但是它的总时间比功能扫描的时间短。

在解释总时间时,dblink太慢了。但是当我们解释总成本时,第一个低于dblink吗?

0 个答案:

没有答案