登陆greenplum主机切换管理员用户
su gpadmin
数据库连接配置在pg_hba.conf中
vi $MASTER_DATA_DIRECTORY/pg_hba.conf
可以看到访问连接可以配置为下面几种形式,下面还有一些系统默认的系统连接
PostgreSQL Client Authentication Configuration File
# ===================================================
...
# local DATABASE USER METHOD [OPTIONS]
# host DATABASE USER ADDRESS METHOD [OPTIONS]
# hostssl DATABASE USER ADDRESS METHOD [OPTIONS]
# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
...
local all gpadmin ident
host all gpadmin 127.0.0.1/28 trust
host all gpadmin 10.0.61.41/32 trust
host all gpadmin ::1/128 trust
host all gpadmin fe80::f816:3eff:fe71:578d/128 trust
官方文档上对于连接的相关说明
Field | Description |
---|---|
local | 匹配使用UNIX域套接字的连接尝试。如果没有此类记录,则不允许UNIX域套接字连接。 |
host | 匹配使用TCP / IP进行的连接尝试。除非以适当的值启动服务器,否则无法进行远程TCP / IP连接。listen_addresses 服务器配置参数。 |
hostssl | 匹配使用TCP / IP进行的连接尝试,但仅当使用SSL加密进行连接时才匹配。必须在服务器启动时通过设置SSL启用SSLssl 服务器配置参数。 |
hostnossl | 匹配通过不使用SSL的TCP / IP进行的连接尝试。 |
database | 指定此记录匹配的数据库名称。价值 所有指定它匹配所有数据库。可以使用逗号分隔多个数据库名称。可以通过在文件名之前添加一个包含数据库名的单独文件来指定 @。 |
role | 指定此记录匹配的数据库角色名称。价值所有指定它匹配所有角色。如果指定的角色是一个组,并且您希望包括该组的所有成员,请在角色名称前添加一个+。可以使用逗号分隔多个角色名称。可以通过在文件名前添加一个包含角色名的单独文件来指定文件名@。 |
address | 指定此记录匹配的客户端计算机地址。该字段可以包含IP地址,IP地址范围或主机名。IP地址范围是使用标准数字符号指定范围的起始地址,然后使用斜杠(/)和CIDR掩码长度。掩码长度表示必须匹配的客户端IP地址的高位位数。在给定的IP地址中,其右边的位应为零。IP地址之间不能有任何空格,/,以及CIDR掩码长度。这样指定的IPv4地址范围的典型示例是 172.20.143.89/32 对于单个主机,或 172.20.143.0/24 对于小型网络,或 10.6.0.0/16为更大的。IPv6地址范围可能看起来像:: 1/128 单个主机(在本例中为IPv6环回地址)或 fe80 :: 7a31:c1ff:0000:0000/96 用于小型网络。 0.0.0.0/0 代表所有IPv4地址,并且 :: 0/0代表所有IPv6地址。要指定单个主机,对于IPv4使用32的掩码长度,对于IPv6使用128的掩码长度。在网络地址中,请勿省略尾随零。以IPv4格式给出的条目将仅匹配IPv4连接,以IPv6格式给出的条目将仅匹配IPv6连接,即使所表示的地址在IPv4-in-IPv6范围内。注意:如果主机系统C库不支持IPv6地址,则IPv6格式的条目将被拒绝。如果指定了主机名(将非IP地址或IP范围的地址视为主机名),则将该名称与客户端IP地址的反向名称解析结果(例如,反向DNS查找)进行比较,如果使用DNS)。主机名比较不区分大小写。如果存在匹配项,则对主机名执行正向名称解析(例如,正向DNS查找)以检查其解析为的地址是否等于客户端IP地址。如果两个方向都匹配,则认为该条目匹配。某些主机名数据库允许将IP地址与多个主机名相关联,但是当系统要求您解析IP地址时,操作系统仅返回一个主机名。在中使用的主机名pg_hba.conf 必须是客户端IP地址的地址名称解析返回的内容,否则该行将不被视为匹配项。在中指定主机名时 pg_hba.conf,则应确保名称解析相当快。设置本地名称解析缓存(例如,光盘。另外,您可以启用服务器配置参数log_hostname 查看客户端主机名而不是日志中的IP地址。 |
IP-address IP-mask | 这些字段可以用作CIDR地址表示法的替代方法。而不是指定掩码长度,而是在单独的列中指定实际掩码。例如,255.0.0.0 表示IPv4 CIDR掩码长度为8,并且 255.255.255.255 表示CIDR掩码长度为32。 |
authentication-method | 指定连接时使用的身份验证方法。Greenplum支持PostgreSQL 9.4 支持的身份验证方法。 |
为了使用外部工具连接上我们增加一条
host all gpadmin 0.0.0.0/0 trust # 新增规则允许任意ip 密码登陆
修改配置文件之后使用gpstop -u使配置生效
gpstop -u
使用navicat连接选择postgreSQL连接
使用gpstate可以查看当前运行节点的状态
查看运行的segment状态
gpstate -s
查看运行的mirror状态
gpstate -m
查看运行的standby状态
gpstate -f
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:-Greenplum instance status summary
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Master instance = Active
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Master standby = sdw1
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Standby master state = Standby host passive
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total segment instance count from metadata = 8
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Primary Segment Status
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total primary segments = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total primary segment valid (at master) = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total primary segment failures (at master) = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files missing = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files found = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs missing = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs found = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files missing = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files found = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes missing = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes found = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Mirror Segment Status
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total mirror segments = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total mirror segment valid (at master) = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total mirror segment failures (at master) = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files missing = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid files found = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs missing = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of postmaster.pid PIDs found = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files missing = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number of /tmp lock files found = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes missing = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number postmaster processes found = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number mirror segments acting as primary segments = 0
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:- Total number mirror segments acting as mirror segments = 4
20200603:17:37:02:029137 gpstate:mdw:gpadmin-[INFO]:-----------------------------------------------------
或者执行SQL:select * from gp_segment_configuration order by role,content;
6 0 m m s u 7000 sdw2 sdw2 /data/data1/mirror/gpseg0
7 1 m m s u 7001 sdw2 sdw2 /data/data2/mirror/gpseg1
8 2 m m s u 7000 sdw1 sdw1 /data/data1/mirror/gpseg2
9 3 m m s u 7001 sdw1 sdw1 /data/data2/mirror/gpseg3
1 -1 p p n u 5432 mdw mdw /data/master/gpseg-1
2 0 p p s u 6000 sdw1 sdw1 /data/data1/primary/gpseg0
3 1 p p s u 6001 sdw1 sdw1 /data/data2/primary/gpseg1
4 2 p p s u 6000 sdw2 sdw2 /data/data1/primary/gpseg2
5 3 p p s u 6001 sdw2 sdw2 /data/data2/primary/gpseg3
psql
弹出错误提示
psql: FATAL: database "gpdw" does not exist
错误原因是没有这个用户和库
CREATE DATABASE gpdw WITH OWNER gpdw ENCODING 'UTF8';
报错
ERROR: source database "template1" is being accessed by other users
使用select * from pg_stat_activity where DATNAME = 'template1';
kill掉就可以创建了
再次使用psql
psql (9.4.24)
Type "help" for help.
gpdw=#
可以成功登陆了
psql指令说明
Connection options:
-h, --host=HOSTNAME database server host or socket directory (default: "/var/run/postgresql")
-p, --port=PORT database server port (default: "")
-U, --username=USERNAME database user name (default: "zhangjin")
-w, --no-password never prompt for password
-W, --password force password prompt (should happen automatically)
进入psql程序中的指令说明
help
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
导出csv数据
\o /tmp/test.csv
select * from tablename limit 10000
或者
添加字段头导出
psql -d databasename -h localhost -p 5432 -c "\copy (select * from tablename limit 10000 ) to /tmp/my_data2.csv with csv header delimiter '|' "
不添加字段头导出
copy (select * from dept_relation limit 10000 ) to '/tmp/my_data2.csv' delimiter '|';
导入数据
1.使用copy
psql -d test -c "\\copy dept_relation FROM '/tmp/my_data2.csv'"
2.使用gpfdist
开启gpfdist
gpfdist -d /home/admin -p 8081 -l /tmp/gpfdist.log &
-d 数据文件所放的目录,我这里的路径为/home/admin。
-p 设置访问gpfdist端口,这个可以根据实际情况写。
-l 设置日志文件所放的目录,这个参数也可以不用填写。
必须注意“&”这个符号绝对不能忘记填写,不然开始服务会失败。
创建外部表
psql -d test -c "CREATE EXTERNAL TABLE BTR_DEPT_INDEX_VALUE_OUT ( UNIT_CODE VARCHAR, UNIT_NAME VARCHAR, YEARMONTH VARCHAR, YEAR VARCHAR,MONTH VARCHAR, RDATE VARCHAR,IDX0020 FLOAT, IDX0001 FLOAT, IDX0011 FLOAT,IDX0004 FLOAT,IDX0005 FLOAT,IDX0003 FLOAT,IDX0002 FLOAT,IDX0006 FLOAT,IDX0015 FLOAT,IDX0010 FLOAT,IDX0016 FLOAT,IDX0014 FLOAT,IDX0017 FLOAT,IDX0009 FLOAT,IDX0012 FLOAT,IDX0018 FLOAT,IDX0019 FLOAT,IDX0023 FLOAT,IDX0024 FLOAT,IDX0025 FLOAT,IDX0026 FLOAT,IDX0027 FLOAT,IDX0028 FLOAT,IDX0029 FLOAT,IDX0008 FLOAT,IDX0013 FLOAT,IDX0030 FLOAT,IDX0031 FLOAT,IDX0032 FLOAT,IDX0033 FLOAT,IDX0034 FLOAT,IDX0035 FLOAT,IDX0036 FLOAT,IDX0037 FLOAT) LOCATION ('gpfdist://10.0.61.41:8181/50w1.txt') format 'text' (DELIMITER '|')"
插入目标表
psql -d test -c "insert into BTR_DEPT_INDEX_VALUE(UNIT_CODE , UNIT_NAME , YEARMONTH , YEAR ,MONTH , RDATE ,IDX0020 , IDX0001 , IDX0011 ,IDX0004 ,IDX0005 ,IDX0003 ,IDX0002 ,IDX0006 ,IDX0015 ,IDX0010 ,IDX0016 ,IDX0014 ,IDX0017 ,IDX0009 ,IDX0012 ,IDX0018 ,IDX0019 ,IDX0023 ,IDX0024 ,IDX0025 ,IDX0026 ,IDX0027 ,IDX0028 ,IDX0029 ,IDX0008 ,IDX0013 ,IDX0030 ,IDX0031 ,IDX0032 ,IDX0033 ,IDX0034 ,IDX0035 ,IDX0036 ,IDX0037 ) select UNIT_CODE , UNIT_NAME , YEARMONTH , YEAR ,MONTH , RDATE ,IDX0020 , IDX0001 , IDX0011 ,IDX0004 ,IDX0005 ,IDX0003 ,IDX0002 ,IDX0006 ,IDX0015 ,IDX0010 ,IDX0016 ,IDX0014 ,IDX0017 ,IDX0009 ,IDX0012 ,IDX0018 ,IDX0019 ,IDX0023 ,IDX0024 ,IDX0025 ,IDX0026 ,IDX0027 ,IDX0028 ,IDX0029 ,IDX0008 ,IDX0013 ,IDX0030 ,IDX0031 ,IDX0032 ,IDX0033 ,IDX0034 ,IDX0035 ,IDX0036 ,IDX0037 from BTR_DEPT_INDEX_VALUE_OUT"
3.使用gpload
gpload是对gpfdist的封装,首先需要开启gpfdist
gpfdist -d /home/admin -p 8181 -l /tmp/gpfdist.log &
创建装载数据的yml文件
vim gpload.yml
VERSION: 1.0.0.1
DATABASE: test
USER: gpadmin
HOST: 10.0.61.41
PORT: 5432
GPLOAD:
INPUT:
- SOURCE:
LOCAL_HOSTNAME:
- mdw
PORT: 8181
FILE:
- /tmp/100w.txt
- FORMAT: text
- DELIMITER: '|'
- QUOTE: '"'
- HEADER: false
OUTPUT:
- TABLE: public.BTR_DEPT_INDEX_VALUE
- MODE: INSERT
gpload -f gpload.yml
CREATE TABLE table_name ( )
WITH ( storage_parameter=value [, ... ] ) ; //指定存储空间
where storage_parameter is: //指定创建表存在的参数:
APPENDONLY={TRUE|FALSE} //指定是否可以appendonly
BLOCKSIZE={8192-2097152} //指定表块大小
ORIENTATION={COLUMN|ROW} //指定表旋转方式
COMPRESSTYPE={ZLIB|QUICKLZ|RLE_TYPE|NONE} //指定表的压缩方式
COMPRESSLEVEL={0-9} //指定表的压缩级别
FILLFACTOR={10-100} //指定表的占空因数
OIDS[=TRUE|FALSE] //指定表的对象标识符
实例
CREATE TABLE table_xx(id int,n1 varchar,n2 varchar,n3 varchar)
WITH (appendonly=true,orientation=column,compresstype=zlib,COMPRESSLEVEL=5)
distributed by (id);
表存储,压缩,排列方式在创建表的时候已经定义完毕,不能更改,如需更改,需重新定义表结构
CREATE TABLE sales2 (LIKE sales)
WITH (appendonly=true, compresstype=quicklz, compresslevel=1, rientation=column);
INSERT INTO sales2 SELECT * FROM sales;
DROP TABLE sales;
ALTER TABLE sales2 RENAME TO sales;
GRANT ALL PRIVILEGES ON sales TO admin;
GRANT SELECT ON sales TO guest;
此方式等同于修改Master节点中$MASTER_DATA_DIRECTORY/postgresql.conf配置文件和$SEGMENT_DATA_DIRECTORY/postgresql.conf配置文件,都属于系统级别的参数修改
使用方法
查看参数:
gpconfig -s [参数]
修改参数
gpconfig -c [参数] -v [Segment] -m [Master]
修改完参数后需要重启数据库才能使参数生效
gpstop -r
例如
配置最大连接数
gpconfig -s max_connections
gpconfig -c max_connections -v 3000 -m 1500
gpstop -r
详细全部参数:http://docs.greenplum.org/6-4/ref_guide/config_params/guc_category-list.html
常用参数:
name | desc | 计算公式 |
---|---|---|
max_connections | 最大连接数,Segment建议设置成Master的5-10倍。 | |
max_prepared_transactions | 这个参数只有在启动数据库时,才能被设置。它决定能够同时处于prepared状态的事务的最大数目(参考PREPARE TRANSACTION命令)。如果它的值被设为0。则将数据库将关闭prepared事务的特性。它的值通常应该和max_connections的值一样大。每个事务消耗600字节(b)共享内存 | |
gp_resqueue_priority_cpucores_per_segment | master和每个segment的可以使用的cpu个数,每个segment的分配线程数; | |
max_statement_mem | 设置每个查询最大使用的内存量,该参数是防止statement_mem参数设置的内存过大导致的内存溢出. | |
statement_mem | 设置每个查询在segment主机中可用的内存,该参数设置的值不能超过max_statement_mem设置的值,如果配置了资源队列,则不能超过资源队列设置的值。 | |
gp_vmem_protect_limit | 控制了每个segment数据库为所有运行的查询分配的内存总量。如果查询需要的内存超过此值,则会失败。 | gp_vmem = ((SWAP + RAM) – (7.5GB + 0.05 * RAM)) / 1.7 gp_vmem_protect_limit = gp_vmem / acting_primary_segments |
gp_statement_mem | 服务器配置参数 gp_statement_mem 控制段数据库上单个查询可以使用的内存总量。如果语句需要更多内存,则会溢出数据到磁盘。 | |
shared_buffers | 只能配置segment节点,用作磁盘读写的内存缓冲区,开始可以设置一个较小的值,比如总内存的15%,然后逐渐增加,过程中监控性能提升和swap的情况。 | > 16K * max_connections |
effective_cache_size | (master节点,可以设为物理内存的85%)这个参数告诉PostgreSQL的优化器有多少内存可以被用来缓存数据,以及帮助决定是否应该使用索引。这个数值越大,优化器使用索引的可能性也越大。因此这个数值应该设置成shared_buffers加上可用操作系统缓存两者的总量。通常这个数值会超过系统内存总量的50%以上。 | |
temp_buffers | 即临时缓冲区,拥有数据库访问临时数据,GP中默认值为1M,在访问比较到大的临时表时,对性能提升有很大帮助。 | |
work_mem | work_mem(,global,物理内存的2%-4%),segment用作sort,hash操作的内存大小当PostgreSQL对大表进行排序时,数据库会按照此参数指定大小进行分片排序,将中间结果存放在临时文件中,这些中间结果的临时文件最终会再次合并排序,所以增加此参数可以减少临时文件个数进而提升排序效率。当然如果设置过大,会导致swap的发生,所以设置此参数时仍需谨慎。 |
使用sql
select * from pg_settings;
可以查看全部的数据库配置
首先产生一个恢复的配置文件 : gprecoverseg -o ./recov
其次,执行 gprecoverseg -i ./recov进行恢复
查询当前连接数
select count(1) from pg_stat_activity;
Master参数
max_connections=500
max_prepared_transactions=500
shared_buffers=256MB
gp_resqueue_priority_cpucores_per_segment=8
segment参数
max_connections=2500
max_prepared_transactions=2500
temp_buffers=128MB
statement_mem=512MB
shared_buffers=256MB
gp_resqueue_priority_cpucores_per_segment=4
启动
gpstart
重启
gpstop -r 调用的是pg_hba.conf
加载变更的配置
gpstop -u 调用的是postgresql.conf
启用维护模式
gpstart -m
链接到主节点维护
PGOPTIONS=’-c gp_session_role=utility’ psql template1
结束维护
gpstop -m
关闭数据库
gpstop
快速关闭gp,会kill客户端
gpstop -M fast
配置服务器以及segment的参数
gpconfig -c gp_vmem_protect_limit -v 4096MB
gpstop -r
session级别的绘画不需要重启数据库
gpstop -u
参数的改变需要重启数据库
gpstop -r