1

並列実行を使用してパフォーマンスを向上させるために、postgresql を 9.5 から 9.6 にアップグレードしました。しかし、私はそれを使用することに成功しませんでした。私のメインデータベースでは、ほとんどすべての選択が次のようになります select * from foreign_table 。外部テーブルは、Oracle データベースにある外部テーブルです。一部のテーブルは 10G+ および 1,000,000+ レコードの大きなものであるため、この選択の場合は並列クエリが大いに役立つはずです。

私が設定したパラメータ:

min_parallel_relation_size = 200MB
max_parallel_workers_per_gather = 2 
max_worker_processes = 8 

サイズが 1.5G で 5,000,000 レコードの大きなテーブルから Explain Analyse select * を使用しようとすると、外部スキャンのみが表示されます。

 Foreign Scan on customer_prod  (cost=10000.00..20000.00 rows=1000 
width=2438) (actual time=6.337..231408.085 rows=5770616 loops
=1)
  Oracle query: ......
 Planning time: 2.827 ms
 Execution time: 232198.137 ms

*select * from foreign_table where 1=1 も試しましたが、結果は同じです。

一方、次のコードは機能しました:

   postgres=# CREATE TABLE people_mariel_test (id int PRIMARY KEY NOT NULL, age int NOT NULL);
   CREATE TABLE
   postgres=# INSERT INTO people_mariel_test  SELECT id, (random()*100)::integer AS age FROM generate_series(1,10000000) AS id;
   INSERT 0 10000000
   postgres=# explain analyze select * from people_mariel_test where age=6;
                                                            QUERY PLAN

   --------------------------------------------------------------------------------
   ------------------------------------------------
   ----------
   Gather  (cost=1000.00..123777.76 rows=50000 width=8) (actual        time=0.239..771.801 rows=99409 loops=1)
      Workers Planned: 1
      Workers Launched: 1
      ->  Parallel Seq Scan on people_mariel_test  (cost=0.00..117777.76 rows=29412 width=8) (actual time=0.045..748.213 rows=49704
    loops=2)
     Filter: (age = 6)
     Rows Removed by Filter: 4950296
    Planning time: 0.261 ms
    Execution time: 785.924 ms
   (8 rows)

どうすれば続行できますか?

4

1 に答える 1