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

一、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-华哥

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

大厂运维必备技能:PB级数据仓库性能调优的更多相关文章

  1. 运维监控篇Zabbix简单的性能调优

    Zabbix是一款高性能的分布式监控报警系统.比如现在常见的家用台式机配置处理器I5-3470.内存4GB1600MHz.硬盘7200rpm就能够监控1000台左右的HOST,是的没错Zabbix就是 ...

  2. 运维必备技能 WEB 日志分析

    文章节选自<Netkiller Monitoring 手札> 20.2. Web 20.2.1. Apache Log 1.查看当天有多少个IP访问: awk '{print $1}' l ...

  3. centos7系统管理和运维实战——运维必备的网络管理技能(1)

    运维必备的网络管理技能 一.网络管理协议: 1.简单的两个概念:    DHCP(动态主机配置协议):如果网络结构要更改,需要从新初始化网络参数,手机用动态主机配置协议可以避免这个问题.客户端可以从D ...

  4. hadoop 性能调优与运维

    hadoop 性能调优与运维 . 硬件选择 . 操作系统调优与jvm调优 . hadoop运维 硬件选择 1) hadoop运行环境 2)  原则一: 主节点可靠性要好于从节点 原则二:多路多核,高频 ...

  5. 优化系统资源ulimit《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》

    优化系统资源ulimit<高性能Linux服务器构建实战:运维监控.性能调优与集群应用> 假设有这样一种情况,一台Linux 主机上同时登录了10个用户,在没有限制系统资源的情况下,这10 ...

  6. 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》

    优化Linux内核参数/etc/sysctl.conf  sysctl  <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...

  7. Java性能调优攻略全分享,5步搞定!(附超全技能图谱)

    对于很多研发人员来说,Java 性能调优都是很头疼的问题,为什么这么说?如今,一个简单的系统就囊括了应用程序.数据库.容器.操作系统.网络等技术,线上一旦出现性能问题,就可能要你协调多方面组件去进行优 ...

  8. 性能调优之Java系统级性能监控及优化

    性能调优之Java系统级性能监控及优化   对于性能调优而言,通常我们需要经过以下三个步骤:1,性能监控:2,性能剖析:3,性能调优 性能调优:通过分析影响Application性能问题根源,进行优化 ...

  9. 站长、运维必备| 网站可用性监控产品 OneAPM Cloud Test 上线

    白天太忙,到了晚上才发现网站一天都没有访问量? 直到有用户投诉才发现网站完全无法访问? 还要每月付费才能及时了解网站可用情况? 监控频率太低,不能及时发现网站不可用? 第三方服务宕机,导致您的网站不可 ...

随机推荐

  1. GitHub/Git配置与简单的使用

    今天我开始了初步的学习,首先从陌生的开始下手,GitHub,自己通过查询网络上的资料有了初步的理解与认识.进行了Git与GitHub的配置. 一.前期准备 首先下载Git,Git官网->http ...

  2. Java—包装类/System类/Math类/Arrays类/大数据运算/Collection接口/Iterator迭代器

    基本类型包装类 8种基本类型对应的包装类如: 将字符串转成基本类型: 将基本数值转成字符串有3种方式: 基本类型直接与””相连接即可:34+" " 调用String的valueOf ...

  3. 从udaf谈flink的state

    1.前言 本文主要基于实践过程中遇到的一系列问题,来详细说明Flink的状态后端是什么样的执行机制,以理解自定义函数应该怎么写比较合理,避免踩坑. 内容是基于Flink SQL的使用,主要说明自定义聚 ...

  4. TestLink使用指南

    TestLink安装上之后,局域网内用户可以登陆使用,下面介绍本软件的使用方式. 1.TestLink简介 TestLink是基于Web的开源测试管理工具,用户可以使用这个工具创建测试项目和测试用例, ...

  5. Dotnet Core Public API的安全实践

    公开API的安全,其实更重要.   一.API的安全 作为一个Dotnet Core的老司机,写API时,能兼顾到API的安全,这是一种优雅.   通常,我们会用认证来保证API的安全,无敌的Auth ...

  6. TS数据流PAT和PMT分析

    TS流,是基于packet的位流格式,每个packet是188个字节或者204个字节(一般是188字节,204字节格式是在188字节的packet后面加上16字节的CRC数据,其他格式相同),解析TS ...

  7. SparkSQL DSL 随便写写

    @Testdef functionTest() = { Logger.getLogger("org").setLevel(Level.WARN) val spark = getSp ...

  8. 微信公众号请求code时报redirect_uri 参数错误

    (1) 检查微信公众号中"接口权限"--"网页授权获取用户基本信息"中的网页授权域名.域名不带http(s) (2)如果在拼接跳转到微信授权接口的URL时,使用 ...

  9. python字典的概念与基本操作

    字典是非常常用的一种数据结构,它与json格式的数据非常相似,核心就是以键值对的形式存储数据,关于Python中的字典做如下四点说明: 1.构造字典对象需要用大括号表示 {},每个字典元素都是以键值对 ...

  10. akka-grpc - 基于akka-http和akka-streams的scala gRPC开发工具

    关于grpc,在前面的scalaPB讨论里已经做了详细的介绍:google gRPC是一种全新的RPC框架,在开源前一直是google内部使用的集成工具.gRPC支持通过http/2实现protobu ...