MySQL中怎么优化数据倾斜_Greenplum 调优--数据倾斜排查(一)

对于分布式数据库来说,QUERY的运行效率取决于最慢的那个节点。

当数据出现倾斜时,某些节点的运算量可能比其他节点大。除了带来运行慢的问题,还有其他的问题,例如导致OOM,或者DISK FULL等问题。

如何监控倾斜

1、监控数据库级别倾斜

2、监控表级倾斜

出现数据倾斜的原因和解决办法

1.分布键选择不正确,导致数据存储分布不均。

例如选择的字段某些值特别多,由于数据是按分布键VALUE的HASH进行分布的,导致这些值所在的SEGMENT的数据可能比而其他SEGMENT多很多。

分布键的选择详见:

2.查询导致的数据重分布,数据重分布后,数据不均。

例如group by的字段不是分布键,那么运算时就需要重分布数据。

解决办法1:

由于查询带来的数据倾斜的可能性非常大,所以Greenplum在内核层面做了优化,做法是:

先在segment本地聚合产生少量记录,将聚合结果再次重分布,重分布后再次在segment聚合,最后将结果发到master节点,

有必要的话在master节点调用聚合函数的final func(已经是很少的记录数和运算量)。

例子:

tblaocol表是c1的分布键,但是我们group by使用了c398字段,因此看看它是怎么做的呢?请看执行计划的解释。

对于非分布键的分组聚合请求,Greenplum采用了多阶段聚合如下:

第一阶段,在SEGMENT本地聚合。(需要扫描所有数据,这里不同存储,前面的列和后面的列的差别就体现出来了,行存储的deform开销,

在对后面的列进行统计时性能影响很明显。)

第二阶段,根据分组字段,将结果数据重分布。(重分布需要用到的字段,此时结果很小。)

第三阶段,再次在SEGMENT本地聚合。(需要对重分布后的数据进行聚合。)

第四阶段,返回结果给master,有必要的话master节点调用聚合函数的final func(已经是很少的记录数和运算量)。

3.内核只能解决一部分查询引入的数据重分布倾斜问题,还有一部分问题内核没法解决。例如窗口查询。

使用窗口函数时,Greenplum需要先按窗口中的分组对数据进行重分布,这一次重分布就可能导致严重的倾斜。实际上内核层优化才是最好的解决办法,例如以上窗口函数,由于我们只需要取c2分组中c3最小的一条记录。因此也可以在每个节点先取得一条,再重分布,再算。

不通过修改内核,还有什么方法呢?

3.1 Mapreduce任务就很好解决,Greenplum的mapreduce接口调用方法如下:

3.2 通过写PL函数也能解决。例如

小结

数据倾斜的原因可能是数据存储的倾斜,QUERY执行过程中数据重分布的倾斜。

数据倾斜可能引入以下后果:

计算短板

oom

disk full

数据倾斜的解决办法:

如果是存储的倾斜,通过调整更加均匀的分布键来解决。(也可以选择使用随机分布,或者使用多列作为分布键)。

如果是QUERY造成的倾斜,Greenplum内核对group by已经做了优化,即使分组字段不是分布键,通过多阶段聚合,可以消除影响。

如果是窗口函数QUERY造成的倾斜,目前内核没有对这部分优化,首先会对窗口函数的分组字段所有数据进行重分布,如果这个分组字段数据有严重倾斜,那么会造成重分布后的某些节点数据量过大。解决办法有mapreduce或pl函数。

参考

《Greenplum 内存与负载管理最佳实践》

《Greenplum 最佳实践 - 数据分布黄金法则 - 分布列与分区的选择》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成为优秀的Java程序员要具备哪些技能?

Java是热门的编程语言,热衷技术,掌握一门语言,我们最重要的是知识的积累和运用,那我们需要掌握哪些技能才能成为优秀的Java程序员呢?小编来为大家解答一波。 1.拥有扎实的基础和深刻理解能力 Java 程序员&#xff0c…

mysql登陆 慢_mysql登陆慢问题解决

mysql登陆慢问题解决现象:系统正常, 本地登陆速度很快. 查询等操作没有问题. 日志无报错信息. 但远程登陆异常缓慢, 甚至需要等20分钟. 登陆后检查mysql> show processlist;存在大量处于login状态的未授权用户进程.解决:在my.cnf文件中加入参数 “skip-name-resolve” , 重新…

Java 平台有哪几个版本?

Java 平台的版本有哪些?我相信只要接触过Java入门的小伙伴都知道,但是问起你具体的细节你不一定能全部答的上来。 一、 Java SE(Java Platform,Standard Edition) Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务…

java编译源文件_Java实现编译源文件(Java源码)

代码案例:import java.util.ArrayList;import java.util.List;import javax.tools.DiagnosticCollector;import javax.tools.JavaCompiler;import javax.tools.JavaFileObject;import javax.tools.StandardJavaFileManager;import javax.tools.ToolProvider;public …

学习Java能够从事哪些工作?

学习Java编程能够胜任哪些工作?在互联网行业快节奏的发展,根据以往的经验,做一个简要的分析,掌握了Java这门技术,就业面也是很广的,不管是电脑方面的软硬件开发还是手机的软硬件开发Java都是必不可少的技术…

java面试题 sql_Java面试题总结之数据库与SQL语句

1、有3个表,表结构如下:Student学生表(学号,姓名,性别,年龄,组织部门)Course课程表(编号,课程名称)Sc选课表(学号,课程编号,成绩)。1)写一个SQL 语句,查询选修了’计算机…

Java 程序员必须掌握的 Linux 命令

作为一名程序员,小编觉得还是应该懂得linux,不说深入,起码的使用还是要会,能深入当然最好了,平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令。在做完项目上线时候,需要与…

java 二进制文件 数据库_java从数据库中读取二进制文件并....

弑天下首先你需要确定附件的类型及名称。然后下载很简单的,根据下载的请求返回response.addHeader ("content-type","application/RFC822");response.addHeader ("Content-Disposition","attachment; filenameword,pdf");O…

java 负数 位移运算_Java中的位移运算

在Java中&#xff0c;位移运算属于基本运算&#xff0c;符号是<>&#xff0c;即向左位移和向右位移。在Java中只有整数才能位移&#xff0c;所以其他的不考虑&#xff0c;位移运算是将整数在内存中表示的二进制进行位移&#xff0c;所以在Java中分为正数和负数的位移。对…

Alibaba之MySQL宝典_阿里巴巴内部 MySQL宝典 意外流出!极致经典,堪称数据库的天花板...

MySQL 是一个关系型数据库&#xff0c;使用 SQL 语言进行增删改查操作&#xff0c;目前属于 Oracle 旗下的产品。MySQL 数据库开源免费&#xff0c;能够跨平台&#xff0c;支持分布式&#xff0c;性能也不错&#xff0c;可以和 PHP、Java 等 Web 开发语言完美配合&#xff0c;非…

Java 哪些事最困扰你?

相信在学Java编程的小伙伴都会遇到很多的问题&#xff0c;特别是当我们写完程序的时候突然报个错&#xff0c;然后找了半天&#xff0c;却没发现哪里报错了&#xff0c;“我在哪”&#xff0c;“我在干什么”&#xff0c;“我写了什么”“怎么会这样”,会很爆炸的心态&#xff…

java数组 arraylist_JAVA 用数组实现 ArrayList

我们知道 ArrayList 是一个集合&#xff0c;它能存放各种不同类型的数据&#xff0c;而且其容量是自动增长的。那么它是怎么实现的呢&#xff1f;其实 ArrayList 的底层是用 数组实现的。我们查看 JDK 源码也可以发现。而用数组实现集合的原理有两点&#xff1a;1、能自动扩容2…

java sha1加密ascii码_如何使用加密芯片完成SHA1摘要运算

1. 测试目标使用LKT系列加密芯片进行SHA1摘要运算并使用openssl验证正确性2. 测试环境本示例LKT加密芯片运行环境为windows系统、测试软件LCS KIT、LKT-K100开发板。Linux ubuntu 14.04系统、OpenSSL 1.0.1f 6 Jan 2014。3. 测试步骤注意&#xff1a;“->”表示使用LCS KIT软…

这些Java基础面试知识点,你都掌握了吗?

想了解一下学Java的小伙伴们&#xff0c;在学习Java的时候有没有去总结知识点&#xff0c;哪些知识点我们没有掌握&#xff0c;哪些知识点是我们还没有掌握的&#xff0c;今天小编来发掘一些Java基础面试知识点&#xff0c;不知道大家掌握没有。 小编分享的一些知识点&#xf…

mysql怎么获取系统_MySQL获取系统性能和状态代码

代码如下:#!/bin/kshINTERVAL5PREFIX$INTERVAL-sec-statustouch /tmp/runningRUNFILE/tmp/runningmy -e show global variables >> mysql-variableswhile test -e $RUNFILE; dofile$(date %F_%I)sleep$(date %s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}&qu…

学习Java的几大难题,你们都解决了吗?

Java很难学&#xff0c;遇到很多问题&#xff0c;刚学的小伙伴多多少少还是有一些抱怨的&#xff0c;但是这都不是事&#xff0c;只要下定决心&#xff0c;我们就一定可以&#xff01;下面小编来分享一下学习Java的一些难题。 一、面向对象的历史演变 搞清楚面向对象的历史演…

python中编函数_在python中编写函数

Aaron Hall..10递归实现这是一个相当优雅的递归实现,为了清晰起见,它使用了Python 3的功能:def strict_compose(*funcs):*funcs, penultimate, last funcsif funcs:penultimate strict_compose(*funcs, penultimate)return lambda *args, **kwargs: penultimate(last(*args, …

零基础学Java的朋友值得一看

Java这门编程语言虽然入门比较简单&#xff0c;但是要想学好它&#xff0c;并非一日之寒。很多人开始学习Java时候会被突如其来的概念定义搞的晕头转向。类、对象、接口、构造函数、方法、继承、多态、各种修饰符等概念扑面而来的时候&#xff0c;脑子里顿时变成了一片浆糊&…

deflater java_java.util.zip 类 Deflater - Java 中文参考手册

java.lang.Objectjava.util.zip.Deflaterpublic class Deflaterextends Object此类使用流行的 ZLIB 压缩程序库为通用压缩提供支持。ZLIB 压缩程序库最初是作为 PNG 图形标准的一部分开发的&#xff0c;不受专利的保护。有关该规范的完整描述&#xff0c;请参见 java.util.zip …

Java程序员的自我修养?

论Java程序员的自我修养&#xff0c;相信很多人一开始都觉得软件以后会前程似锦&#xff0c;可以一展才华&#xff0c;每一个参加Java软件开发培训班或者自学Java编程的学员都相信Java的发展前景&#xff0c;对于零基础学员而言自学Java软件开会有很大的难度&#xff0c;但是只…