一 节点规划
| Ip | Hostname |
| 192.168.1.97 | mdw |
| 192.168.1.98 | sdw4 |
| 192.168.1.99 | sdw1 |
| 192.168.1.101 | smdw |
| 192.168.1.105 | sdw3 |
| 192.168.1.106 | sdw2 |
二 系统环境配置
GP数据库安装前需要的依赖包
yum -y install apr apr-util openssh openssh-clients openssh-server
修改/etc/hosts
192.168.1.97 mdw
192.168.1.98 smdw
192.168.1.99 sdw1
192.168.1.106 sdw2
修改主机名
hostnamectl set-hostname mdw
hostnamectl set-hostname smdw
hostnamectl set-hostname sdw1
hostnamectl set-hostname sdw2
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
修改/etc/selinux/config
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
修改内核文件/etc/sysctl.conf
vm.swappiness=10
kernel.shmall = 68719476736
kernel.shmmax = 4294967296
kernel.shmmni = 4096
vm.overcommit_memory = 2
vm.overcommit_ratio = 95
net.ipv4.ip_local_port_range = 10000 65535
kernel.sem = 500 2048000 200 40960
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.zone_reclaim_mode = 0
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.dirty_background_ratio = 3
vm.dirty_ratio = 10
vm.dirty_background_bytes = 1610612736
vm.dirty_bytes = 4294967296
修改/etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
------------操作系统一定要设置swap交换内存
设置gpadmin用户组及账号
groupdel gpadmin
userdel gpadmin
groupadd -g 530 gpadmin
useradd -g 530 -u 530 -m -d /home/gpadmin -s /bin/bash gpadmin
chown -R gpadmin:gpadmin /home/gpadmin/
passwd gpadmin
Inspur@#2023
gp安装(所有节点)
yum install ./open-source-greenplum-db-6.23.3-rhel7-x86_64.rpm
chown -R gpadmin:gpadmin /usr/local/greenplum*
chown -R gpadmin:gpadmin /home/admin/gpdata
============hostlist、seg_hosts设置
cd /home/gpadmin/conf
[gpadmin@gp_mdw conf]$ more hostlist
mdw
smdw
sdw1
sdw2
[gpadmin@gp_mdw conf]$ more seg_hosts
sdw1
sdw2
Inspur@#2023
============ssh免密(所有节点)
ssh-keygen -t rsa
master
cd ~
ssh-copy-id smdw
ssh-copy-id sdw1
ssh-copy-id sdw2
standby master
ssh-copy-id mdw
ssh-copy-id sdw1
ssh-copy-id sdw2
#segment1机器输入
ssh-copy-id mdw
ssh-copy-id smdw
ssh-copy-id sdw2
#segment2机器输入
ssh-copy-id mdw
ssh-copy-id smdw
ssh-copy-id sdw1
source /usr/local/greenplum-db/greenplum_path.sh
gpssh-exkeys -f /home/gpadmin/conf/hostlist
gpssh -f /home/gpadmin/conf/hostlist
==================================创建目录
mkdir -p /home/admin/gpdata/gpmaster
mkdir -p /home/admin/gpdata/gpdatap1
mkdir -p /home/admin/gpdata/gpdatap2
mkdir -p /home/admin/gpdata/gpdatam1
mkdir -p /home/admin/gpdata/gpdatam2
================================gpadmin环境变量设置 (master,standby都设置)
source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/home/gpadmin/gpdata/gpmaster/gpseg-1
export PGPORT=2345
export PGDATABASE=testdb
================================初始化数据库配置文件
vi initgp_config
# 数据库的代号
ARRAY_NAME="Greenplum"
MACHINE_LIST_FILE=/home/gpadmin/conf/seg_hosts
#Segment的名称前缀
SEG_PREFIX=gpseg
#Primary Segment起始的端口号
PORT_BASE=33000
#指定PrimarySegment的数据目录
declare -a DATA_DIRECTORY=(/home/admin/gpdata/gpdatap1 /home/admin/gpdata/gpdatap2)
#Master所在机器的Hostname
MASTER_HOSTNAME=mdw
#指定Master的数据目录
MASTER_DIRECTORY=/home/admin/gpdata/gpmaster
#Master的端口
MASTER_PORT=2345
#指定Bash的版本
TRUSTED_SHELL=/usr/bin/ssh
#字符集ENCODINGUNICODE
#Mirror Seqment 起始的端口号
MIRROR_PORT_BASE=43000
#PrimarySegment主备同步的起始端口号
REPLICATION_PORT_BASE=34000
#Mirror Segment主备同步的起始端口号
MIRROR_REPLICATION_PORT_BASE=44000
#Mirror Segment的数据目录
declare -a MIRROR_DATA_DIRECTORY=(/home/admin/gpdata/gpdatam1 /home/admin/gpdata/gpdatam2)
================================
网络测试:
gpcheckperf -d 目录 upload -r N -f 主机列表文件
文件系统性能验证:
gpcheckperf -d 目录1 -d 目录2 upload -r ds -D -f 主机列表文件
================================初始化数据库
gpinitsystem -c /home/gpadmin/conf/initgp_config -h /home/gpadmin/conf/seg_hosts
================================将standby加入集群
gpinitstandby -s smdw
================================将standby删除
gpinitstandby -r smdw
三 segment节点扩展
横向扩展(开启了mirror,每次最少扩2个机器)
新的机器基础配置和其他一样
more seg_new
sdw3
sdw4
gpexpand -f seg_new
会生成配置文件
gpexpand -i gpexpand_inputfile_20230330_162241
gpexpand -i gpexpand_inputfile_20230330_162241.ts
查看数据库的节点状态
SELECT * from gp_segment_configuration ;
执行表重分布
gpexpand -a -d
进入数据库查看重分布状态
select * from gpexpand.status;
退出扩展
gpexpand -c
纵向扩容:
每个数据几点增加计算segment
gpssh -f /home/gpadmin/conf/seg_hosts
mkdir -p /home/admin/gpdata/gpdatap3
mkdir -p /home/admin/gpdata/gpdatap4
mkdir -p /home/admin/gpdata/gpdatap5
mkdir -p /home/admin/gpdata/gpdatap6
mkdir -p /home/admin/gpdata/gpdatap7
mkdir -p /home/admin/gpdata/gpdatap8
mkdir -p /home/admin/gpdata/gpdatam3
mkdir -p /home/admin/gpdata/gpdatam4
mkdir -p /home/admin/gpdata/gpdatam5
mkdir -p /home/admin/gpdata/gpdatam6
mkdir -p /home/admin/gpdata/gpdatam7
mkdir -p /home/admin/gpdata/gpdatam8
生成配置文件
gpexpand -f seg_hosts
在线扩容节点
gpexpand -i gpexpand_inputfile_20230330_162241
gpexpand -i gpexpand_inputfile_20230330_162241.ts
查看数据库的节点状态
SELECT * from gp_segment_configuration;
执行表重分布
gpexpand -a -d
进入数据库查看重分布状态
select * from gpexpand.status;
退出扩展
gpexpand -c
mkdir -p /home/admin/gpdata/platform_tblspc
mkdir -p /home/admin/gpdata/ehr_tblspc
扩展之后的架构
每个数据节点8p+8m
四 基本使用
psql -d postgres
\password postgres
createdb testdb -E utf-8
数据库集群启停
#快速重启数据库,先停库再启动速度较快
gpstop -M fast
gpstart
#直接重启,速度较慢
gpstop -r
#修复节点
gprecoverseg
#平衡修复好的节点
gprecoverseg -r
重新加载文件
gpstop -u
有极端情况数据库无法停止的时候,需要手动杀进程才能完成停库(非极端情况不要使用)
ps -ef | grep gpadmin | grep postgres | awk '{print "kill -9 "$2}'
基础创建和查询命令
--创建用户
create role dbdream password 'Dbdream#@2023' createdb login;
CREATE ROLE kanon PASSWORD 'kanon' LOGIN;
---等同于
CREATE USER kanon PASSWORD 'kanon';
--创建数据库
CREATE DATABASE <new_dbname>;
CREATE DATABASE testDB;
--数据库创建时相对完整的语法应该是:
CREATE DATABASE platform_dc OWNER dbdream TABLESPACE platform_dc;
--克隆数据库
CREATE DATABASE <new_dbname> TEMPLATE <old_dbname>;
--查询所有数据库
SELECT datname from pg_database;
SELECT * from pg_database;
--删除数据库
DROP DATABASE testDB;
--查询现有连接
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='ehr' AND pid<>pg_backend_pid();
为空才能正常删除数据库
--表空间创建
mkdir -p /home/admin/gpdata/platform_tblspc
CREATE TABLESPACE platform_dc LOCATION '/home/admin/gpdata/platform_tblspc';
GRANT CREATE ON TABLESPACE platform_dc TO dbdream;
--删除表空间
DROP TABLESPACE ehr;
--查看表空间信息
SELECT oid, * FROM pg_tablespace
--查看表空间系统位置
SELECT * FROM gp_tablespace_location(16402);
--显示段实例信息以及表空间的文件系统位置
WITH spc AS (SELECT * FROM gp_tablespace_location(16402))
SELECT seg.role, spc.gp_segment_id as seg_id, seg.hostname, seg.datadir, tblspc_loc
FROM spc, gp_segment_configuration AS seg
WHERE spc.gp_segment_id = seg.content ORDER BY seg_id;
模式创建(Schema)
官方建议:在管理员创建一个具体数据库后,应该为所有可以连接到该数据库的用户分别创建一个与用户名相同的模式,
然后,将search_path设置为"$user"(即缺省模式为与用户名相同的模式),
这样,任何当某个用户连接上来后,会默认将查找或者定义的对象都定位到与之同名的模式中。这是一个好的设计架构
CREATE SCHEMA ehr;
创建一个由其他人拥有的模式
CREATE SCHEMA dbdream AUTHORIZATION dbdream;
授权
grant all on schema dbdream to dbdream;
设置模式顺序
ALTER ROLE sally SET search_path TO ehr, public, pg_catalog;
查询当前模式
SELECT current_schema();
显示当前搜索顺序
SHOW search_path;
删除模式
DROP SCHEMA ehr CASCADE;
greenplum数据库、模式、表空间、role的含义与关系
--role
在GP中是通过role来控制数据库的访问权限
role包含两个概念一个是user一个是group。
两者的创建方式没有明显的区别,主要是看创建者的使用方式以及赋予权限。
一个role可以成为其他role的父类使其子类拥有本身的权限,也可以成为任意role的子类拥有其父类的权限。
--模式(schema)
什么是模式?
greenplum中的模式指的是schema,可以在数据库中创建多个模式来管理同名表,通过"模式名.表名"的方式。
数据库中默认有一个public模式,如果在创建对象时不指定模式名,这个对象的默认模式就是public。比如建表的完整语句create table public.t1。查询表也是一样如select * from public.t1,如果不加模式名将会以当前登录的用户名做隐含访问。
一个集群中有会有多个数据库,如果做一个关系的总结应该是“gp集群” > databases > schema > object。
为什么需要模式
1方便用户的管理:用户可以在集群中创建不同模式名同表名的对象。
2把需要使用的多个对象变为一个模式,方便使用。
--表空间
什么是表空间?
表空间是实际的数据存储的地方。用来存放数据库对象物理文件的位置
表空间的作用:
通过表空间dba可以优化集群磁盘的使用,提高业务效率,比如,可以在读写效率比较高的磁盘上建立表空间将常用的数据放在上面。将不常用的数据放在读写效率低的磁盘上。
--表空间与数据库的关系
与模式相同的是,greenplum数据库同样有默认的表空间pg_default。在gp中数据库的创建通过克隆默认的数据库模板template1来创建,template1数据库的默认模板就是pg_default。
在物理环境中表空间的表达方式就是一个目录,里面存储的是它所包含的数据库的各种物理文件。
--表空间、数据库、角色、模式及表之间的关系
简单的说表空间就是目录,是databases中对象在物理存储上的位置,databases就是object的集合,而schema就是用来管理object的方式
role则是用来管理数据库object的权限的系统,role可以登录任意的databases只需要拥有其权限。一般role会有一个默认登陆的databases在pg_hba文件中配置。
gp数据库查询表的分布键
SELECT
aaa.oid,
aaa.nspname AS "模式名",
aaa.relname AS "表名",
aaa.table_comment AS "中文表名",
ccc.attname AS "分布键"
FROM
(
SELECT
aa.oid,
aa.relname,
obj_description ( aa.oid ) AS table_comment,
bb.localoid,
bb.distkey,
regexp_split_to_table( array_to_string( bb.distkey, ' ' ), ' ' ) att,
dd.nspname
FROM
pg_class aa
LEFT JOIN pg_catalog.gp_distribution_policy bb ON bb.localoid = aa.oid
LEFT JOIN pg_namespace dd ON dd.oid = aa.relnamespace --模式
LEFT JOIN pg_inherits hh ON aa.oid = hh.inhrelid --继承表
WHERE
dd.nspname = 'public' -- 替换成需要的模式schema
AND hh.inhrelid IS NULL
) aaa
LEFT JOIN pg_attribute ccc ON ccc.attrelid = aaa.oid
AND CAST ( ccc.attnum AS TEXT ) = aaa.att
WHERE
ccc.attnum > 0
--AND aaa.relname = 'opn_label_factory_user_group' --需要查询的表名
----查看表数据的分布情况,是否均匀
select gp_segment_id,count(*) from 表名称 group by gp_segment_id order by count(*) desc
----重新设置表的分布键语句
ALTER TABLE cehr_active_patient SET distributed by (org_code,event_no);
分区表创建举例sql
按年分区sql:
create table lineitem_partition (
l_orderkey bigint not null,
l_partkey integer not null,
l_suppkey integer not null,
l_linenumber integer not null,
l_quantity DECIMAL(15,2) not null,
l_extendedprice DECIMAL(15,2) not null,
l_discount DECIMAL(15,2) not null,
l_tax DECIMAL(15,2) not null,
l_returnflag char(1) not null,
l_linestatus char(1) not null,
l_shipdate date not null,
l_commitdate date not null,
l_receiptdate date not null,
l_shipinstruct char(25) not null,
l_shipmode char(10) not null,
l_comment varchar(44) not null)
with (appendonly=true, orientation=column)
distributed by (l_orderkey) partition by range(l_shipdate)(
PARTITION p1992 START ('1992-01-01'::date) inclusive END ('1993-01-01'::date) exclusive,
PARTITION p1993 START ('1993-01-01'::date) inclusive END ('1994-01-01'::date) exclusive,
PARTITION p1994 START ('1994-01-01'::date) inclusive END ('1995-01-01'::date) exclusive,
PARTITION p1995 START ('1995-01-01'::date) inclusive END ('1996-01-01'::date) exclusive,
PARTITION p1996 START ('1996-01-01'::date) inclusive END ('1997-01-01'::date) exclusive,
PARTITION p1997 START ('1997-01-01'::date) inclusive END ('1998-01-01'::date) exclusive,
PARTITION p1998 START ('1998-01-01'::date) inclusive END ('1999-01-01'::date) inclusive
); ```
--------------------------------------------------------------------------------------------------------
``` 按月分区sql:
create table lineitem_partition_month (
l_orderkey bigint not null,
l_partkey integer not null,
l_suppkey integer not null,
l_linenumber integer not null,
l_quantity DECIMAL(15,2) not null,
l_extendedprice DECIMAL(15,2) not null,
l_discount DECIMAL(15,2) not null,
l_tax DECIMAL(15,2) not null,
l_returnflag char(1) not null,
l_linestatus char(1) not null,
l_shipdate date not null,
l_commitdate date not null,
l_receiptdate date not null,
l_shipinstruct char(25) not null,
l_shipmode char(10) not null,
l_comment varchar(44) not null
)with (appendonly=true, orientation=column)
distributed by (l_orderkey)
partition by range(l_shipdate)(
PARTITION p_ START ('1992-01-01'::date) inclusive
END ('1999-01-01'::date) exclusive
every ('1 month'::interval)));
--------------------------------------------------------------------------------------------------------
按年分区
create table lineitem (
l_orderkey bigint not null,
l_partkey integer not null,
l_suppkey integer not null,
l_linenumber integer not null,
l_quantity DECIMAL(15,2) not null,
l_extendedprice DECIMAL(15,2) not null,
l_discount DECIMAL(15,2) not null,
l_tax DECIMAL(15,2) not null,
l_returnflag char(1) not null,
l_linestatus char(1) not null,
l_shipdate date not null,
l_commitdate date not null,
l_receiptdate date not null,
l_shipinstruct char(25) not null,
l_shipmode char(10) not null,
l_comment varchar(44) not null)
with (appendonly=true, orientation=column)
distributed by (l_orderkey) partition by range(l_shipdate)(
PARTITION p1992 START ('1992-01-01'::date) inclusive END ('1993-01-01'::date) exclusive,
PARTITION p1993 START ('1993-01-01'::date) inclusive END ('1994-01-01'::date) exclusive,
PARTITION p1994 START ('1994-01-01'::date) inclusive END ('1995-01-01'::date) exclusive,
PARTITION p1995 START ('1995-01-01'::date) inclusive END ('1996-01-01'::date) exclusive,
PARTITION p1996 START ('1996-01-01'::date) inclusive END ('1997-01-01'::date) exclusive,
PARTITION p1997 START ('1997-01-01'::date) inclusive END ('1998-01-01'::date) exclusive,
PARTITION p1998 START ('1998-01-01'::date) inclusive END ('1999-01-01'::date) inclusive
);
按月分区sql:
create table lineitem (
l_orderkey bigint not null,
l_partkey integer not null,
l_suppkey integer not null,
l_linenumber integer not null,
l_quantity DECIMAL(15,2) not null,
l_extendedprice DECIMAL(15,2) not null,
l_discount DECIMAL(15,2) not null,
l_tax DECIMAL(15,2) not null,
l_returnflag char(1) not null,
l_linestatus char(1) not null,
l_shipdate date not null,
l_commitdate date not null,
l_receiptdate date not null,
l_shipinstruct char(25) not null,
l_shipmode char(10) not null,
l_comment varchar(44) not null
)with (appendonly=true, orientation=column)
distributed by (l_orderkey)
partition by range(l_shipdate)(
PARTITION p_ START ('1992-01-01'::date) inclusive
END ('1999-01-01'::date) exclusive
every ('1 month'::interval));
-----查询数据节点磁盘空间使用情况
SELECT * FROM gp_toolkit.gp_disk_free ORDER BY dfsegment;
五 greenplum集群参数调优记录
gp配置参数调整
gpconfig -c max_connections -v 2500 -m 500 ###segment为master的5-10倍
gpconfig -c max_prepared_transactions -v 500 ###和master的max_connections参数配置一致
gpconfig -c shared_buffers -v 16384MB ###至少>max_connections*16k
gpconfig -c gp_vmem_protect_limit -v 21688 ###为在每个segment数据库中完成的所有 工作分配的最大内存
gp_vmem(Greenplum数据库可用的主机内存):
gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7
= (630 -(7.5+0.05*630))/1.7 = 347G
max_acting_primary_segments = 8+8个容错的primary=16
gp_vmem_protect_limit = gp_vmem / max_acting_primary_segments= 347G/16=21688MB
gpconfig -c statement_mem -v 650MB ###statement_mem服务器配置参数是分配给segment数据库中任何单个查询的内存量
statement_mem =((gp_vmem_protect_limit * .9) / max_expected_concurrent_queries)
= 21688*0.9/30 =650MB
gpconfig -c effective_cache_size -v 256GB # (物理内存一半),设置有关Postgres查询优化器(计划程序)的单个查询可用的磁盘高速缓存的有效大小的假设,估算使用指数的成本的因素; 较高的值使得更有可能使用索引扫描,较低的值使得更有可能使用顺序扫描
gpconfig -c work_mem -v 25600MB #设置每个segment内存排序的大小,先测试为系统总内存的5%=5%*500=25G=25.6*1000=25600MB
gpconfig -c temp_buffers -v 8MB #默认1024,以允许每个数据库会话使用临时缓冲区。 这些是仅用于访问临时表的会话本地缓冲区
gpconfig -c gp_hashjoin_tuples_per_bucket -v 5 #默认5,设置HashJoin操作使用的哈希表的目标密度。 较小的值往往会产生较大的哈希表,这可以提高连接性能
gpconfig -c gp_interconnect_setup_timeout -v 2h #默认2h,指定在超时之前等待Greenplum数据库interconnect完成设置的时间
gpconfig -c max_statement_mem -v 8192MB #2000M,设置查询的最大内存限制
gpconfig -c maintenance_work_mem -v 12GB #默认16MB,指定要在维护操作中使用的最大内存量,例如VACUUM和CREATE INDEX。指定要在维护操作中使用的最大内存量,例如VACUUM和CREATE INDEX。
gpconfig -c gp_enable_global_deadlock_detector -v on ##控制是否开启全局死锁检测功能,打开它才可以支持并发更新/删除操作;
gpconfig -c random_page_cost -v 10 ##将随机访问代价开销调小,有利于查询走索引。
gpconfig -c wal_buffers -v 256MB ##将WAL日志缓存调大。修改该参数需要重启实例
gpconfig -c log_statement -v ddl
磁盘和I/O
#配置readhead,减少磁盘的寻道次数和应用程序的I/O等待时间,提升磁盘读I/O性能
blockdev预读尺寸应该被设置为16384
/sbin/blockdev --setra 16384 /dev/sdb
查看
/sbin/blockdev --getra /dev/sdb
配置IO调度,deadline更适用于Greenplum数据库场景
echo deadline > /sys/block/dfa/queue/scheduler
六 greenplum备份恢复
备份恢复工具安装
上传压缩包greenplum_backup_restore-1.28.1-rhel7.tar.gz到/usr/local/greenplum-db解压
#tar -xzvf greenplum_backup_restore-1.28.1-rhel7.tar.gz
检查
#gpbackup --version
gpbackup version 1.28.1

备份操作
全备命令 master执行
#gpbackup --dbname=platform_dc --backup-dir=/home/admin/gpbackup
增备
gpbackup --dbname=platform_dc --backup-dir=/home/admin/gpbackup --leaf-partition-data
gpbackup --dbname=platform_dc --backup-dir=/home/admin/gpbackup --leaf-partition-data --incremental
注:
先执行全量备份,再执行增量备份,增量备份所使用的基础备份,必须也带有 --leaf-partition-data 参数
全量+增量恢复:master执行
gprestore --backup-dir=/home/admin/gpbackup --timestamp=20230601165333 --create-db
备份管理
查看备份
#gpbackup_manager list-backups

删除无效备份
#gpbackup_manager delete-backup 20230601165333
Pg_dump备份
pg_dump -v -F c -f /home/admin/backup/empi.dmp -C -E UTF8 -h mdw empi
七 gcopy数据迁移实践
Gp1集群和gp2集群都安装
master节点安装
tar -zxvf gpcopy-2.3.1.tar.gz
cd gpcopy-2.3.1/
cp gpcopy /usr/local/greenplum-db/bin/bin/
cp gpcopy_helper /usr/local/greenplum-db/bin/bin/
chmod 755 /usr/local/greenplum-db/bin/bin/gpcopy
chmod 755 /usr/local/greenplum-db/bin/bin/gpcopy_helper
Segment节点安装
gpscp -f /home/gpadmin/conf/seglist ./gpcopy_helper =:/usr/local/greenplum-db/bin/bin
gpssh -f /home/gpadmin/conf/seglist
=> chmod 755 /usr/local/greenplum-db/bin/bin/gpcopy_helper
=> exit
配置集群1和集群2主节点的免密:
1、在pg_hba.conf文件中 加 host all gpadmin ip/32 trust
2、gpstop -u 刷新配置
迁移命令
全部元对象--不包含数据
gpcopy --dest-host 11.145.12.17 --dest-port 2345 --dest-user gpadmin --source-host 11.145.9.182 --source-port 2345 --source-user gpadmin --full --skip-existing --metadata-only
单个数据库
gpcopy --dest-host 11.145.12.17 --dest-port 2345 --dest-user gpadmin --source-host 11.145.9.182 --source-port 2345 --source-user gpadmin --dbname supervision --dest-dbname supervision --skip-existing
八 greenplum-cc-web监控安装使用
创建安装文件夹
#mkdir -p /usr/local/greenplum-cc-6.8.4
#chown -R gpadmin:gpadmin /usr/local/greenplum-cc-6.8.4
安装
#unzip greenplum-cc-web-6.8.4-gp6-rhel7-x86_64.zip
#mv greenplum-cc-web-6.8.4-gp6-rhel7-x86_64 greenplum-cc-web
#cd greenplum-cc-web
#./gpccinstall-6.8.4

#等待安装完毕之后,添加环境变量
#echo "source /usr/local/greenplum-cc-6.8.4/gpcc_path.sh" >> /home/gpadmin/.bash_profile
启动之前的问题处理:
#cd /usr/local/greenplum-cc-6.8.4/gppkg/
安装和gp版本最相近的插件
#gppkg -i MetricsCollector-6.8.4_gp_6.23.0-rhel7-x86_64.gppkg
修改数据库参数配置
gpconfig -c shared_preload_libraries -v metrics_collector
gpconfig -c gp_enable_query_metrics -v on
重启数据库
gpstop
Gpstart
启动GPCC
#gpcc start

前端登录

九 日常维护
数据库角色权限管理
属性
login 权限:只有具有Login属性的角色才能被用于数据库连接,其中 create user 默认有login属性,而create role 则没有login属性。
Superuser权限:创建一个超级用户 create role name superuser。
database creation: 创建数据库的权限。create role name createdb。
role creation: 创建角色的权限。create role name createrole。
password: 创建认证口令的权限。create role name password 'xxx'。
示例语句
create role user_center password 'userCenter@z2023' createdb login;
修改用户名
alter role user_center password 'userCenter@z2023' rename 新名称
对象权限
在表、视图、序列、数据库、函数、语言、空间等对象被创建时,会被指派一个拥有者。如果想其他角色拥有和拥有者一样操作这些对象,需要赋予一定的对象权限。需要注意的是以上权限必须为每一个对象单独授权。如 在一个数据上授予all 权限,不代表完全的权限,仅代表 connect、create 、temporary 权限
| 对象 | 权限 |
| 表、序列、视图 | select 、insert 、update、delete、rule、all |
| 外部表 | select、rule、all |
| 数据库 | connect、create、temporary|temp、all |
| 函数 | execute |
| 语言 | usage |
| 方案 | create、usage、all |
表锁会话处理
----查询锁进程
select * from pg_stat_activity; ----查看用户会话
select sess_id,pid,usename,application_name,state from pg_stat_activity;
通过查看state字段,找到进程处于idle in transaction的状态的pid

---处理表锁
# 取消后台操作,回滚未提交事务
select pg_cancel_backend(pid);
# 中断session,回滚未提交事务
select pg_terminate_backend(pid);
---操作系统层面
ps -ef |grep -i postgres |grep -i con ###每个连接对应一个进程

kill -9 杀掉对应连接进程
- 查看数据库,表占用空间
| 函数 | 说明 |
| pg_database_size(‘ehr’) | 数据库大小,不计算索引 |
| pg_total_size(‘ehr’) | 数据库大小,包含索引 |
| pg_indexes_size(‘表名’) | 表中索引大小 |
| pg_relation_size(‘表名’) | 表大小,不包括索引 |
| pg_total_relation_size(‘表名’) | 表大小,包括索引 |
| pg_tablespace_size(‘表名’) | 表空间大小 |
select pg_size_pretty(pg_database_size('ehr'));
select pg_size_pretty(pg_relation_size('ehr'));
- 清理数据库
vacuum:该选项主要是清理数据库表中的垃圾空间
先analyze
--检查查看表膨胀:select * from gp_toolkit.gp_bloat_diag order by bdirelpages desc ;
--设置语句超时时间:set statement_timeout=0;
(0表示语句执行不会超时,数据库已经设置语句超时15分钟)
-- 执行vacuum命令:VACUUM pg_catalog.pg_attribute;
重建索引:reindex table pg_catalog.pg_attribute; (vacuum会导致索引失效,需要重建)
--服务器端执行命令实例:
vacuumdb --analyze --verbose --table 'qmjkxxptempi.cehr_patient_pool' qmjkxxptempi
vacuumdb --analyze --verbose --table 'schema.cehr_patient_pool' databasename
- 数据倾斜处理
---查询数据倾斜厉害的表
select * from gp_toolkit.gp_skew_idle_fractions;
--然后根据业务情况重新设定分布键
ALTER TABLE cehr_card_kf_1 SET distributed by (empi,card_no,org_code);
- pg_log日志定时清理查看
命令##gplogfilter --help
对应目录pg_log日志需要定期清理
故障处理记录
gp集群无法启动:
第一步:查询master节点日志:/home/admin/gpdata/gpmaster/gpseg-1/pg_log/下最新日志,发现有宿主机网络不通。
第二步:启动有报错警告
[WARNING]:-Skipping startup of segment marked down in configuration: on sdw2 directory /home/admin/gpdata/gpdatam/gpseg0
使用gprecoverseg命令恢复
--生成恢复文件
###gprecoverseg -o ./recov
--恢复失败节点
###gprecoverseg -i ./recov
--primary mirror角色对调
###gprecoverseg -r
--如果gprecoverseg -i ./recov运行失败,建议采用gprecoverseg –F全量方式进程恢复尝试;

752

被折叠的 条评论
为什么被折叠?



