
主要解决问题1 在SQL性能分析中横向节点间表的数据分布情况可依赖这篇文章所述的方法https://www.gbase.cn/community/post/4935但当需要分析表在某个节点上的数据分布情况就鲜有分析渠道了【即纵向的单表单分片的数据在数据文件里DC包里的分布】部署方式1 新建localbalance目录将 conf.ini和localbalance文件放入其中并赋可执行权限 chmod x localbalance2 conf.ini文件样例[default]nodelist192.168.1.5 --分析data节点ip 只允许填一个usergbase --数据库用户名password************** --密码databasetest --默认登录数据库port5050 --节点层端口sqlselect * from lineorder_n1 a where lo_shipmodeRAIL --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_shipmodeRAIL; ---------- | count(*) | ---------- | 13707120 | ---------- 1 row in set (Elapsed: 00:00:00.70) 该SQL命中的数据在数据文件中的集中度为 [gbaselocahost localbalance]$ ./localbalance 该数据的集中度为: 0.01340384 注该值比较低说明命中数据在数据文件中分布比较离散 然后将该批数据删除后再重新批量插入 gbase create table tmp as select * from lineorder a where lo_shipmodeRAIL; Query OK, 13707120 rows affected (Elapsed: 00:01:10.79) gbase delete from lineorder a where lo_shipmodeRAIL; 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命中的数据在数据文件中的集中度为 [gbaselocahost localbalance]$ ./localbalance 该数据的集中度为: 0.04624894 注数值提升了3.5倍 再次做同样查询性能理论上也应该提升3.5倍验证一下果然。刨去建表插数的相同时间 gbase create table tmp2 as select * from lineorder a where lo_shipmodeRAIL; Query OK, 13707120 rows affected (Elapsed: 00:00:32.59) 无论是从测试还是量化分析的角度看说明数据都更加集中了。5. 参考文件1 注 该版本为centos8环境下编译。2 文件下载通过网盘分享的文件localbalance.zip链接: https://pan.baidu.com/s/1bzgTRwqiqctwbyCTCCBpJw 提取码: 8rsf