GreenPlum的那些事《三》——常用操作

我们前面已经说了,GPDB是一个列式数据库,数据库都有什么特性呢?都能做什么呢?熟悉MySQL,Oracle的同学可能就比较清楚关系型数据库的管理,下面我们就来说下GPDB的一些管理和常用操作。

数据库常用操作

数据库常用操作分为:创建数据库、创建schema、创建资源池、创建角色、创建用户、创建表。下面我们一一来说下GPDB这些常用操作,和关系型数据库MYSQL有什么不同呢?

  1. 创建数据库

    gp_sydb=# CREATE DATABASE GPTEST;
    CREATE DATABASE

删除数据库

gp_sydb=# DROP DATABASE GPTEST;
DROP DATABASE

你也可以通过 createdb 创建数据库

 [gpadmin@mpp01 ~]$ createdb -h mpp01 -p 5432 GPTEST 

查看创建的数据库:

gp_sydb=# \l
                  List of databases
   Name    |  Owner  | Encoding |  Access privileges  
-----------+---------+----------+---------------------
 GPTEST    | gpadmin | UTF8     | 
 gp_sydb   | gpadmin | UTF8     | 
 postgres  | gpadmin | UTF8     | 
 template0 | gpadmin | UTF8     | =c/gpadmin          
                                : gpadmin=CTc/gpadmin
 template1 | gpadmin | UTF8     | =c/gpadmin          
                                : gpadmin=CTc/gpadmin
(5 rows)
  1. 创建schema

创建schema

GPTEST=# CREATE SCHEMA bdp;
CREATE SCHEMA

查看schema

GPTEST=# \dn
       List of schemas
        Name        |  Owner  
--------------------+---------
 bdp                | gpadmin
 gp_toolkit         | gpadmin
 information_schema | gpadmin
 pg_aoseg           | gpadmin
 pg_bitmapindex     | gpadmin
 pg_catalog         | gpadmin
 pg_toast           | gpadmin
 public             | gpadmin
(8 rows)

查看当前的schema

GPTEST=# SELECT current_schema();
 current_schema 
----------------
 public
(1 row)

可以看到当前schema是public,这是创建用户的时候,我们没有给它分配schema,那就是用默认的schema public。
把新建的schema赋给数据库gptest

gptest=# \dn
       List of schemas
        Name        |  Owner  
--------------------+---------
 bdp                | gpadmin
 gp_toolkit         | gpadmin
 information_schema | gpadmin
 pg_aoseg           | gpadmin
 pg_bitmapindex     | gpadmin
 pg_catalog         | gpadmin
 pg_toast           | gpadmin
 public             | gpadmin
(8 rows)

gptest=# ALTER DATABASE GPTEST SET search_path TO bdp,                                                                                                    public, pg_catalog;
ALTER DATABASE
gptest=# SELECT current_schema();
 current_schema 
----------------
 bdp
(1 row)

可以看到赋了新的schema。

  1. 创建角色

创建角色,如果有很多用户对于一批表都有一样的权限,这时候可以创建一个角色,把这些权限先赋给角色,然后把角色赋权给各个用户。

gptest=# create role selectbdp;
CREATE ROLE
gptest=# \du
                                                                      List of roles
 Role name |                                                           Attributes                                                            | Member of 
-----------+---------------------------------------------------------------------------------------------------------------------------------+-----------
 bdp01     |                                                                                                                                 | {}
 gpadmin   | Superuser, Create role, Create DB, Ext gpfdist Table, Wri Ext gpfdist Table, Ext http Table, Ext hdfs Table, Wri Ext hdfs Table | {}
 selectbdp | Cannot login                                                                                                                    | {}

gptest=# 

可以看到角色已经创建成功。
赋权角色。

gptest=# grant selectbdp to gpadmin;     
GRANT ROLE

角色其实就是一个用户组。

  1. 创建用户:
gptest=# create user bdp01 WITH PASSWORD 'passwd123';
NOTICE:  resource queue required -- using default resource queue "pg_default"
CREATE ROLE
gptest=# 

使用用户登录:

 psql -Ubdp01 -d gptest -w 'passwd123'

发现报错了:

[gpadmin@mpp01 gpseg-1]$ psql -Ubdp01 -d gptest -w 'passwd123'
Password for user bdp01: 
psql: FATAL:  no pg_hba.conf entry for host "[local]", user "bdp01", database "gptest", SSL off

GPDB登录需要在pg_hba.conf文件中添加信任的用户:

local    all         bdp01      trust

添加后,使配置文件生效,再次登录:

[gpadmin@mpp01 gpseg-1]$ psql -Ubdp01 -d gptest -w 'passwd123'
psql: warning: extra command-line argument "passwd123" ignored
psql (8.3.23)
Type "help" for help.

gptest=> 

登录成功!

  1. 创建资源队列

为什么要创建资源队列呢?我们知道一个数据库肯定不是给一个用户使用的,通常是有ETL用户,进行数据加载,数据清洗。还有WEB端用户进行查询,还有个人用户进行开发查询使用等等。这么多用户,如果不进行资源队列管控,那么就会出现资源争抢现象,影响线上应用功能。比如一个新手开发人员写了一个比较菜的查询语句,占用了大量资源,此时数据库的其他查询用户都需要排队等待了。再比如加载数据是需要使用大量资源,那么也会影响查询性能,以上你会发现,你需要把不同类型的操作进行资源隔离,这就是为什么要有资源队列了。
查看已有的资源队列:

gptest=> SELECT rolname, rsqname FROM pg_roles, gp_toolkit.gp_resqueue_status
gptest-> WHERE pg_roles.rolresqueue=gp_toolkit.gp_resqueue_status.queueid;
  rolname  |  rsqname   
-----------+------------
 bdp01     | pg_default
 selectbdp | pg_default
 gpadmin   | pg_default
(3 rows)

创建一个新的资源队列:

gptest=#  create resource queue load_queue with (active_statements=3,MEMORY_LIMIT='1024MB',PRIORITY=LOW);                                                 CREATE QUEUE

把创建的资源队列赋权给刚才创建的用户bdp01:

gptest=# ALTER USER bdp01  resource queue load_queue;                                              
ALTER ROLE

再次查询资源池分配情况:

gptest=# SELECT rolname, rsqname FROM pg_roles, gp_toolkit.gp_resqueue_status                                                                             WHERE pg_roles.rolresqueue=gp_toolkit.gp_resqueue_status.queueid;
  rolname  |  rsqname   
-----------+------------
 bdp01     | load_queue
 selectbdp | pg_default
 gpadmin   | pg_default
(3 rows)

可以看到bpd01已经使用了新的资源池了。

  • 创建表
    简单的建表语句,此处不在讲解了,来说两个地方,一个是分区,一个是分布键。
  • 分区:
    来看下分区的数据结构

分区是把一张大表按照适合的维度进行分割,通过表的继承,规则,约束实现。
并不是每个表都适合分区,只有很大的表才适合分区,应为分区多了会增加表的元数据信息,特别是多级分区。如果一个表被按照日和城市划分并且有1000个日以及1000个城市,那么分区的总数就是一百万。列存表会把每一列存在一个物理表中,因此如果这个表有100个列,系统就需要为该表管理一亿个文件。一方面Linux的iNode可能不会有这么大,就会出现文件查询报错等,分区过多了,对于数据库停止和恢复也会造成很大影响的。所以建立分区表的时候,对分区进行自动的创建和删除,以保障合适的数据周期很重要。

  • 分布键 在MPP架构中,一个查询是需要从所有segment获取数据然后在master汇总得到结果的。那么这样,影响查询性能的就有两个问题,查询最慢的segment和网络带宽。分布键就是为了解决第一个问题,让数据尽可能均匀的分布在每个segment上,从而避免数据倾斜导致的查询效率问题。第二个网络问题,MPP数据集群搭建要求集群内部为万兆网连接,并且机器配置一样,从而避免影响。
    分布键一般选择主键,比如手机号等。
    尽量选择经常需要 JOIN 的列,当关联键和分布键均一致时,可以在 Segment 中完成 JOIN,不需要重分布或者广播小表。

以上就是GPDB简单的管理流程,后面我们会再介绍更深入的查询优化和管理知识。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容