日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

postgresql 10 的并行(parallel)简介

發布時間:2023/12/18 编程问答 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 postgresql 10 的并行(parallel)简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

os:centos 6.8
db:postgresql 10.3

postgresql 10 的parallel較 9.6 的parallel有了進一步的加強 。

  • 支持并行B-tree索引掃描
  • 支持并行位圖堆掃描
  • 允許合并連接并行執行
  • 允許不相關的子查詢并行運行
  • 提高并行工作人員(parallel worker)返回預先排序的數據的能力
  • 增加過程語言函數中的并行查詢使用
  • $ psql -c " select version(); " PostgreSQL 10.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18), 64-bit

    實例級參數

    有幾種設置會導致查詢規劃器在任何情況下都不生成并行查詢計劃。為了讓并行查詢計劃能夠被生成,必須配置好下列設置。

  • max_parallel_workers_per_gather 必須被設置為大于零的值。這是一種特殊情況,更加普遍的原則是所用的工作者數量不能超過max_parallel_workers_per_gather所配置的數量。

  • dynamic_shared_memory_type 必須被設置為除none之外的值。并行查詢要求動態共享內存以便在合作的進程之間傳遞數據。

  • select *from pg_settings pswhere 1=1and ps.name in ('force_parallel_mode','max_worker_processes','max_parallel_workers','max_parallel_workers_per_gather','min_parallel_relation_size',-- add 9.6,remove from 10'min_parallel_index_scan_size','min_parallel_table_scan_size','parallel_tuple_cost','parallel_setup_cost'); name | setting | unit | category | short_desc | extra_desc | context | vartype | source | min_val | max_val | enumvals | boot_val | reset_val | sourcefile | sourceline | pending_restart ---------------------------------+---------+------+----------------------------------------+----------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+------------+---------+---------+---------+--------------+------------------+----------+-----------+------------+------------+-----------------force_parallel_mode | off | | Query Tuning / Other Planner Options | Forces use of parallel query facilities. | If possible, run query using a parallel worker and with parallel restrictions. | user | enum | default | | | {off,on,regress} | off | off | | | fmax_parallel_workers | 8 | | Resource Usage / Asynchronous Behavior | Sets the maximum number of parallel workers than can be active at one time. | | user | integer | default | 0 | 1024 | | 8 | 8 | | | fmax_parallel_workers_per_gather | 2 | | Resource Usage / Asynchronous Behavior | Sets the maximum number of parallel processes per executor node. | | user | integer | default | 0 | 1024 | | 2 | 2 | | | fmax_worker_processes | 8 | | Resource Usage / Asynchronous Behavior | Maximum number of concurrent worker processes. | | postmaster | integer | default | 0 | 262143 | | 8 | 8 | | | fmin_parallel_index_scan_size | 64 | 8kB | Query Tuning / Planner Cost Constants | Sets the minimum amount of index data for a parallel scan. | If the planner estimates that it will read a number of index pages too small to reach this limit, a parallel scan will not be considered. | user | integer | default | 0 | 715827882 | | 64 | 64 | | | fmin_parallel_table_scan_size | 1024 | 8kB | Query Tuning / Planner Cost Constants | Sets the minimum amount of table data for a parallel scan. | If the planner estimates that it will read a number of table pages too small to reach this limit, a parallel scan will not be considered. | user | integer | default | 0 | 715827882 | | 1024 | 1024 | | | fparallel_setup_cost | 1000 | | Query Tuning / Planner Cost Constants | Sets the planner's estimate of the cost of starting up worker processes for parallel query. | | user | real | default | 0 | 1.79769e+308 | | 1000 | 1000 | | | fparallel_tuple_cost | 0.1 | | Query Tuning / Planner Cost Constants | Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend. | | user | real | default | 0 | 1.79769e+308 | | 0.1 | 0.1 | | | f (8 rows)

    相比 postgresql 9.6
    去掉了如下參數
    min_parallel_relation_size

    增加了如下參數
    max_parallel_workers
    min_parallel_index_scan_size
    min_parallel_table_scan_size

    簡單測試

    create table tmp_t0 (c1 int8,c2 int8,c3 text,c4 text ) ;

    生成1000w條數據

    insert into tmp_t0 SELECT (random()*(2*10^9))::int8,(random()*(2*10^9))::int8,md5(random()::text),md5(random()::text)from generate_series(1,8000000)where 1=1; select pg_size_pretty(pg_relation_size('tmp_t0'))pg_size_pretty ----------------1116 MB (1 row)

    系統默認啟用并行

    explain select count(1) from tmp_t0 where 1=1 ; Finalize Aggregate (cost=195941.86..195941.87 rows=1 width=8)-> Gather (cost=195941.65..195941.86 rows=2 width=8)Workers Planned: 2-> Partial Aggregate (cost=194941.65..194941.66 rows=1 width=8)-> Parallel Seq Scan on tmp_t0 (cost=0.00..184524.92 rows=4166692 width=0)

    禁止并行

    set max_parallel_workers_per_gather =0;explain select count(1) from tmp_t0 where 1=1 ;Aggregate (cost=267858.75..267858.76 rows=1 width=8)-> Seq Scan on tmp_t0 (cost=0.00..242858.60 rows=10000060 width=0)

    session 級別的并行控制

    set max_parallel_workers=4; set max_parallel_workers_per_gather =4; set parallel_setup_cost =0; set parallel_tuple_cost =0; alter table test set (parallel_workers =4);

    參考:
    http://postgres.cn/docs/10/parallel-query.html

    總結

    以上是生活随笔為你收集整理的postgresql 10 的并行(parallel)简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。