部署GaussDB 200时,一个RAID组上究竟布多少个DN合适?
先来看两组数据,这些数据将通过count来检验一组Raid上部署单DN和部署多DN间的性能差异。
第一组:表lineitem上执行的,lineitem表的数据是通过GDS外表导入的。
l CN上执行 select count(*):
tpch_row=# select count(*) from lineitem;
count
------------
1799989091
(1 row)
Time: 269473.636 ms
l 单DN执行select count(*):
tpch_row=# select count(*) from lineitem;
count
----------
75610286
(1 row)
Time: 76611.682 ms
第二组: 用原表插入的方式创建有同样结构的表lineitem_2: create table lineitem_2 as select * from lineitem
然后在lineitem_2上做同样的tablescan,数据如下:
l DN上执行 select count(*):
tpch_row=# select count (*) from lineitem_2;
count
----------
75610286
(1 row)
Time: 13704.895 ms
l CN上执行 select count(*):
tpch_row=# select count (*) from lineitem_2;
count
------------
1799989091
(1 row)
Time: 91891.949 ms
两组数据的对比结果如下:
CN上执行tablescan | lineitem | lineitem_2 |
耗时 | 269秒 | 92 秒 |
I/O 利用率 | 100% | 100% |
单raid速率 | 160M/S | 500M/S |
DN上执行tablescan | lineitem | lineitem_2 |
耗时 | 76 秒 | 14秒 |
I/O 利用率 | 95% | 30-40% |
单raid速率 | 172M/S | 900M/S |
从以上数据可以得出如下结论:
1、一个RAID组只部署一个DN,其I/O性能明显优于一个Raid组上部署多个DN。原因如下:
多DN在GDS导入时会造成I/O碎片化,这样在随后的SCAN速度会降低很多。
多DN在查询的时候由于I/O争用,会导致SCAN的速度降低更多,目前的count(*)查询已经证明。
2、 如有可能,建议将日志,XLOG等所有会产生写操作的目录配置到不同的RAID组,这样可以保证导入的时候数据尽量集中,不产生随机I/O。
3、 导入的时候为了导入性能可能需要并发导入,但这也会同样导致随机I/O, 如果查询性能非常重要,可以导入一个中间表然后再导入最终表。
- 点赞
- 收藏
- 关注作者
评论(0)