• GreenPlum的学习心得和知识总结(三)|Greenplum数据库快速入门



    注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:

    1、GreenPlum中文官网首页,点击前往
    2、GreenPlum git仓库,点击前往本人GreenPlum gitee仓库,点击前往
    3、PostgreSQL数据库仓库链接,点击前往
    4、YouTube greenplum视频主页,点击前往
    5、Bilibili greenplum视频主页,点击前往


    1、本文内容全部来源于开源社区 GitHub和以上博主的贡献,本文也免费开源(可能会存在问题,评论区等待大佬们的指正)
    2、本文目的:开源共享 抛砖引玉 一起学习
    3、本文不提供任何资源 不存在任何交易 与任何组织和机构无关
    4、大家可以根据需要自行 复制粘贴以及作为其他个人用途,但是不允许转载 不允许商用 (写作不易,还请见谅 💖)




    文章快速说明索引

    学习目标:

    开源、多云、并行的大数据平台。Greenplum 是全球领先的大数据分析引擎,专为分析、机器学习和AI而打造!接下来一段时间,除了PostgreSQL数据库的相关内容分享 也会把GreenPlum数据库的学习心得及相关知识总结记录下来!后面我可能会去gp工作,不管怎么说 gp都是非常值得一学和大力推广!


    学习内容:(详见目录)

    1、Greenplum数据库快速入门


    学习时间:

    2022年08月07日 11:18:01


    学习产出:

    1、PostgreSQL数据库基础知识回顾 1个
    2、CSDN 技术博客 1篇


    学习资料相关分享

    这块可以参见本人之前的博客:


    因为在下是做PostgreSQL数据库内核开发的,这里只介绍一本书:


    打造内核开发环境

    在上一篇,我们介绍了GreenPlum数据库 内核开发 的环境配置,如下:


    接下来,我们将花一段时间来学习一下GreenPlum的基础知识及相关背景,我们这里学习的资料来源:

    gp数据库快速入门

    我们这里主要看一下Greenplum数据库的发展历程和现状,以及主要特性。关于如何安装、部署Greenplum数据库我们不再赘述!

    Greenplum数据库是基于MPP(Massively Parallel Processing)架构的开源大数据平台,主要特性如下:

    1. 具有良好的弹性和线性扩展能力
    2. 内置并行存储、并行通信、并行计算和并行优化功能
    3. 兼容SQL标准
    4. 具有强大、高效的PB级数据存储、处理和实时分析能力
    5. 同时支持涵盖OLTP型业务的混合负载,可部署于企业裸机、容器、私有云和公有云中

    目前已为全球金融、电信、制造等行业的大量核心生产系统提供支撑。关于其适用场景:

    • Greenplum主要定位在OLAP领域,利用Greenplum MPP数据库做大数据计算或分析平台非常适合,例如:数据仓库系统、ODS系统、ACRM系统、历史数据管理系统、电信流量分析系统、移动信令分析系统、SANDBOX自助分析沙箱、数据集市等等

    • 不擅长做OLTP交易系统,所谓交易系统,就是高频的交易型小规模数据插入、修改、删除,每次事务处理的数据量不大,但每秒钟都会发生几十次甚至几百次以上交易型事务


    2015年10月,Pivotal正式把投资超过10年的Greenplum产品开源,Greenplum因此成为世界上第一款成熟的开源MPP数据库!

    • Greenplum5.0是开源之后发布的第一个稳定版本,Greenplum5.x保持大约1.5个月一个版本的发布速度
    • Greenplum6.0于2019年发布,包含许多重要特性。例如:Greenplum 6.0的内核升级到PostgreSQL 9.4.20,大幅提升HTAP(OLAP+ OLTP)性能,支持复制表(Replicated Table)、在线扩容(Online Expand)和一致性哈希(Jump Consistent Hash),支持磁盘配额配置(Disk Quota)、Zstandard压缩算法、灵活数据分布、基于流复制的全新高可用机制等
    • Greenplum主干分支开发非常活跃,众多社区期待的特性稳健推进中,处于业界领先地位

    目前Greenplum正在进行内核升级(pg12),gp7大概在明年发布:

    gpadmin@gpadmin0:~/gpdbtest/bin$ ./psql -d postgres
    psql (12beta2)
    Type "help" for help.
    
    postgres=# select version();
                                                                                                     version                                                                                                 
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     PostgreSQL 12beta2 (Greenplum Database 7.0.0-alpha.0+dev.15592.ge2b23ac456 build dev) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0, 64-bit compiled on Aug  1 2022 18:22:31
    (1 row)
    
    postgres=#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Greenplum生态的日益完善得益于对SQL标准的支持,Greenplum可以与支持SQL标准的各种上下游产品实现集成,包括PgAdmin4、Informatica、Conf luent、HVR、Cognos、SAS、Talend、Qlik、Tableau、Anaconda、Microstrategy、Boundless、Zattset、Datometry等,涵盖ETL、商业智能、高级分析、可视化、集成分析、GIS数据处理、迁移、安全和管理等各个领域。


    gp数据库的特性

    1. 开放源代码。Greenplum数据库在2015年由Pivotal公司开源,遵从Apache Licence 2.0协议,官方网站为 http://greenplum.org。代码库在Github上的链接为 https://github. com/greenplum-db/gpdb
    2. 超大规模和高性能。Greenplum数据库采用大规模无共享处理架构MPP,将多台服务器组成一个强大的计算平台,实现高效的海量并行运算。Greenplum数据库可以支持1000个节点以上的集群,管理的数据规模从100TB到数PB,可以满足大多数企业的数据处理需求

    在这里插入图片描述

    此外为了要达到高性能,除了要有高效的并行处理架构,还要有查询优化器生成最优的查询计划。随着数据量的持续增加以及查询越来越复杂,性能对查询优化器的依赖也越来越强。Greenplum数据库除了支持基于PostgreSQL的查询优化器以外,还专门开发了一个新的查询优化器ORCA。ORCA是一款自顶向下的基于Cascades框架的查询优化器,目前已经成为企业版Greenplum数据库的默认优化器。相比基于PostgreSQL的查询优化器,ORCA查询优化器能使某些查询的性能提升10~1000倍

    gpadmin@gpadmin0:~/gpdbtest/bin$ ./psql -d postgres
    psql (12beta2)
    Type "help" for help.
    
    postgres=# show optimizer;
     optimizer 
    -----------
     on
    (1 row)
    
    postgres=#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    // src/backend/utils/misc/guc_gp.c
    
    	{
    		{"optimizer", PGC_USERSET, QUERY_TUNING_METHOD,
    			gettext_noop("Enable GPORCA."),
    			NULL
    		},
    		&optimizer,
    #ifdef USE_ORCA
    		true,
    #else
    		false,
    #endif
    		check_optimizer, NULL, NULL
    	},
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    1. 高可用性。Greenplum提供 多级容错机制 确保整个系统的高可用性。主节点Master通过Standby Master进行备份,每个数据节点Primary Segment分别配置一个Mirror Segment节点进行备份,同时确保同一组Primary Segment与Mirror Segment节点不在同一物理机,从而降低由于宕机而导致数据丢失的风险

    2. 通用性。Greenplum数据库拥有完善的SQL标准支持,包括SQL92、SQL99、SQL2003,以及OLAP扩展,是对SQL标准支持最好的开源商用数据库系统之一。同时,由于Greenplum数据库基于PostgreSQL,因此继承了PostgreSQL对于JDBC、ODBC、C、Python API等接口的支持。Greenplum数据库的通用性确保了任何应用程序都可以方便地与之集成并进行数据访问

    3. 多态存储。Greenplum数据库提供 多态存储 的灵活存储方式。用户可以根据数据热度或者访问模式的不同而使用不同的存储方式,以获得更好的查询性能。在Greenplum数据库中,一张表的数据水平分割到各个节点。用户可以为一张表按照一定规则(比如日期)创建分区表。一张表的各个子分区表可以使用不同的物理存储方式。支持的存储方式包括:

    /*
    - 1)行存储,数据以行的形式存储在数据页里,适合频繁更新的查询
    - 2)列存储,数据以列的形式存储在数据页里,适合OLAP分析型查询
    - 3)外部表,数据保存在其他文件系统中,比如HDFS、S3,数据库只保留元数据信息。
    
    用户可以根据数据的“热度”决定采用何种方式存储,比如,需要频繁更新的数据采用行存储,很少访问的历史数据采用外部表形式
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 高扩展性和高效资源管理。得益于MPP的无共享架构,Greenplum数据库具有良好的、线性的在线扩展能力。用户可以为运行中的Greenplum数据库增加硬件资源。Greenplum数据库提供了高效的资源管理机制,根据用户的业务逻辑将资源合理地分配给查询任务,避免查询任务因资源不足而得不到响应。Greenplum资源管理主要包括对并发查询数量的限制,查询执行时内存、CPU资源使用的限制等。Greenplum在资源管理方面也提供了多级保证。在数据库连接(Connection)级别上,可以控制用户接入数量。在数据库会话(Session)级别上,可以设定每个用户的资源组来管理任务进入情况,同时控制查询并发及查询资源使用占比。在查询语句级别上,可以为查询语句设置优先级,并且可以在语句执行中实时调整,从而优化特定查询,缩短其运行时间。Greenplum数据库提供两种资源管理方式:资源队列(Resource Queue)和资源组(Resource Group),两者的详细介绍可以在Greenplum官方网站上查阅,目前推荐使用资源组方式
    2. 高效数据加载。Greenplum数据库利用MPP架构可以高效地并行加载数据,即允许数据从多个文件系统通过多个主机上的多个网卡进行加载,从而达到非常高的数据传输率。Greenplum数据库可以读出和写入多种类型的外部数据源,包括文本文件、XML文件、S3上的文件、Gemfire、Web服务器以及Apache开源软件系统HDFS、HIVE、HBase、Kafka、Spark等,同时支持数据压缩,以及GBK/UTF8/ISO8859等字符集间的自动转换
    3. 高级数据分析。Greenplum数据库支持各种过程化编程语言,包括PL/PostgreSQL、PL/R、PL/Python、PL/Java、PL/Perl等语言扩展。PL/Python和PL/R作为不可信(untrusted)语言,用户自定义函数只能由数据库管理员创建,Greenplum数据库针对此问题提供了PL/Container扩展。PL/Container通过对用户自定义的Python或R代码容器化执行,实现了与Greenplum集群的计算隔离,同时可自由定制容器镜像。因此,PL/Container提供了更高的安全性和灵活性。在高级数据分析方面,通过Greenplum数据库的MADlib扩展模块,用户可以很方便地利用MPP架构完成大规模数据的并行分析。同时,MADlib可以与PivotalR一同使用,一个PivotalR包允许用户使用R客户端同Greenplum的数据进行交互
    4. 良好的监控管理和运维体验。Greenplum数据库提供基于Web的可视化工具—Greenplum Command Center(简称GPCC)。GPCC可以监控Greenplum数据库系统的性能、集群健康状态、查询执行,以及系统资源使用情况等

    注:如上几大特性,以后我们会逐一进行学习和分享 Greenplum数据库是一个非常强大的数据库,对其的学习不可能一蹴而就 我们后面会花上大量的时间和实践来对其深入的学习,这里的学习是从一名内核开发人员的角度进行的 可能不太适合初学者和各位DBA们!


    gp数据库的组成

    Greenplum基于PostgreSQL开发,面向数据仓库应用的关系型MPP数据库。Greenplum数据库是典型的Master/Slave架构,一个Greenplum集群通常由一个Master节点、一个Standby Master节点以及多个Segment节点组成,节点之间通过高速网络互连 如下图所示:

    在这里插入图片描述

    如上:其高可用性可见一斑!

    在这里插入图片描述

    • Master是整个数据库的入口,终端用户连接Master执行查询:(建立与客户端的连接和管理;SQL的解析并形成执行计划;向Segment分发执行计划;收集Segment的执行结果;不存储业务数据,只存储数据字典)
    • Standby Master为Master提供高可用(High Availability)支持
    • Segment节点是工作节点(业务数据的存储和存取;用户查询SQL的执行
    • Mirror Segment为Segment提供高可用支持
    • 高速网络Interconnect(Master-Segment、Segment-Segment的数据传输组件)这里想一想UDP协议,我们后面再细谈

    Master节点接收到用户发起的查询语句SQL时,会对查询语句进行查询编译、查询优化等操作,生成并行查询计划,并分发到Segment节点执行。Segment执行完毕,会将数据发回Master节点,最终呈现给用户!


    gp常用操作演示

    下面来看一个示例,进行实操一下!

    postgres=# \d+ test
                                                  Table "public.test"
     Column  |            Type             | Collation | Nullable | Default | Storage | Stats target | Description 
    ---------+-----------------------------+-----------+----------+---------+---------+--------------+-------------
     id      | integer                     |           | not null |         | plain   |              | 
     curtime | timestamp without time zone |           |          |         | plain   |              | 
    Indexes:
        "test_pkey" PRIMARY KEY, btree (id)
    Distributed by: (id)
    Access method: heap
    
    postgres=# select gp_segment_id, * from test;
     gp_segment_id | id | curtime 
    ---------------+----+---------
    (0 rows)
    
    postgres=# insert into test select * from generate_series(1,10);
    INSERT 0 10
    postgres=# select gp_segment_id, * from test limit 10;
     gp_segment_id | id | curtime 
    ---------------+----+---------
                 0 |  2 | 
                 0 |  3 | 
                 0 |  4 | 
                 0 |  7 | 
                 0 |  8 | 
                 1 |  1 | 
                 2 |  5 | 
                 2 |  6 | 
                 2 |  9 | 
                 2 | 10 | 
    (10 rows)
    
    postgres=#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    如上:创建表的DDL语句中的distributed by关键字需要特别注意,这个关键字指定了数据的分布方式,目的在于将数据平均分布到各个Segment。Greenplum支持两种分布方式:哈希(Hash)分布和随机(Random)分布。哈希分布是选择一个或者多个列作为分布键,通过哈希函数决定该条记录在插入时存储到哪个Segment节点上。如果采用随机分布,数据记录会被随机地分布到各个Segment节点上。如果选择哈希分布,需要根据实际情况谨慎地选择分布键,否则容易出现数据倾斜(Skew),导致查询性能下降!

    postgres=# create table test2 (id int) DISTRIBUTED RANDOMLY;
    CREATE TABLE
    postgres=# create table test3 (id int primary key) DISTRIBUTED RANDOMLY;
    ERROR:  PRIMARY KEY and DISTRIBUTED RANDOMLY are incompatible
    postgres=# 
    postgres=# \d+ test2
                                       Table "public.test2"
     Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
    --------+---------+-----------+----------+---------+---------+--------------+-------------
     id     | integer |           |          |         | plain   |              | 
    Distributed randomly
    Access method: heap
    
    postgres=# insert into test2 select * from generate_series(1,10);
    INSERT 0 10
    postgres=# explain select gp_segment_id, * from test2;
                                      QUERY PLAN                                  
    ------------------------------------------------------------------------------
     Gather Motion 3:1  (slice1; segments: 3)  (cost=0.00..431.00 rows=1 width=8)
       ->  Seq Scan on test2  (cost=0.00..431.00 rows=1 width=8)
     Optimizer: Pivotal Optimizer (GPORCA)
    (3 rows)
    
    postgres=# select gp_segment_id, * from test2;
     gp_segment_id | id 
    ---------------+----
                 0 |  1
                 0 |  3
                 0 |  8
                 0 | 10
                 1 |  5
                 1 |  7
                 2 |  2
                 2 |  4
                 2 |  6
                 2 |  9
    (10 rows)
    
    postgres=#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    关于实现原理和内部技术是我们后面学习的内容,这里不再过多阐述!其支持的表类型,如下:

    在这里插入图片描述
    创建表的DDL语句还可以通过WITH子句定义表的存储类型:

    • APPENDONLY=TRUE指定创建一个append-optimized表(简称AO表),如果不加这个选项或者使用APPENDONLY=FALSE,创建的表就是堆表(heap表)
    • ORIENTATION=COLUMN指定创建一个列存储的表,列存储的表只能是AO表
    • COMPRESSTYPE指定表的压缩类型,可选值有ZLIB、QUICKLZ、RLE_TYPE,或者不压缩
    • 只有append-optimized表可以被压缩
    • PARTITION BY选项可以定义在哪些列上对表数据进行分区
    postgres=# create table test3 (id int primary key) with(appendonly=true,ORIENTATION=COLUMN, COMPRESSTYPE=zlib);
    ERROR:  append-only tables do not support unique indexes
    postgres=# 
    postgres=# create table test3 (id int) with(appendonly=true,ORIENTATION=COLUMN, COMPRESSTYPE=zlib);
    NOTICE:  Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'id' as the Greenplum Database data distribution key for this table.
    HINT:  The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
    CREATE TABLE
    postgres=# \d+ test3
                                                                 Table "public.test3"
     Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Compression Type | Compression Level | Block Size | Description 
    --------+---------+-----------+----------+---------+---------+--------------+------------------+-------------------+------------+-------------
     id     | integer |           |          |         | plain   |              | zlib             | 1                 | 32768      | 
    Checksum: t
    Distributed by: (id)
    Access method: ao_column
    Options: compresstype=zlib
    
    postgres=#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    gp安装目录说明

    gpadmin@gpadmin0:~/gpdbtest$ pwd
    /home/gpadmin/gpdbtest
    gpadmin@gpadmin0:~/gpdbtest$ 
    gpadmin@gpadmin0:~/gpdbtest$ ls
    bin  docs  greenplum_path.sh  include  lib  libexec  sbin  share
    gpadmin@gpadmin0:~/gpdbtest$
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    bin目录:

    gpadmin@gpadmin0:~/gpdbtest$ ls bin/
    analyzedb     dropdb             gpcheckcat           gpconfig_modules  gpinitsystem  gpmemreport    gpreload             gpssh-exkeys   hostfile           pg_basebackup   pg_ctl         pg_recvlogical  pg_test_timing  psql
    cluster.conf  dropuser           gpcheckcat_modules   gpdeletesystem    gpload        gpmemwatcher   gp_replica_check.py  gpssh_modules  initdb             pgbench         pg_dump        pg_resetwal     pg_upgrade      reindexdb
    clusterdb     ecpg               gpcheckperf          gpexpand          gpload.bat    gpmovemirrors  gpscp                gpstart        lib                pg_checksums    pg_dumpall     pg_restore      pg_waldump      stream
    createdb      gpactivatestandby  gpcheckresgroupimpl  gpfdist           gpload.py     gppkg          gpsd                 gpstate        minirepro          pg_config       pg_isready     pg_rewind       postgres        vacuumdb
    createuser    gpaddmirrors       gpconfig             gpinitstandby     gplogfilter   gprecoverseg   gpssh                gpstop         pg_archivecleanup  pg_controldata  pg_receivewal  pg_test_fsync   postmaster
    gpadmin@gpadmin0:~/gpdbtest$
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    include目录:

    gpadmin@gpadmin0:~/gpdbtest$ ls include/
    ecpg_config.h  ecpg_informix.h  ecpgtype.h     gppc.h  libpq-events.h  pg_config_ext.h  pg_config_manual.h  pgtypes_date.h   pgtypes.h           pgtypes_numeric.h    postgres_ext.h  sql3types.h  sqlda-compat.h  sqlda-native.h
    ecpgerrno.h    ecpglib.h        gppc_config.h  libpq   libpq-fe.h      pg_config.h      pg_config_os.h      pgtypes_error.h  pgtypes_interval.h  pgtypes_timestamp.h  postgresql      sqlca.h      sqlda.h
    gpadmin@gpadmin0:~/gpdbtest$ ls include/postgresql/
    informix  internal  server
    gpadmin@gpadmin0:~/gpdbtest$
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    lib目录:

    gpadmin@gpadmin0:~/gpdbtest$ ls lib
    libecpg.a         libecpg_compat.so    libecpg_compat.so.3.12  libecpg.so.7     libgppc.a   libgppc.so.1    libpgcommon.a        libpgfeutils.a  libpgport_shlib.a  libpgtypes.so    libpgtypes.so.3.12  libpq.so    libpq.so.5.12  postgresql
    libecpg_compat.a  libecpg_compat.so.3  libecpg.so              libecpg.so.7.12  libgppc.so  libgppc.so.1.2  libpgcommon_shlib.a  libpgport.a     libpgtypes.a       libpgtypes.so.3  libpq.a             libpq.so.5  pkgconfig      python
    gpadmin@gpadmin0:~/gpdbtest$
    
    • 1
    • 2
    • 3
    • 4

    libexec目录:

    gpadmin@gpadmin0:~/gpdbtest$ ls libexec/
    ifaddrs
    gpadmin@gpadmin0:~/gpdbtest$ cd libexec/
    gpadmin@gpadmin0:~/gpdbtest/libexec$ ls
    ifaddrs
    gpadmin@gpadmin0:~/gpdbtest/libexec$ ./ifaddrs 
    127.0.0.1
    192.168.31.185
    ::1
    gpadmin@gpadmin0:~/gpdbtest/libexec$
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    sbin目录:

    gpadmin@gpadmin0:~/gpdbtest$ ls sbin/
    gpcleansegmentdir.py  gpconfig_helper.py  gpgetstatususingtransition.py  gpoperation.py  gpsegrecovery.py  gpsegsetuprecovery.py  gpsegstart.py  gpsegstop.py  packcore  recovery_base.py  seg_update_pg_hba.py
    gpadmin@gpadmin0:~/gpdbtest$
    
    • 1
    • 2
    • 3

    share目录:

    gpadmin@gpadmin0:~/gpdbtest$ ls share/postgresql/
    cdb_init.d  errcodes.txt  information_schema.sql  pg_ident.conf.sample    postgres.bki          postgresql.conf.sample  psqlrc.sample        sql_features.txt  timezone      tsearch_data
    contrib     extension     pg_hba.conf.sample      pg_service.conf.sample  postgres.description  postgres.shdescription  snowball_create.sql  system_views.sql  timezonesets
    gpadmin@gpadmin0:~/gpdbtest$ 
    gpadmin@gpadmin0:~/gpdbtest$ cat share/greenplum/gucs_disallowed_in_file.txt 
    is_superuser
    debug_assertions
    transaction_read_only
    transaction_deferrable
    integer_datetimes
    data_checksums
    data_directory_mode
    max_function_args
    max_index_keys
    max_identifier_length
    block_size
    segment_size
    wal_block_size
    wal_segment_size
    ssl_renegotiation_limit
    server_version_num
    seed
    lc_collate
    lc_ctype
    server_encoding
    server_version
    role
    session_authorization
    config_file
    ssl_library
    transaction_isolation
    gp_retrieve_conn
    gp_is_writer
    gp_write_shared_snapshot
    gp_dbid
    gp_contentid
    gp_command_count
    gp_qd_port
    gp_session_id
    gp_server_version_num
    gp_role
    gp_qd_hostname
    gp_server_version
    gpadmin@gpadmin0:~/gpdbtest$
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    上面文件gucs_disallowed_in_file.txt中的内容,就是下面这两个个文件中含有GUC_DISALLOW_IN_FILE选项的GUC参数:

    src/backend/utils/misc/guc.c
    
    src/backend/utils/misc/guc_gp.c
    
    • 1
    • 2
    • 3

    接下来看一下Greenplum数据库的一些常用命令:

    1. gpstart:gpstart命令用于启动一个Greenplum集群,包括启动Master和Segment节点。如果只想启动Master节点,而不启动Segment节点,可以加-m选项,这样就能以维护模式(maintenance mode)启动Master节点

    2. gpstop:该命令用于关闭一个Greenplum集群。gpstop命令的相关选项说明如下所示:

    gpadmin@gpadmin0:~/gpdbtest/bin$ ./gpstop --help
    COMMAND NAME: gpstop
    
    Stops or restarts a Greenplum Database system.
    
    
    *****************************************************
    SYNOPSIS
    *****************************************************
    
    gpstop [-d <coordinator_data_directory>] [-B <parallel_processes>] 
           [-M smart | fast | immediate] [-t <timeout_seconds>]
           [-r] [-y] [-a] [-l <logfile_directory>] [-v | -q]
    
    gpstop [-m | -c ] [-d <coordinator_data_directory>] [-y]
           [-l <logfile_directory>] [-v | -q]
    
    gpstop -u [-d <coordinator_data_directory>] [-l <logfile_directory>] 
           [-v | -q]
    
    gpstop --host <segment_host_name> [-d <coordinator_data_directory>]
           [-l <logfile_directory>] [-t <timeout_seconds>] [-a]
           [-v | -q]
    
    gpstop --version
    
    gpstop -? | -h | --help
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    在这里插入图片描述

    1. gpstate命令用于展示运行中的Greenplum数据库的信息,比如哪个节点宕机、Master和Segment的配置信息、数据库系统所使用的端口号、Segment和Mirror Segment的映射关系等。加-s选项可以显示数据库系统的详细信息,如下:
      在这里插入图片描述
      在这里插入图片描述

    2. gpinitstandby:gpinitstandby命令为 Greenplum 数据库系统添加和/或初始化备用协调器主机

    gpadmin@gpadmin0:~/gpdbtest/bin$ ./gpinitstandby --help
    COMMAND NAME: gpinitstandby
    
    Adds and/or initializes a standby coordinator host for a Greenplum Database system.
    
    
    *****************************************************
    SYNOPSIS
    *****************************************************
    
    gpinitstandby { -s <standby_hostname> [-P <port>] | -r | -n } 
    
    [-a] [-q] [-D] [-S <standby data directory>] [-l <logfile_directory>]
    
    gpinitstandby -? | -v
    
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. gpactivatestandby:gpactivatestandby命令用于激活Standby节点,通常用于Master节点无法正常工作的情况。Standby节点被激活后会成为Greenplum数据库集群中的Master节点,并接受客户端的查询请求。gpactivatestandby命令使用-d选项指明正在激活的Master节点数据目录的绝对路径。如果没有-d选项,该命令会使用环境变量MASTER_DATA_DIRECTORY的值

    gpinitstandby命令和gpactivatestandby命令的示例可以看一下之前的例子:GreenPlum的学习心得和知识总结(一)|GreenPlum数据库源码编译安装及学习资料汇总,点击前往

    1. gpconfiggpconfig命令用于设置、修改、查看数据库里的Master、Segment和Mirror节点postgresql.conf配置文件中的配置参数。比如,以下命令把所有Segment节点的max_connection参数设为100,Master节点的max_connection参数设为10:
    gpadmin@gpadmin0:~/gpdbtest/bin$ ./psql -d postgres
    psql (12beta2)
    Type "help" for help.
    
    postgres=# show max_connections ;
     max_connections 
    -----------------
     250
    (1 row)
    
    postgres=# 
    \q
    gpadmin@gpadmin0:~/gpdbtest/bin$ ./gpconfig -c max_connections -v 100 -m 10
    20220808:14:44:44:011346 gpconfig:gpadmin0:gpadmin-[INFO]:-completed successfully with parameters '-c max_connections -v 100 -m 10'
    gpadmin@gpadmin0:~/gpdbtest/bin$ 
    gpadmin@gpadmin0:~/gpdbtest/bin$ ./psql -d postgres
    psql (12beta2)
    Type "help" for help.
    
    postgres=# show max_connections ;
     max_connections 
    -----------------
     250
    (1 row)
    
    postgres=# 
    \q
    gpadmin@gpadmin0:~/gpdbtest/bin$
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    接下来,重启服务 如下:

    ./gpstop
    ./gpstart
    
    gpadmin@gpadmin0:~/gpdbtest/bin$ ./psql -d postgres
    psql (12beta2)
    Type "help" for help.
    
    postgres=# show max_connections ;
     max_connections 
    -----------------
     10
    (1 row)
    
    postgres=# 
    \q
    gpadmin@gpadmin0:~/gpdbtest/bin$
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    1. gpdeletesystem:gpdeletesystem命令用于删除一个Greenplum数据库系统。执行该命令会终止所有Master和Segment节点上的postgres进程,然后删除数据目录。如下:
    gpadmin@gpadmin0:~/gpdbtest/bin$ ./gpdeletesystem
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Option -d or --master-data-directory not set. Checking environment variable COORDINATOR_DATA_DIRECTORY
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Checking for database dump files...
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Getting segment information...
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Greenplum Instance Deletion Parameters
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:---------------------------------------
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Greenplum Coordinator hostname                  = localhost
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Greenplum Coordinator data directory            = /home/gpadmin/gpdata/master/gp-1
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Greenplum Coordinator port                      = 5432
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Greenplum Force delete of dump files       = OFF
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Batch size                                 = 32
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:---------------------------------------
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:- Segment Instance List 
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:---------------------------------------
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Host:Datadir:Port
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-gpadmin0:/home/gpadmin/gpdata/master/gp-1:5432
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-gpadmin0:/home/gpadmin/gpdata/primary/gp0:40000
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-gpadmin0:/home/gpadmin/gpdata/mirror/gp0:7000
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-gpadmin0:/home/gpadmin/gpdata/primary/gp1:40001
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-gpadmin0:/home/gpadmin/gpdata/mirror/gp1:7001
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-gpadmin0:/home/gpadmin/gpdata/primary/gp2:40002
    20220808:14:55:55:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-gpadmin0:/home/gpadmin/gpdata/mirror/gp2:7002
    
    
    Continue with Greenplum instance deletion? Yy|Nn (default=N):
    > Y
    20220808:14:55:57:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-FINAL WARNING, you are about to delete the Greenplum instance
    20220808:14:55:57:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-on coordinator host localhost.
    
    
    Continue with Greenplum instance deletion? Yy|Nn (default=N):
    > Y
    20220808:14:56:02:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Stopping database...
    20220808:14:56:04:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Deleting segments and removing data directories...
    20220808:14:56:04:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Waiting for worker threads to complete...
    20220808:14:56:04:012588 gpdeletesystem:gpadmin0:gpadmin-[INFO]:-Delete system successful.
    gpadmin@gpadmin0:~/gpdbtest/bin$ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    在这里插入图片描述

    export COORDINATOR_DATA_DIRECTORY=/home/gpadmin/gpdata/master/gp-1
    
    • 1

    此外,Greenplum中还有很多命令,这里不再一一介绍,有兴趣的可参考官方文档,简易说明如下:

    在这里插入图片描述

    这里需要注意的是 上面的命令其实是python脚步,如下:

    gpadmin@gpadmin0:~/gpdbtest/bin$ ll gpdeletesystem
    -rwxr-xr-x 1 gpadmin gpadmin 13664  8月  1 22:16 gpdeletesystem*
    gpadmin@gpadmin0:~/gpdbtest/bin$ vim gpdeletesystem
    gpadmin@gpadmin0:~/gpdbtest/bin$
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

  • 相关阅读:
    K-hop消息传递图神经网络的表达能力有多强?
    算法|每日一题|求一个整数的惩罚数|回溯
    leaflet定位地图中心
    IDEA中的properties文件中文乱码
    深度学习——LSTM
    java优先级队列PriorityQueue
    Java:为什么要更新Java应用程序?
    【2022】【论文笔记】基于Rydberg原子Antenna的——
    汽车R155法规包含那些国家?
    嵌入式单片机学习入门到大牛
  • 原文地址:https://blog.csdn.net/weixin_43949535/article/details/126208215