PG中文社区 /
mdi-home
首页 社区新闻 中文文档 加入ACE {{ item.text }} 登录
mdi-home 首页 mdi-chat-processing 社区新闻 mdi-book-open-variant 中文文档 mdi-account-multiple-check 加入ACE mdi-file-multiple-outline 相关资料 mdi-blank {{item.text}} mdi-exit-to-app 退出账号
PostgreSQL 9.6 并行计算 在 xfs, ext4 下的表现对比

原作者:digoal / 德哥  创作时间:2016-10-06 08:55:52+08  
doudou586 发布于2016-10-06 08:55:52           评论: 1   浏览: 9314   顶: 2406  踩: 2586 

作者: digoal

日期: 2016-10-02

标签: PostgreSQL , 9.6 , 并行计算 , 多核计算 , xfs , ext4

背景

ext4在红帽5,6的版本中作为主流的文件系统,有非常多的用户群体,也能满足大多数的应用场景需求。

XFS经过几年的发展,从红帽7开始,XFS会成为默认的文件系统。同时XFS在高并发的场景相比EXT4有较明显的优势,前面我对单机多实例也做过测试,使用EXT4和CGROUP容易遇到IO HANG的问题,而XFS几乎没有这样的问题。

本文将对EXT4和XFS进行测试比较,两者在PostgreSQL采用并行计算是在并行度上的性能差异。

文件系统格式化与mount选项

文件系统的格式化参数以及挂载参数如下

1. XFS

mkfs.xfs -f -b size=4096 -l logdev=/dev/dfc1,size=2047868928,sunit=16 -d agsize=536862720 /dev/dfc2
/dev/dfc2 /u03 xfs defaults,allocsize=16M,inode64,nobarrier,nolargeio, logbsize=262144,noatime,
nodiratime,swalloc,logdev=/dev/dfc1 0 0

2. EXT4

mkfs.ext4 /dev/dfc1 
e2label /dev/dfc1 u03 
LABEL=u03               /u03            ext4            
 defaults,noatime,nodiratime,nodelalloc,barrier=0,data=writeback 0 0

测试数据

数据量16亿,共90GB。

创建一张测试表,包含一个比特位字段,后面用于测试。

postgres=# create unlogged table t_bit2 (id bit(200)) with (autovacuum_enabled=off, parallel_workers=128);
CREATE TABLE

并行插入16亿记录

for ((i=1;i<=40;i++)) ; do psql -c "insert into t_bit2 select B'1010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010
10101010101010101010101010101010101010101010101010101010101010101010' 
from generate_series(1,40000000);" & done

单表16亿,90GB

postgres=# \dt+
                     List of relations
 Schema |  Name  | Type  |  Owner   |  Size  | Description 
--------+--------+-------+----------+--------+-------------
 public | t_bit2 | table | postgres |  90 GB | 

聚合测试

对比在聚合测试时,XFS与EXT4的拐点。

数据全内存缓存,排除IO瓶颈。

1. xfs
测试发现直到22个并发,性能才开始出现拐点,并且在64个并发时回落没有EXT4那么明显。

postgres=# set max_parallel_workers_per_gather =64 ;  
postgres=# select count(*) from t_bit2 ;
   count    
------------
 1600000000
(1 row)
Time: 18310.130 ms

postgres=# set max_parallel_workers_per_gather =32;
postgres=# select count(*) from t_bit2 ;
   count    
------------
 1600000000
(1 row)
Time: 21144.919 ms

postgres=# set max_parallel_workers_per_gather =17;
postgres=# select count(*) from t_bit2 ;
   count    
------------
 1600000000
(1 row)
Time: 8905.510 ms

postgres=# set max_parallel_workers_per_gather =21;
postgres=# select count(*) from t_bit2;
   count    
------------
 1600000000
(1 row)
Time: 7583.344 ms

2. ext4
测试发现直到17个并发,性能开始出现拐点。

postgres=# set max_parallel_workers_per_gather =64;
postgres=# select count(*) from t_bit2 ;
   count    
------------
 1600000000
(1 row)
Time: 32580.853 ms

postgres=# set max_parallel_workers_per_gather =32;
postgres=# select count(*) from t_bit2 ;
   count    
------------
 1600000000
(1 row)
Time: 30209.980 ms

postgres=# set max_parallel_workers_per_gather =17;
postgres=# select count(*) from t_bit2 ;
   count    
------------
 1600000000
(1 row)
Time: 9313.369 ms

从测试结果来看,XFS要优于EXT4,主要体现在可以做到更高的并发,以及更好的性能。
测试环境是centos 6,如果是7的话,XFS表现可能还会更好。

分析

XFS为什么在高并发时更好?

  1. 组策略,对并行的写I/O有较大帮助(如可以在多个组里面并行分配block和inode),格式化时的agcount选项。 所以, XFS对于高并发的写入优势会更加明显,例如单机多实例,或者Greenplum,都是典型的应用场景。
  2. 分配组,XFS文件系统内部被分为多个“分配组”,它们是文件系统中的等长线性存储区。 每个分配组各自管理自己的inode和剩余空间。文件和文件夹可以跨越分配组。
    这一机制为XFS提供了可伸缩性和并行特性 —— 多个线程和进程可以同时在同一个文件系统上执行I/O操作。
    这种由分配组带来的内部分区机制在一个文件系统跨越多个物理设备时特别有用,使得优化对下级存储部件的吞吐量利用率成为可能。

参考

1. http://baike.baidu.com/view/1222157.htm

2. man xfs


Postgres大象会2016官方报名通道:http://www.huodongxing.com/event/8352217821400

扫描报名





评论:1   浏览: 9314                   顶: 2406  踩: 2586 

请在登录后发表评论,否则无法保存。

1# __ xiaowu 回答于 2024-04-21 08:33:32+08
青春寄语送给初中孩子:https://www.nanss.com/xuexi/1074.html 网络游戏情侣名字:https://www.nanss.com/mingcheng/1286.html 评课稿模板:https://www.nanss.com/gongzuo/869.html 谈谈服饰普通话3分钟:https://www.nanss.com/xuexi/529.html 诗意网名:https://www.nanss.com/mingcheng/516.html 人心凉了的伤感说说:https://www.nanss.com/wenan/1493.html 同学群名字:https://www.nanss.com/mingcheng/1192.html 一句话让男人心疼到哭:https://www.nanss.com/yulu/1078.html 初三毕业感言:https://www.nanss.com/xuexi/577.html 学习的名言:https://www.nanss.com/xuexi/1055.html 极度抑郁的网名:https://www.nanss.com/mingcheng/1407.html 伤感的微信网名:https://www.nanss.com/mingcheng/994.html 周一好心情短句:https://www.nanss.com/yulu/1102.html 洋气的网名:https://www.nanss.com/mingcheng/1378.html 我的教育故事:https://www.nanss.com/gongzuo/605.html 自律的励志话:https://www.nanss.com/yulu/1040.html 带虎字的祝福语:https://www.nanss.com/shenghuo/1045.html 非主流q名繁体字:https://www.nanss.com/mingcheng/1419.html 表达一家人相亲相爱的句子:https://www.nanss.com/yulu/1330.html 往后余生封心锁爱的句子:https://www.nanss.com/yulu/614.html 王者荣耀好听的名字:https://www.nanss.com/mingcheng/876.html 应用文写作课程个人总结:https://www.nanss.com/xuexi/909.html 有气质有女人味的网名:https://www.nanss.com/mingcheng/1008.html 男人大气沉稳的网名:https://www.nanss.com/mingcheng/1449.html 霸气游戏名字:https://www.nanss.com/mingcheng/1024.html 有魅力女人味微信名:https://www.nanss.com/mingcheng/716.html 培训心得体会:https://www.nanss.com/gongzuo/591.html 雨天发朋友圈的句子:https://www.nanss.com/wenan/1305.html 二字微信昵称:https://www.nanss.com/mingcheng/1472.html 女人气质独特一点的网名:https://www.nanss.com/mingcheng/931.html



发表评论:
加入我们
QQ群1:5276420
QQ群2:3336901
QQ群3:254622631
文档群:150657323
文档翻译平台:按此访问
社区邮件列表:按此订阅
商业支持
扫码关注
加入我们
QQ群1:5276420
QQ群2:3336901
QQ群3:254622631
文档群:150657323
文档翻译平台:按此访问
社区邮件列表:按此订阅
商业支持
扫码关注
© PostgreSQL中文社区 ... (自2010年起)