greenplum表的distributed key值查看
greenplum属于分布式的数据库,MPP+Share nothing的体系,查询的效率很快.不过,这是建立在数据分散均匀的基础上的.如果DK值设置不合理的话,完全有可能出现所有数据落在单个节点上的情况,这就体现不出优势来.因此,DK值的设置是否合适是建表的时候,需要考虑的重要因素之一.
查看表(table_name)的数据在节点的分布情况:
select gp_segment_id,count(*) from table_name group by gp_segment_id;
如果数据有严重倾斜的话,即某些节点的数据量过大,表示DK值需要重新调整.调整语句为alter table table_name set distirbuted by(col1,col2,...);
现在有个问题是:如何发现哪些DK值设置不合理的表呢?可以参照之前写的文章:数据分布查看,执果索因调整
这里介绍的是如何把DK值展现出现,一般设置单列(该列为日期类型,每天一份的话)的表,就很有可能出现DK值不合理的情况。我们需要利用到三张表:
pg_class --object属性表,relkind表示object属性,'r'代表table
pg_attribute --展现详细的列
gp_distribution_policy --存储DK值
首先,创建一个类型,用来显示function的结果集.
create type dk_table_type as
(
table_name varchar,
dk_cols varchar
);
然后,用上面三张表组合起来,得到相应的所需要的结果信息.
CREATE OR REPLACE FUNCTION get_table_dk()
RETURNS SETOF dk_table_type AS
$BODY$
DECLARE
v_cur_tb cursor for
select d.nspname||'.'||a.relname,b.attname
from
pg_class a
inner join
pg_attribute b
on a.oid=b.attrelid
inner join
gp_distribution_policy c
on a.oid=c.localoid
inner join pg_namespace d
on a.relnamespace=d.oid
where a.relkind='r' and b.attnum=any(c.attrnums)
order by d.nspname||'.'||a.relname,b.attname,b.attnum;
v_tb varchar(500):='';
v_tb_new varchar(500):='';
v_dk_col varchar(100):='';
v_dk_cols varchar(1000):='';
v_record dk_table_type;
BEGIN
open v_cur_tb;
loop
fetch v_cur_tb into v_tb_new,v_dk_col;
if not found THEN
exit;
end if;
if v_tb = '' and v_dk_cols = '' then
v_tb := v_tb_new;
v_dk_cols:=v_dk_col;
ELSEIF v_tb <> v_tb_new THEN
select v_tb,v_dk_cols into v_record;
return next v_record;
v_tb := v_tb_new;
v_dk_cols:=v_dk_col;
ELSE
v_dk_cols:=v_dk_cols||','||v_dk_col;
end if;
end loop;
select v_tb,v_dk_cols into v_record;
return next v_record;
close v_cur_tb;
end;
$BODY$
LANGUAGE plpgsql VOLATILE;
然后,执行select * from get_table_dk()就可以获得表以及其对应的DK值(列),从而可以直观的发现是否有些表需要调整,此时就用上面的gp_segment_id来验证.如果是的话,就进行相应的调整.
greenplum表的distributed key值查看的更多相关文章
- linux下C++ STL hash_map的使用以及使用char *型变量作为Key值的一大“坑”
计算机编程中经常会用到hash表,而在C++中,使用STL编程更是少不了的.本文将介绍STL中hash_map的使用.在hash_map中使用自定义类型作为key值的方法以及在使用char *类型作为 ...
- 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
题目描述 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出. 输入描述: 先输入键值对的个数然后输入成对的index和value值 ...
- OVS 内核KEY值提取及匹配流表代码分析
原文链接:http://ry0117.com/2016/12/24/OVS内核KEY值提取及匹配流表代码分析/ 当开启OVS后,创建datapath类型为system的网桥并他添加相关接口,OVS网桥 ...
- Cassandra二级索引原理——新创建了一张表格,同时将原始表格之中的索引字段作为新索引表的Primary Key,并且存储的值为原始数据的Primary Key,然后再通过pk一级索引找到真正的值
1.什么是二级索引? 我们前面已经介绍过Cassandra之中有各种Key,比如Primary Key, Cluster Key 等等.如果您对这部分概念并不熟悉,可以参考之前的文章: [Cassan ...
- 数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出
此题如果直接使用有序的TreeMap就不需要这样折腾: 1.map的key值唯一性,故就不在需要set集合来去重 2.使用map后利用key的唯一性,把序列号相同的数据直接加在一起,代码会很简洁 pa ...
- Greenplum 表空间和filespace的用法
转载:https://yq.aliyun.com/articles/190 Greenplum支持表空间,创建表空间时,需要指定filespace.postgres=# \h create table ...
- SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...
- EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的
我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...
- 删除带外键的表【foreign key constraint fails】报错
title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibern ...
随机推荐
- 深入理解java虚拟机(七)类加载的时机
Class 文件中描述的各种信息都必须加载到虚拟机中才能运行和使用.而虚拟机怎么加载这些Class 文件呢?Class 文件进入到虚拟机中会发生什么变化呢? 虚拟机类加载机制是指 虚拟机把描述类的数据 ...
- redis整理の主从复制
redis 主从复制配置和使用都非常简单.通过主从复制可以允许多个 slave server 拥有和 master server 相同的数据库副本. 特点: (1).master 可以拥有多个 sla ...
- ZKEACMS 模板组件扩展
前言 如果你还不知道ZKEACMS,不妨先了解一下. ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来 官方地址:http://www.zkea.net/zkeacms ...
- django drf安装和doc生成
1.打开drf官网https://www.django-rest-framework.org/,把相关的包pip install 2.INSTALLED_APPS添加drf 3.url配置 4.tes ...
- 当页面滚动到距顶部一定高度时某DIV自动隐藏和显示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 淘宝内部分享:MySQL & MariaDB性能优化 【转】
MySQL· 5.7优化·Metadata Lock子系统的优化 背景 引入MDL锁的目的,最初是为了解决著名的bug#989,在MySQL 5.1及之前的版本,事务执行过程中并不维护涉及到的所有表的 ...
- [ActionScript 3.0] 创建倒影
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Display ...
- click事件和jquery选项卡
一. click事件 实现效果是点击切换按钮,可以重复的切换背景色 <!DOCTYPE html> <html lang="en"> <head> ...
- Ionic开发Hybrid App问题总结
http://ionichina.com/topic/5641b891b903cba630e25f10 http://www.cnblogs.com/parry/p/issues_about_buil ...
- UIView中的tintColor和renderingMode
tintColor 每一个view都有一个tintcolor,类似于魔法色,实现类似于换肤的效果. 每一个view的subview都集成view的tintcolor,当然subview可以指定自己的t ...