摘要:GaussDB(DWS)是MPP并行架构,若表的数据存在倾斜情况,会引起一系列性能问题,影响用户体验,严重时可能会引起系统故障。因此能快速获取倾斜的表并整改是GaussDB(DWS)运维管理人员比较关注的事情。

本文分享自华为云社区《GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率》,原文作者:SeqList  。

GaussDB(DWS)是MPP并行架构,若表的数据存在倾斜情况,会引起一系列性能问题,影响用户体验,严重时可能会引起系统故障。因此能快速获取倾斜的表并整改是GaussDB(DWS)运维管理人员比较关注的事情。

需求描述

GaussDB(DWS)自身提供pgxc_get_table_skewness视图来查询倾斜情况,但实际实践过程中,该视图存在性能问题,且该视图的倾斜率计算有问题。实践过程中,该视图获取的某个表的倾斜率在不高的情况下(例如0.03),但实际上该表是存在倾斜情况的。

同时在很多时候我们需要获取一个schema下所有表的倾斜率,以排查倾斜问题,pgxc_get_table_skewness在产品文档中也描述是一个性能较差的视图。

因此项目实践过程中急需一个性能好且能表达倾斜情况的函数或视图。

设计思路

GaussDB(DWS)有获取每个DN的空间大小函数table_distribution,通过该函数,我们能快速获取每个DN的大小,同时可以根据每个DN的大小,来获取表的倾斜情况:

skewness = (max(dnsize) - avg(dnsize))*100/max(dnsize)

该倾斜率公式计算表的最大DN空间大小与平均DN空间大小的占比,能准确反映倾斜率,乘100为表现百分比。

实现过程

根据倾斜公式,我们得出以下SQL,该SQL能快速获取schema所有表的倾斜情况,下面以public为例:

select schemaname,tablename,sum(dnsize)/1024^3 dnsize_gb,(max(dnsize) - avg(dnsize))*100/nullif(max(dnsize),0) skewness_factor
from (
select schemaname
,tablename
,(regexp_split_to_array(tbl_dis,'[\,\(\)]+'))[4]::bigint as vprocname
,(regexp_split_to_array(tbl_dis,'[\,\(\)]+'))[5]::bigint as dnsize
from (
select nspname as schemaname
,relname as tablename
,table_distribution(nspname,relname)::text as tbl_dis
from pg_class a
inner join pg_namespace b
on a.relnamespace = b.oid
and a.relkind = 'r'
and b.oid not in (100)
)
)
where schemaname= 'public' group by 1,2 order by 3 desc;

结果样例如下,通过例子,可以看出来,test13这个表2GB,且发生严重的倾斜97%,同时store_sales1一个70GB的大表也存在倾斜情况58%

与GaussDB(DWS)的pgxc_get_table_skewness视图结果比对

使用GaussDB(DWS) 的系统视图pgxc_get_table_skewness,比较难看出来store_sales1存在倾斜情况。

此处我们使用的是系统视图pgxc_get_table_skewness获取

select * from  PGXC_GET_TABLE_SKEWNESS where schemaname = 'public' and tablename in ('store_sales1','test13');

从结果上看,skewratio字段,test13表能看出来存在严重倾斜情况,而store_sales1的skewratio值只有0.031,看不出来存在倾斜情况。但事实上该表是存在一定倾斜的

我们通过table_skewness看每个DN的数据分布验证,发现store_sales1的确存在一定倾斜。

总结:

GaussDB(DWS)的倾斜率获取视图pgxc_get_table_skewness的结果,虽能反映严重倾斜的表,但存在倾斜的大表则比较难看出来。同时该函数存在一定的性能问题,较多表的情况下基本执行不出来。

本文提供的倾斜率获取办法能比较准确反映表的倾斜情况且能叫快速获取整schema所有的表的倾斜率方法;该方法在测试过程中,数据量越大,表越多,执行的时间会越慢,测试一个schema约3800张表,共40TB左右的数据,在5分钟左右获取所有表的空间大小与倾斜率。

但本文提供的方法只能对单个schema操作,对整个数据库获取表空间大小与倾斜率,实测无法执行成功。若对时效性不要求的话,可以每天固定一个时间,已跑批的形式,获取一个库的所有表清单,使用table_distribution函数,一次一个表地获取表的空间信息,使用多并发执行,这样的方式能在一定时间内将所有表的空间情况执行完成。

例如:对整库有10万张表的情况,可以使用100个并发同时执行 insert into table_size_info select * from table_distribution('schema.table'); 这样的方式将10万张表的DN空间信息获取完成,然后使用本文的公式汇总获取每个表的倾斜率与空间总大小。

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料~

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

GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率相关推荐

  1. Sqoop导入数据发生数据倾斜问题 及更好解决

    Sqoop导入数据发生数据倾斜问题 及更好解决 一:问题 在生产环境中,由于数据是庞大的,且是复杂的 Sqoop抽数使用单实例报内存溢出以及抽数时间过长,决定采用sqoop的多实例并行抽数 官网:ht ...

  2. python获取交易软件数据_几行Python代码,轻松获取美股阿里巴巴的交易数据

    原创: 野马 菜鸟学Python 学Python可以干很多事情,比如爬虫,数据分析,机器学习,但是有一个非常小众的分支,不仅结合了两大高薪行业,而且还薪水非常诱人,就是量化金融岗位.目前Python已 ...

  3. 云小课|大数据时代的隐私利器-GaussDB(DWS)数据脱敏

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 数据仓库服务Ga ...

  4. 十八般武艺玩转GaussDB(DWS)性能调优:总体调优策略

    摘要: 性能调优是应用迁移或开发过程中的关键步骤,同时也在整个项目实施过程中占据很大的份量,本篇主要介绍数据库级别的性能调优思路和总体策略. 性能调优是应用迁移或开发过程中的关键步骤,同时也在整个项目 ...

  5. 华为云原生之数据仓库服务GaussDB(DWS)的深度使用与应用实践

    一.GaussDB(DWS)简介 ① 什么是 GaussDB(DWS)? 数据仓库服务 GaussDB(DWS) 是一种基于华为云基础架构和平台的在线数据处理数据库,提供即开即用.可扩展且完全托管的分 ...

  6. GaussDB(DWS) 数据仓库服务核心技术

    GaussDB(DWS)采用分布式shared-nothing集群架构,支持行列混合存储计算,集成高可用.高可靠.高安全.高可扩展.智能化技术栈. Shared-nothing架构 GaussDB(D ...

  7. 解决spark中遇到的数据倾斜问题

    一. 数据倾斜的现象 多数task执行速度较快,少数task执行时间非常长,或者等待很长时间后提示你内存不足,执行失败. 二. 数据倾斜的原因 常见于各种shuffle操作,例如reduceByKey ...

  8. hive解决数据倾斜问题_八种解决 Spark 数据倾斜的方法

    有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数 ...

  9. Spark数据倾斜的完美解决

    数据倾斜解决方案 数据倾斜的解决,跟之前讲解的性能调优,有一点异曲同工之妙. 性能调优中最有效最直接最简单的方式就是加资源加并行度,并注意RDD架构(复用同一个RDD,加上cache缓存).相对于前面 ...

最新文章

  1. 面试彩蛋2:分别用循环和递归实现下列函数
  2. 三种途径助物联网改变业务 省心省时省成本
  3. harris角点检测_角点检测(2) - harris算子 - 理论与Python代码
  4. AI自动标注神器!支持多通道、大尺幅数据
  5. 1010. 一元多项式求导
  6. Native snappy library not available: this version of libhadoop was built without snappy support
  7. 【Python】 配置解析ConfigParser 命令行参数解析optparser
  8. 【版本发布】JEECG 3.6.2 移动能力版发布,快速开发平台
  9. Vijos P1196吃糖果游戏[组合游戏]
  10. 17 任务调度相关类综述——Live555源码阅读(一)任务调度相关类
  11. python与人工智能的关系_广东江门的北大青鸟学校了解到人工智能与Python关系
  12. Python基础语法-01-类及对象
  13. JAVA集合操作的利器:CollectionUtils
  14. ae导出gif插件_AE脚本-快速输出GIF动图格式插件脚本 GifGun 1.7.7 Win/Mac 支持AE CC 2019...
  15. ZigBee模块学习
  16. windows10网络共享及重启后失效的解决办法
  17. matexs不支持鸿蒙,华为mateXs为何从兼容安卓改成基于安卓,是鸿蒙不行还是另有隐情...
  18. uniapp m3u8格式视频加载
  19. Matlab中Robotics toolbox的安装及使用
  20. 我是才学网络工程的,希望各位多多支持

热门文章

  1. Bootstrap3 表单支持的控件
  2. CAN笔记(16) CANOpen简介
  3. 运算器为计算机提供了计算与逻辑,【单选题】运算器为计算机提供了计算与逻辑功能,因此称它为()....
  4. 如何用计算机做出折线图,曲线图怎么做-怎样在电脑上做曲线图电脑上如何做曲线图 – 手机爱问...
  5. c语言链表错误,C语言创建链表错误之通过指针参数申请动态内存实例分析
  6. oracle dcd设置,Oracle配置DCD避免会话被防火墙强制断开
  7. matlab cable,Matlab_Wireless_Communications_example MATLAB通信技术的全部例程(全)包括WCDMA - 下载 - 搜珍网...
  8. java raw types,java – 为Raw Types抛出不一致的ClassCastException
  9. (matlab)自定义图像(matlab)
  10. Python开发【Part 7】:常用模块