Gauss(DWS)“表信息查询”与“分布列等信息修改”的一个方便脚本

网友投稿 1959 2022-05-30

最近开始接触GaussDB(DWS),在查询一些表信息的时候,总是忘记字典表是啥,虽然说用的多就记住了,但是还没记住的时候,总是要查询产品文档或之前的笔记,挺麻烦的。同时比如优化SQL的时候,总会需要综合多方面的信息,就需要多个字典表,比如表的分布列,分布方式,空间大小,倾斜率,有没收集统计信息等等,还需要统计一起,那就需要更多工作了。

经过几次需要的统计表信息的SQL优化后,决定写一个shell脚本,将需要的信息一次性查询出来。同时还能支持我修改分布列和分布方式,这样我就能快速优化SQL。脚本在附件中,下面介绍一下常用的功能:

一、表分布列等信息

使用MPP数据库,在写SQL的时候,总是需要知道表的基本信息的,比如知道分布列是什么,才能写出好SQL。下面功能展示的是我能够写出好SQL所需要的一些表信息:

使用附件脚本gtool.sh,在gsql、gs_dump等GaussDB(DWS)客户端就绪的服务器下(后续默认在这样的环境下),执行以下命令

./gtool.sh Q 1 d=tpch s=public

其中参数Q 为查询;1为第一个查询内容,即表的信息;d=tpch为指定库名称,s=public为指定schema名称。后续还能table的名称,hostip,用户,密码等。

查询出来结果如下:

这里面主要的信息有以下几个:

表分布列(distributekey),有值的就是hash的,没有值的就是REPLICATION复制表

分布方式(reloptions),列存行存(column/row),以及压缩等级(low,middle,high,no)

Gauss(DWS)“表信息查询”与“分布列等信息修改”的一个方便脚本

空间大小(size_gb),表多大,按GB

表倾斜率(skew_per),表倾斜率,此处按照本人习惯计算,倾斜率=(1-(avg/max ))*100 ,100代表数据都在一个DN上了,最倾斜的情况,越接近100越倾斜。

表创建和修改时间(ctime、mtime)

最近一次收集统计信息时间(last_analyze_time),空则代表没有收集统计信息。

[ INFO ]里面有执行的SQL脚本/tmp/gtool1.sql,如果需要修改sql来执行可以修改该sql文件。然后通过命令行执行。

二、修改表分布列

修改分布列是非常常用的SQL优化手段,一般情况下我们建表会指定分布列,但是没有指定分布列的话,系统会默认选择第一列作为分布列。那类似的原因会导致分布倾斜,关联倾斜的情况发生,这时候就需要修改分布列了。

使用gtool.sh脚本可以轻松修改分布列。

在命令行中输入./gtool.sh,会列举一些案例,其中参数M 1为修改分布列

我们可以看到划线的例子中

./gtool.sh M 1 d=tpch t=region c=r_regionkey

第一个是修改region的分布方式为REPLICATION,即将其复制到每个DN上,同时没有runnow=1参数,这里只会帮你生成SQL,并不会执行。

./gtool.sh M 1 d=tpch t=region c=r_name runnow=1

第二个是修改region的分布列为r_name,并且有runnow=1,就会立即执行,结果如下

可以看到每一步的SQL都有打印在[ EXAMPLE ] 中,执行完毕后前后比对可以看出分布列已经变化。

三、修改分布方式(行存转列存或列存转行存)

GaussDB(DWS)的行列存有不同的适用场景,在使用时可能需要转换一下,如果手工转换的话,可能会漏掉一些信息,比如索引,统计信息等。此处脚本会先看原来的表有无索引的信息,然后转换以后重新建索引,已达到不丢失索引等目标。但是需要注意的是一些列存不支持的内容在转换过程中会被删除,比如列存不支持PK等。本脚本没有适用所有场景,如有报错还需要修改一下输出的脚本再重新执行一下。

在命令行中输入./gtool.sh,会列举一些案例,其中参数M 2为修改分布方式,行存变列存或者列存变行存。

第一个例子与第二个例子对比,多了一个runnow=1和rep=0,这两个选择分别代表是否执行以及是否替换原来的表。rep=1代表替代原来的表,会先将原来的rename掉,然后在建一个新的表。而rep=0或者不输入rep= 则为不替换原来的表。

第一个例子

./gtool.sh M 2 d=tpch t=region

生成的脚本内容如下

第二个例子,此处修改rep=1,即会替换原来的表。并预先建了一个cbtree索引给region表

./gtool.sh M 2 d=tpch t=region  runnow=1 rep=1

脚本内容如下,可以看到首先会rename原来的表,原来的cbtree会改成了行存的btree索引

总结

以上是本人总结写的一个方便脚本常用的一些命令以及说明,其他的功能可以通过./gtool.sh h  这个help命令查看,或者直接打开shell查看里面的内容。有需要改进的地方可以在本文出一起修改探讨,谢谢阅读!

附件: gtool.zip 6.39KB 下载次数:28次

EI企业智能 数据仓库服务 GaussDB(DWS) Gauss AP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Oracle普通表转分区表的几种方式
下一篇:敏捷开发 | DSDM 在非 IT 领域也同样适用?
相关文章