写点什么

大厂运维必备技能:PB 级数据仓库性能调优

发布于: 2020 年 09 月 08 日

摘要:众所周知,数据量大了之后,性能是大家关注的一点,所以我们在业务开发的时候,特别关注性能,做为一个架构师,必须对性能要了解,要懂。才能设计出高性能的业务系统。



一、GaussDB分布式架构







所谓集群是将多台物理服务器组建成一个逻辑平台,对外展现一个集群平台的形式。



所谓分布式架构是将数据分而治之。以逻辑进行划分,将数据存放在不同的物理节点。



CN:协调节点 负责接收来自应用的访问请求,并向客户端返回执行结果。Coordinator负责分解任务,并调度任务分片在DataNode上并行执行。



CN:SQL语句的解析和任务规划,把具体的任务下发给DN结构



GTM:生成和维护全局事务ID、事务快照、时间戳等需要全局唯一的信息。



DN:数据节点,负责存储业务数据(支持行存、列存、混合存储)、执行数据查询任务以及向Coordinator返回执行结果。【不单存储还负责计算】



一台物理机【2-4个DN】





Coorinator做任务的规划 分发,规划完之后,把具体的任务抛给计算节点。



Crew3 Worker1和Crew3 Worker2就是任务树中的叶节点就是数据的扫描任务,接受下级任务的数据输入,向上级任务输出数据。



Crew2 Worker1和Crew2 Worker2中间的节点就是各种数据运算任务,如Hash计算,Join操作,聚集操作和排序操作。接受下级任务的数据输入,向上级任务输出数据。



在非阻塞的任务流程中,上级任务不需要等待下级完成全部任务返回整体结果级才启动,下级任务生成一条结果记录就可以传递给上级。



阻塞情况下,上级任务需要等待下级任务完成所有数据处理工作。



二、调优原则与流程





说白了,就是少花钱,多办事,资源利用最大化,比如我们在点查询场景的时候尽量使用索引扫描。如果实在不能索引扫描,我们会读取每一条元组和点查询条件进行匹配。



在没有资源瓶颈的情况下,尽量充分利用资源,比如在数据排序的时候,尽量使数据不下盘,在内存进行排序。因为在磁盘中读写的速度,肯定是不如内存的。



  • 静态调优一般架构师会根据业务特征确定集群部署方案,表定义,行列存,复制/哈希分布等设计的过程。方案和表一般确定下来,后期如果要改动,代价很大。

  • 可能作为有经验的人来说,收集统计信息,sql改写,数据库参数配置,plan hint等手段基本都做过,它属于执行态调优。但是没有经验的人可能只知道理论,不知道如何操作,久而久之,理论都忘记了。





  1. 防止单点(单个DN)数据多, 导致整个集群有效容量下降。

  2. 防止单点扫描,压力过大。

  3. 通过,分区,索引,局部聚簇实现。(后面会有实践操作)

  4. 选择关联列,做为分布列,比如用id关联,将id做为分布列,这样查询的时候,避免跨计算接点的数据流动,减少网络压力。

  5. 局部聚簇是列存储下独有的手段,通过把表数据按照指定列排序后存储,配合稀疏索引,可以实现表数据的快速扫描。【华为独有的科技】









三、伴随场景介绍





发现一个犯罪嫌疑人,还有他的车辆,我怎么通过数据挖掘来找到犯罪团伙的场景。



四、调优实践







Plan Information:在sql语句执行的时候,perf语句会包含非常多的执行动作,也会消耗很多的资源,我们通过perf把这些信息都记录下来。常用的是前2个。Plan 执行过程中每个算子的执行概要信息。比如:scan,join等。另外一个是算子,with信息。



Predicate Information: 算子信息,每条数据扫描,伴随的filter条件,join伴随的关联字段。







1.会对数据类似于分区,然后进行局部排序



2.并通过元数据信息记录这个区间的最大值和最小值。





CUNone:0我忽略了多少个数据段



CUSome:6我需要扫描多少个数据段



Scan的性能提升的两个主要策略



1)减少实际IO



a)索引



b)pck



c)分区



2)Scan压力均衡



a)调整分布列





数据批量入库的时候,按字段做一些排序。排完序之后,再入库。





导入表数据和统计信息。





Time:10.422ms



不包含PCK大概花了23.902ms



pck建立的场景和索引的建立场景是有点像的。











nestloop的在特定场景下,性能会非常好,比如小表join大表的时候,



hashjoin在大多数场景下,性能最优。大表join大表





hash join一般期望数据量小的表做内表,





hash join:137ms



merge join:775ms



nestloop:1137.9ms





问题总结:



1.truncate和delete快



答: truncate 整个文件都不读 delete标记元组 删除



2.PCK对入库的数据做局部排序影响较小。



3.MPP数据库性能瓶颈在哪些?



答:数据库性能瓶颈在具体数据处理业务场景,分布式架构场景下,业务CPU吃满了,瓶颈在CPU,内存吃满了,瓶颈在内存。



采集于华云数据仓库GaussDB DWS_数据仓库性能调优-version 5.0-华哥



点击关注,第一时间了解华为云新鲜技术~



发布于: 2020 年 09 月 08 日阅读数: 57
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
大厂运维必备技能:PB级数据仓库性能调优