Greenplum功能调研

Greenplum 介绍

文章目录

      • Greenplum 介绍
        • 1. 背景介绍
        • 2. 特点
        • 3. 架构
        • 4. MPP结构
        • 5. MVCC
        • 6. 语法结构
        • 7. GreenPlum集群常用命令
        • 7. 维护
        • 8. 参考

1. 背景介绍

  • Greenplum。公司成立于2003年,2006年推出了首款产品,其主营业务关注在数据仓库和商业智能方面.
  • Greenplum基于postgresql开发,架构采用了MPP(大规模并行处理)。在 MPP 系统中,每个 SMP节点也可以运行自己的操作系统、数据库等。
    换言之,每个节点内的 CPU 不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的.

2. 特点

  • 各个节点间shared-nothing: 各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,
    各处理单元之间通过协议通信,并行处理和扩展能力更好。各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。
    Share-Nothing架构在扩展性和成本上都具有明显优势。
  • MPP结构: 大规模并行处理系统是由许多松耦合处理单元组成的,借助MPP这种高性能的系统架构,
    Greenplum可以将TB级的数据仓库负载分解,并使用所有的系统资源并行处理单个查询。
  • MVCC: 与事务型数据库系统通过锁机制来控制并发访问的机制不同, GPDB使用多版本控制(Multiversion Concurrency Control/MVCC)保证数据一致性。
    这意味着在查询数据库时,每个事务看到的只是数据的快照,其确保当前的事务不会看到其他事务在相同记录上的修改。据此为数据库的每个事务提供事务隔离。
    使用MVCC而不是使用锁机制的最大优势是,MVCC对查询(读)的锁与写的锁不存在冲突,并且读与写之间从不互相阻塞。
  • 遵循SQL标准一致性, 基本兼容SQL语法(psql), 因此查询较为灵活, 绝大部分场景都能支持
  • 支持多方式的授权管理及审计,表级别粒度
  • 近乎线性的在线扩展能力- 单节点master的cpu和带宽可能会成为瓶颈

3. 架构

  • 组成: Greenplum主要由Master节点、Segment节点、interconnect三大部分
    • Master节点不存放任何用户数据,只是对客户端进行访问控制和存储表分布逻辑的元数据
    • Segment节点负责数据的存储,可以对分布键进行优化以充分利用Segment节点的io性能来扩展整集群的io性能
      存储方式可以根据数据热度或者访问模式的不同而使用不同的存储方式。
      一张表的不同数据可以使用不同的物理存储方式:行存储、列存储、外部表
    • interconnect负责不同PostgreSQL实例(即 segment)之间的通信
  • 存储结构: Greenplum提供称为“多态存储”的灵活存储方式。多态存储可以根据数据热度或者访问模式的不同而使用不同的存储方式。
    一张表的不同数据可以使用不同的物理存储方式。支持的存储方式包含:
    • 行存储:行存储是传统数据库常用的存储方式,特点是访问比较快,多列更新比较容易。
    • 列存储:列存储按列保存,不同列的数据存储在不同的地方(通常是不同文件中)。适合一次只访问宽表中某几个字段的情况。列存储的另外一个优势是压缩比高。
    • 外部表:数据保存在其他系统中例如HDFS,数据库只保留元数据信息。

4. MPP结构

  • Master节点不存放任何用户数据,只是对客户端进行访问控制和存储表分布逻辑的元数据
  • Segment节点负责数据的存储,可以对分布键进行优化以充分利用Segment节点的io性能来扩展整集群的io性能
  • 存储方式可以根据数据热度或者访问模式的不同而使用不同的存储方式。一张表的不同数据可以使用不同的物理存储方式:行存储、列存储、外部表
    Greenplum功能调研_第1张图片

5. MVCC

  • MVCC优化的目标是读操作不会阻塞写操作,写操作也不会阻塞读操作。
  • 实现方式: 在 update一个数据时,将创建数据项目的新版本,同时保留旧版本,并做上标记,即采用多版本的方法来解决读和写之间的冲突。
    由于写的时候旧版本数据不会被删除,读和写发生在了不同版本的数据上,读和写操作便不会发生冲突。这种方法允许Greenplum在读写同时进行的情况下,
    仍然能够提供高并发特性。
  • 每一个数据 都有xmin(新增修改操作的事物id)和xmax(删除操作的事物id)两个属性, 每次事物操作都会生成一个快照,
    快照内容包括xmin xmax 和 running 即正在执行的事物id集合
  • 数据可见的条件: xmin有值 且 xmin小于快照的xmin 且 不在running中 且 (xmax无值 或 有值但在running中 或 有值但超了快照的xmax)
    Greenplum功能调研_第2张图片

6. 语法结构

  • 遵循SQL标准一致性, 基本兼容SQL语法(psql) 具体请看Greenplum特点概要

  • psql示例

    切到系统用户postgres 使用psql命令登录PostgreSQL控制台。
    这时相当于系统用户postgres以同名数据库用户的身份,登录数据库,这是不用输入密码的。如果一切正常,系统提示符会变为"postgres=#",表示这时已经进入了数据库控制台。

    psql -d postgres
    

    以下的命令都在控制台内完成。
    第一件事是使用\password命令,为postgres用户设置一个密码。

    \password postgres
    

    第二件事是创建数据库用户dbuser(刚才创建的是Linux系统用户),并设置密码。

    CREATE USER dbuser WITH PASSWORD 'password';
    

    第三件事是创建用户数据库,这里为exampledb,并指定所有者为dbuser。

    CREATE DATABASE exampledb OWNER dbuser;
    

    第四件事是将exampledb数据库的所有权限都赋予dbuser,否则dbuser只能登录控制台,没有任何数据库操作权限。

    GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;
    

    使用\q命令退出控制台(也可以直接按ctrl+D)。

    \q
    

    连接gp命令:

    psql -d 库名 -h ip地址 -p 端口号 -U 用户名;
    

    gp 添加分区:

    alter table 表名 add partition d20190611 values('20190611') ;
    

    gp 新建表:

    alter table 表名 rename column old_column_name to new_column_name;  
    

    gp 添加字段:

    alter table 表名 add column update_flag varchar(255);
    

    gp 删除字段:

    ALTER TABLE 表名 DROP COLUMN rt_gather_price_remark;
    

    gp 修改字段的类型:

    alter table 表名 alter column rt_gather_price_remark varchar(200) text; 
    

    gp 删除表:

    drop table if exists 表名;
    

    gp 删除分区:

    alter table 表名 DROP partition d20190729;
    

    gp 清空分区数据:

    alter table 表名 truncate partition d20191010;
    

    gp 删除进程:

    select pg_cancel_backend(407367);
    

    gp 查看表结构:

    SELECT a.attnum,a.attname AS field,t.typname AS type,a.attlen AS length,a 
    .atttypmod AS lengthvar,a.attnotnull AS notnull from pg_class c,pg_attribute a,pg_type t where 
    c.relname='表名' and a.attnum>0 and a.attrelid=c.oid and a.atttypid=t.oid order by attnum ;
    

7. GreenPlum集群常用命令

命令 参数 作用
gpstate -b => 显示简要状态
gpstate -c => 显示主镜像映射
gpstart -d => 指定数据目录(默认值: M A S T E R D A T A D I R E C T O R Y ) g p s t a t e − e = > 显示具有镜像状态问题的片段 g p s t a t e − f = > 显示备用主机详细信息 g p s t a t e − i = > 显示 G R I P L U M 数据库版本 g p s t a t e − m = > 显示镜像实例同步状态 g p s t a t e − p = > 显示使用端口 g p s t a t e − Q = > 快速检查主机状态 g p s t a t e − s = > 显示集群详细信息 g p s t a t e − v = > 显示详细信息 g p c o n f i g 命令参数作用 g p c o n f i g − c = > − − c h a n g e p a r a m n a m e 通过在 p o s t g r e s q l . c o n f 文件的底部添加新的设置来改变配置参数的设置。 g p c o n f i g − v = > − − v a l u e v a l u e 用于由 − c 选项指定的配置参数的值。默认情况下,此值将应用于所有 S e g m e n t 及其镜像、 M a s t e r 和后备 M a s t e r 。 g p c o n f i g − m = > − − m a s t e r v a l u e m a s t e r v a l u e 用于由 − c 选项指定的配置参数的 M a s t e r 值。如果指定,则该值仅适用于 M a s t e r 和后备 M a s t e r 。该选项只能与 − v 一起使用。 g p c o n f i g − m a s t e r o n l y = > 当被指定时, g p c o n f i g 将仅编辑 M a s t e r 的 p o s t g r e s q l . c o n f 文件。 g p c o n f i g − r = > − − r e m o v e p a r a m n a m e 通过注释掉 p o s t g r e s q l . c o n f 文件中的项删除配置参数。 g p c o n f i g − l = > − − l i s t 列出所有被 g p c o n f i g 工具支持的配置参数。 g p c o n f i g − s = > − − s h o w p a r a m n a m e 显示在 G r e e n p l u m 数据库系统中所有实例( M a s t e r 和 S e g m e n t )上使用的配置参数的值。如果实例中参数值存在差异,则工具将显示错误消息。使用 − s = > 选项运行 g p c o n f i g 将直接从数据库中读取参数值,而不是从 p o s t g r e s q l . c o n f 文件中读取。如果用户使用 g p c o n f i g 在所有 S e g m e n t 中设置配置参数,然后运行 g p c o n f i g − s 来验证更改,用户仍可能会看到以前的(旧)值。用户必须重新加载配置文件( g p s t o p − u )或重新启动系统( g p s t o p − r )以使更改生效。 g p c o n f i g − − f i l e = > 对于配置参数,显示在 G r e e n p l u m 数据库系统中的所有 S e g m e n t ( M a s t e r 和 S e g m e n t )上的 p o s t g r e s q l . c o n f 文件中的值。如果实例中的参数值存在差异,则工具会显示一个消息。必须与 − s 选项一起指定。 g p c o n f i g − − f i l e − c o m p a r e 对于配置参数,将当前 G r e e n p l u m 数据库值与主机( M a s t e r 和 S e g m e n t )上 p o s t g r e s q l . c o n f 文件中的值进行比较。 g p c o n f i g − − s k i p v a l i d a t i o n 覆盖 g p c o n f i g 的系统验证检查,并允许用户对任何服务器配置参数进行操作,包括隐藏参数和 g p c o n f i g 无法更改的受限参数。当与 − l 选项(列表)一起使用时,它显示受限参数的列表。警告:使用此选项设置配置参数时要格外小心。 g p c o n f i g − − v e r b o s e 在 g p c o n f i g 命令执行期间显示额外的日志信息。 g p c o n f i g − − d e b u g 设置日志输出级别为调试级别。 g p c o n f i g − ? ∣ − h ∣ − − h e l p 显示在线帮助。 g p s t a r t 命令参数作用 g p s t a r t − a = > 快速启动 ∣ g p s t a r t − d = > 指定数据目录(默认值: MASTER_DATA_DIRECTORY) gpstate -e => 显示具有镜像状态问题的片段 gpstate -f => 显示备用主机详细信息 gpstate -i => 显示GRIPLUM数据库版本 gpstate -m => 显示镜像实例同步状态 gpstate -p => 显示使用端口 gpstate -Q => 快速检查主机状态 gpstate -s => 显示集群详细信息 gpstate -v => 显示详细信息 gpconfig 命令 参数 作用 gpconfig -c => --change param_name 通过在postgresql.conf 文件的底部添加新的设置来改变配置参数的设置。 gpconfig -v => --value value 用于由-c选项指定的配置参数的值。默认情况下,此值将应用于所有Segment及其镜像、Master和后备Master。 gpconfig -m => --mastervalue master_value 用于由-c 选项指定的配置参数的Master值。如果指定,则该值仅适用于Master和后备Master。该选项只能与-v一起使用。 gpconfig -masteronly =>当被指定时,gpconfig 将仅编辑Master的postgresql.conf文件。 gpconfig -r => --remove param_name 通过注释掉postgresql.conf文件中的项删除配置参数。 gpconfig -l => --list 列出所有被gpconfig工具支持的配置参数。 gpconfig -s => --show param_name 显示在Greenplum数据库系统中所有实例(Master和Segment)上使用的配置参数的值。如果实例中参数值存在差异,则工具将显示错误消息。使用-s=>选项运行gpconfig将直接从数据库中读取参数值,而不是从postgresql.conf文件中读取。如果用户使用gpconfig 在所有Segment中设置配置参数,然后运行gpconfig -s来验证更改,用户仍可能会看到以前的(旧)值。用户必须重新加载配置文件(gpstop -u)或重新启动系统(gpstop -r)以使更改生效。 gpconfig --file => 对于配置参数,显示在Greenplum数据库系统中的所有Segment(Master和Segment)上的postgresql.conf文件中的值。如果实例中的参数值存在差异,则工具会显示一个消息。必须与-s选项一起指定。 gpconfig --file-compare 对于配置参数,将当前Greenplum数据库值与主机(Master和Segment)上postgresql.conf文件中的值进行比较。 gpconfig --skipvalidation 覆盖gpconfig的系统验证检查,并允许用户对任何服务器配置参数进行操作,包括隐藏参数和gpconfig无法更改的受限参数。当与-l选项(列表)一起使用时,它显示受限参数的列表。 警告: 使用此选项设置配置参数时要格外小心。 gpconfig --verbose 在gpconfig命令执行期间显示额外的日志信息。 gpconfig --debug 设置日志输出级别为调试级别。 gpconfig -? | -h | --help 显示在线帮助。 gpstart 命令 参数 作用 gpstart -a => 快速启动| gpstart -d => 指定数据目录(默认值: MASTERDATADIRECTORYgpstatee=>显示具有镜像状态问题的片段gpstatef=>显示备用主机详细信息gpstatei=>显示GRIPLUM数据库版本gpstatem=>显示镜像实例同步状态gpstatep=>显示使用端口gpstateQ=>快速检查主机状态gpstates=>显示集群详细信息gpstatev=>显示详细信息gpconfig命令参数作用gpconfigc=>changeparamname通过在postgresql.conf文件的底部添加新的设置来改变配置参数的设置。gpconfigv=>valuevalue用于由c选项指定的配置参数的值。默认情况下,此值将应用于所有Segment及其镜像、Master和后备Mastergpconfigm=>mastervaluemastervalue用于由c选项指定的配置参数的Master值。如果指定,则该值仅适用于Master和后备Master。该选项只能与v一起使用。gpconfigmasteronly=>当被指定时,gpconfig将仅编辑Masterpostgresql.conf文件。gpconfigr=>removeparamname通过注释掉postgresql.conf文件中的项删除配置参数。gpconfigl=>list列出所有被gpconfig工具支持的配置参数。gpconfigs=>showparamname显示在Greenplum数据库系统中所有实例(MasterSegment)上使用的配置参数的值。如果实例中参数值存在差异,则工具将显示错误消息。使用s=>选项运行gpconfig将直接从数据库中读取参数值,而不是从postgresql.conf文件中读取。如果用户使用gpconfig在所有Segment中设置配置参数,然后运行gpconfigs来验证更改,用户仍可能会看到以前的(旧)值。用户必须重新加载配置文件(gpstopu)或重新启动系统(gpstopr)以使更改生效。gpconfigfile=>对于配置参数,显示在Greenplum数据库系统中的所有SegmentMasterSegment)上的postgresql.conf文件中的值。如果实例中的参数值存在差异,则工具会显示一个消息。必须与s选项一起指定。gpconfigfilecompare对于配置参数,将当前Greenplum数据库值与主机(MasterSegment)上postgresql.conf文件中的值进行比较。gpconfigskipvalidation覆盖gpconfig的系统验证检查,并允许用户对任何服务器配置参数进行操作,包括隐藏参数和gpconfig无法更改的受限参数。当与l选项(列表)一起使用时,它显示受限参数的列表。警告:使用此选项设置配置参数时要格外小心。gpconfigverbosegpconfig命令执行期间显示额外的日志信息。gpconfigdebug设置日志输出级别为调试级别。gpconfig?hhelp显示在线帮助。gpstart命令参数作用gpstarta=>快速启动gpstartd=>指定数据目录(默认值:MASTER_DATA_DIRECTORY)
gpstart -q => 在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。
gpstart -m => 以维护模式连接到Master进行目录维护。例如:$ PGOPTIONS=‘-c gp_session_role=utility’ psql postgres
gpstart -R => 管理员连接
gpstart -v => 显示详细启动信息
gpstop
命令 参数 作用
gpstop -a => 快速停止
gpstop -d => 指定数据目录(默认值: M A S T E R D A T A D I R E C T O R Y ) g p s t o p − m = > 维护模式 g p s t o p − q = > 在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。 g p s t o p − r = > 停止所有实例,然后重启系统 g p s t o p − u = > 重新加载配置文件 p o s t g r e s q l . c o n f 和 p g h b a . c o n f g p s t o p − v = > 显示详细启动信息 g p s t o p − M f a s t = > 快速关闭。正在进行的任何事务都被中断。然后滚回去。 g p s t o p − M i m m e d i a t e = > 立即关闭。正在进行的任何事务都被中止。不推荐这种关闭模式,并且在某些情况下可能导致数据库损坏需要手动恢复。 g p s t o p − M s m a r t = > 智能关闭。如果存在活动连接,则此命令在警告时失败。这是默认的关机模式。 g p s t o p − − h o s t h o s t n a m e = > 停用 s e g m e n t s 数据节点,不能与 − m 、 − r 、 − u 、 − y 同时使用集群恢复命令参数作用 g p r e c o v e r s e g − a = > 快速恢复 g p r e c o v e r s e g − i = > 指定恢复文件 g p r e c o v e r s e g − d = > 指定数据目录 g p r e c o v e r s e g − l = > 指定日志文件 g p r e c o v e r s e g − r = > 平衡数据 g p r e c o v e r s e g − s = > 指定配置空间文件 g p r e c o v e r s e g − o = > 指定恢复配置文件 g p r e c o v e r s e g − p = > 指定额外的备用机 g p r e c o v e r s e g − S = > 指定输出配置空间文件激活备库流程命令参数作用 g p a c t i v a t e s t a n d b y − d 路径 ∣ 使用数据目录绝对路径,默认: MASTER_DATA_DIRECTORY) gpstop -m => 维护模式 gpstop -q => 在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。 gpstop -r => 停止所有实例,然后重启系统 gpstop -u => 重新加载配置文件 postgresql.conf 和 pg_hba.conf gpstop -v => 显示详细启动信息 gpstop -M fast => 快速关闭。正在进行的任何事务都被中断。然后滚回去。 gpstop -M immediate => 立即关闭。正在进行的任何事务都被中止。不推荐这种关闭模式,并且在某些情况下可能导致数据库损坏需要手动恢复。 gpstop -M smart => 智能关闭。如果存在活动连接,则此命令在警告时失败。这是默认的关机模式。 gpstop --host hostname => 停用segments数据节点,不能与-m、-r、-u、-y同时使用 集群恢复 命令 参数 作用 gprecoverseg -a => 快速恢复 gprecoverseg -i => 指定恢复文件 gprecoverseg -d => 指定数据目录 gprecoverseg -l => 指定日志文件 gprecoverseg -r => 平衡数据 gprecoverseg -s => 指定配置空间文件 gprecoverseg -o => 指定恢复配置文件 gprecoverseg -p => 指定额外的备用机 gprecoverseg -S => 指定输出配置空间文件 激活备库流程 命令 参数 作用 gpactivatestandby -d 路径 | 使用数据目录绝对路径,默认: MASTERDATADIRECTORYgpstopm=>维护模式gpstopq=>在安静模式下运行。命令输出不显示在屏幕,但仍然写入日志文件。gpstopr=>停止所有实例,然后重启系统gpstopu=>重新加载配置文件postgresql.confpghba.confgpstopv=>显示详细启动信息gpstopMfast=>快速关闭。正在进行的任何事务都被中断。然后滚回去。gpstopMimmediate=>立即关闭。正在进行的任何事务都被中止。不推荐这种关闭模式,并且在某些情况下可能导致数据库损坏需要手动恢复。gpstopMsmart=>智能关闭。如果存在活动连接,则此命令在警告时失败。这是默认的关机模式。gpstophosthostname=>停用segments数据节点,不能与mruy同时使用集群恢复命令参数作用gprecoversega=>快速恢复gprecoversegi=>指定恢复文件gprecoversegd=>指定数据目录gprecoversegl=>指定日志文件gprecoversegr=>平衡数据gprecoversegs=>指定配置空间文件gprecoversego=>指定恢复配置文件gprecoversegp=>指定额外的备用机gprecoversegS=>指定输出配置空间文件激活备库流程命令参数作用gpactivatestandbyd路径使用数据目录绝对路径,默认:MASTER_DATA_DIRECTORY
gpactivatestandby -f | 强制激活备份主机
gpactivatestandby -v | 显示此版本信息
始化备Master
命令 参数 作用
gpinitstandby -s 备库名称 => 指定新备库
gpinitstandby -D => debug 模式
gpinitstandby -r => 移除备用机
参考文档
https://gp-docs-cn.github.io/docs/utility_guide/admin_utilities/gprecoverseg.html
https://gpcc.docs.pivotal.io/430/topics/overview.html

7. 维护

  • Greenplum数据库中使用的MVCC事务并发模型会产生很多的历史数据。如需删除需要用VACUUM命令来回收。
    VACUUM命令还会收集表级的统计信息,因此还是有必要去清理追加优化表。
    清理逻辑 在每一个Segment上,会创建一个新的Segment文件 把可见行从当前Segment复制到该文件中。当Segment文件被拷贝完时,将会安排删除原始的Segment文件并且让新 的Segment文件变得可用。
  • 如果一个Segment文件中隐藏行和所有行的比率低于一个阈值(默认是10),该Segment文件不会被紧缩。

8. 参考

  • Greenplum网站 https://cn.greenplum.org/
  • Greenplum 中文文档 http://docs-cn.greenplum.org/v6/homenav.html
  • greenplum数据库类型说明
  • greenplum开源版本(注: 企业版和开源版功能是差不多,不过前者,就是服务更多,功能更全。)
    • 其官方手册 https://greenplum.org/documentation/
    • 其下载介质地址 https://github.com/greenplum-db/gpdb/releases
  • greenplum商业版本(注: 下载介质必须要付费,官方手册可以在线或离线看)
    • 其官方手册 http://gpdb.docs.pivotal.io/570/main/index.html)
    • 其下载介质地址 https://network.pivotal.io/products/pivotal-gpdb/
  • 使用Jmeter测试教程
  • Greenplum常用问题

你可能感兴趣的:(greenplum)