PostgreSQL9.6:Parallel sequential scans 初体验
Oracle 支持强大的并行功能,创建索引,表分析,数据加载时可以开启并行,这项功能让很多数据库产品垂涎, 作为开源数据库 PostgreSQL 在并行方面也在努力尝试,很早之前 PostgreSQL 几乎不支持任何并行的作业,到了 9.5 版本 PostgreSQL 支持并行的 vacuum,到了 9.6 后, PostgreSQL 支持并行的顺序扫描,这是令人振奋的消息,因为这极大的提升了 PostgreSQL 统计分析SQL的性能,由于硬件环境限制,今天简单体验下,以下实验在笔记本虚拟机上进行。 一 关于 max_parallel_degree (integer) 参数这个参数配置决定了每个 parallel query 并行操作允许的最大后台进程数,这个值的设置受后台进程数参数 max_worker_processes 限制。 二 PostgreSQL9.6 Beta1 测试--设置 max_parallel_degree [pg96@db1 ~]$ grep "max_parallel_degree" $PGDATA/postgresql.conf max_parallel_degree = 4 # max number of worker processes per node --创建测试表 [pg96@db1 ~]$ psql francs francs psql (9.6beta1) Type "help" for help. francs=> create table test_big1(id serial,name character varying(64),create_time timestamp(0) without time zone); CREATE TABLE francs=> insert into test_big1(id,name)select n,n||'_test' from generate_series(1,5000000)n; INSERT 0 5000000 --执行计划 francs=> explain analyze select count(*) from test_big1; ------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost=45560.42..45560.43 rows=1 width=8) (actual time=4236.468..4236.469 rows=1 loops=1) -> Gather (cost=45560.00..45560.41 rows=4 width=8) (actual time=4232.517..4232.556 rows=5 loops=1) Workers Planned: 4 Workers Launched: 4 -> Partial Aggregate (cost=44560.00..44560.01 rows=1 width=8) (actual time=4182.972..4182.973 rows=1 loops=5) -> Parallel Seq Scan on test_big1 (cost=0.00..41435.00 rows=1250000 width=0) (actual time=0.034..2450.966 rows=1000000 loops=5) Planning time: 112.309 ms Execution time: 4236.920 ms (8 rows) 备注:执行多次,执行时间大概都在4秒多点,从执行计划中看到走了并行顺序扫描“Parallel Seq Scan on test_big1”,再细看“Workers Launched: 4”,表示开启了四个并行进程。 --查看并行顺序扫描进程 三 PostgreSQL9.5 测试测试之前先把 PostgreSQL 9.6 的数据库关了,在确保相等情况下进行测试。 --创建测试表 [pg95@db1 ~]$ psql fdb fdb psql (9.5alpha1) Type "help" for help. fdb=> create table test_big1(id serial,create_time timestamp(0) without time zone); CREATE TABLE fdb=> insert into test_big1(id,5000000)n; INSERT 0 5000000 fdb=> explain analyze select count(*) from test_big1; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------- Aggregate (cost=91435.00..91435.01 rows=1 width=0) (actual time=8389.093..8389.094 rows=1 loops=1) -> Seq Scan on test_big1 (cost=0.00..78935.00 rows=5000000 width=0) (actual time=9.958..4781.116 rows=5000000 loops=1) Planning time: 2.436 ms Execution time: 8391.758 ms (4 rows) 备注:多次执行,时间在 8 秒左右。 四 总结由于硬件关系原因,本测试只在笔记本虚拟机上测试,在这个全表扫描测试场景下, PostgreSQL 9.6 是 PostgreSQL9.5 性能的两倍,今天仅是初步体验并行扫描,可以预测如果在X86服务器上测试,这个性能倍数会高一些,后续测试并行扫描的其它场景;个人认为 PostgreSQL 对并行顺序扫描的支持,在统计分析性能方面的提升前进了一大步。 五 参考Robert Haas: PostgreSQL 9.6 with Parallel Query vs. TPC-H (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- AJAX POST数据中有特殊符号导致数据丢失的解决方法
- c – 带参数的自由函数,获取返回类型
- 数字正则表达式,数字校验表达式,最正确的数字校验正则表达
- ruby-on-rails – 什么是非资源路由的link_to路径?
- xml – ADT插件是否自动创建ant构建文件?
- flex – 通过地址而不是坐标添加谷歌地图标记?
- Smack Message属性扩展---添加自定义元素(标签)
- 未能加载文件或程序集“WebKitBrowser, Version=0.5.0.0, C
- XML注释标签的Javascript恶意注入/重定向(JS/Exploit-Blaco
- c# – 为什么String GetHashCode只处理每四个字符?