南大通用GBase 8a之通过量化分析节点层数据集中度评估数据在DC包中的分布情况
主要解决问题
(1) 在SQL性能分析中,横向节点间表的数据分布情况
可依赖这篇文章所述的方法(https://www.gbase.cn/community/post/4935)
但当需要分析表在某个节点上的数据分布情况
就鲜有分析渠道了【即纵向的,单表单分片的,数据在数据文件里(DC包里)的分布】
部署方式
(1) 新建localbalance目录,将 conf.ini和localbalance文件放入其中,
并赋可执行权限 chmod +x localbalance
(2) conf.ini文件样例:
[default]
nodelist=192.168.1.5 --分析data节点ip (只允许填一个)
user=gbase --数据库用户名
password='**************' --密码
database=test --默认登录数据库
port=5050 --节点层端口
sql=select * from lineorder_n1 a where lo_shipmode='RAIL' --sql语句注意只接受select语句,sql尽量只包含筛选数据的条件,表为_nX (分片表)
使用方式
(1) 配置好以后,直接执行 ./localbalance 即可。
演示样例
(1)以下样例为分析lineorder表,货运方式为铁路的数据,在192.168.1.5节点层上,数据在数据文件中的分布情况
表内数据量: gbase> select count(*) from test.lineorder_n1; +----------+ | count(*) | +----------+ | 34276944 | +----------+ 1 row in set (Elapsed: 00:00:00.01) 条件命中数据量: gbase> select count(*) from test.lineorder_n1 a where lo_shipmode='RAIL'; +----------+ | count(*) | +----------+ | 13707120 | +----------+ 1 row in set (Elapsed: 00:00:00.70) 该SQL命中的数据在数据文件中的集中度为: [gbase@locahost localbalance]$ ./localbalance 该数据的集中度为: 0.01340384 注:该值比较低,说明命中数据在数据文件中分布比较离散 然后,将该批数据删除后再重新批量插入: gbase> create table tmp as select * from lineorder a where lo_shipmode='RAIL'; Query OK, 13707120 rows affected (Elapsed: 00:01:10.79) gbase> delete from lineorder a where lo_shipmode='RAIL'; Query OK, 13707120 rows affected (Elapsed: 00:00:08.67) gbase> insert into lineorder select * from tmp; Query OK, 13707120 rows affected (Elapsed: 00:00:31.72) Records: 13707120 Duplicates: 0 Warnings: 0 同样的,再次,计算该SQL命中的数据在数据文件中的集中度为: [gbase@locahost localbalance]$ ./localbalance 该数据的集中度为: 0.04624894 注:数值提升了3.5倍 再次,做同样查询,性能理论上也应该提升3.5倍,验证一下,果然。(刨去建表插数的相同时间) gbase> create table tmp2 as select * from lineorder a where lo_shipmode='RAIL'; Query OK, 13707120 rows affected (Elapsed: 00:00:32.59) 无论是从测试还是量化分析的角度看,说明数据都更加集中了。5. 参考文件
(1) 注: 该版本为centos8环境下编译。
(2) 文件下载:
通过网盘分享的文件:localbalance.zip
链接: https://pan.baidu.com/s/1bzgTRwqiqctwbyCTCCBpJw 提取码: 8rsf