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 ...
随机推荐
- Android-ContentProvider读取/新增/操作系统联系人数据
想要访问Android操作系统的ContentProvider就需要明白以下原理: 在Android操作系统里面的 /packsges/目录: apps: 很多的系统应用,例如:联系人,浏览器,音乐播 ...
- java-02 JDK安装与环境变量配置&安装编程IDE
1.JDK下载安装与环境变量的配置 1.1 官方JDK 下载地址 大家可以到Oracle中国官方网站下载JDK,也可已 通过这个链接下载 (推荐大家下载1.8版本,这个版本是当前比较流行的版本) 也可 ...
- Backup--压缩备份和TDE
1>对启用TDE的数据库,压缩备份的备份文件大小与未压缩备份的备份文件大小差不多(压缩比为 1 ) 2>对启用TDE的数据库,压缩备份的备份时间远高于未压缩备份 2>对启用TDE的数 ...
- C++三种野指针及应对/内存泄露
C++三种野指针及应对/内存泄露 野指针,也就是指向不可用内存区域的指针.如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃. 野指针不是NULL指针,是指 ...
- coffee主题美化内容概要
1.具备自动生浮动标题目录(可隐藏) 2.页首目录概要 3.主标题有明显的标志背景颜色,二级标题缩进合适 4.一级.二级标题下图片缩进合适 5.博客签名 6.背景音乐列表 7.打赏 8.联系方式(QQ ...
- todolist作业涉及知识点
window.event对象详细介绍 1.event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定 ...
- linux kvm虚拟机安装
1.上传ISO文件,这里采用OEL5.8x64iso 2.开始安装OEL5.8 (1)raw格式磁盘 virt- --vcpus= --disk path=/data/test02.img,size= ...
- MySQL大数据高并发处理之-查询的优化
http://www.php1.cn/Content/MySQL_DaShuJuGaoBingFaChuLiZhi_-_ChaXunDeYouHua.html
- svn 冲突Skipped ‘inm/inm/templates‘ -- Node remains in conflict
svn在删除后,提交,更新操作后可能会报, svn update inm/inm -r 1586 Updating ‘inm/inm‘: Password: Skipped ‘inm/inm/temp ...
- 基本bash shell命令
以下列举一些常用的bash shell命令,在使用时方便查找. 访问Linux系统上的手册:man 命令.例:man ps 手册是由分页程序来显示的,可以通过点击 空格,回车,向上和向下箭头 ...