問題が 1 つあります。クエリが "CREATE TABLE" で囲まれている場合、クエリ処理の並列処理がデータベースで機能するようになりました。
プレーンな SELECT は完全に並行して処理されるため、非常に高速です。並列処理は EXPLAIN 出力にも表示され、「トップ」モニタリングでバックグラウンド ワーカーも確認できます。したがって、9.5ページよりもはるかに優れています。
しかし、CREATE TABLE で同じ SELECT を使用すると、並列ではなく長時間実行されます。pg 9.5 よりもはるかに遅いです。この場合の並列処理は EXPLAIN 出力には表示されず、OS で実行されているバックグラウンド ワーカーはありません。"force_parallel_mode" = ON に設定しようとしましたが、変更はありません。
CREATE TABLEでも並列処理を使用するために、標準設定から変更する必要がある、私が見逃した魔法の設定はありますか? それとも、これは「設計による」予想される動作ですか?
更新:OK、「設計による」ようです-PostgreSQLで操作を書き込むためのCTEでの並列クエリ
しかし、その場合、CREATE TABLE as SELECT は、9.5 と比較して 9.6 で非常に悪いパフォーマンスを与えるようです...
- 更新: PostgreSQL 9.6 では 9.5 よりも高い work_mem の設定が必要なようです - 実行が不十分なクエリのクエリ プランをいじったところ、セッションで work_mem 設定を変更するだけで、"Sort (cost=807568233.23..807568267.50 rows= 13709 width=105)" for work_mem=32MB から "Sort (cost=151127.62..151161.89 rows=13709 width=105)" for work_mem=64MB...