8. GPDB 系统常规操作
在 Greenplum 数据库 DBMS 中,数据库服务实例(主节点和所有segment节点)开始或者停止时是可以跨所有服务器的,在这种方式下,他们可以作为统一的 DBMS 工作。
由于 Greenplum 数据库系统 是分布跨在很多的机器上,Greenplum 数据库系统 开始和停止的处理不同于常规的 PostgreSQL DBMS 处理。
使用 gpstart
和 gpstop
工具来开启和停止 Greenplum 数据库。这些工具都会被定位在你的 Greenplum 数据库主节点服务器的 $GPHOME/bin
目录下。
重要提示:
不要发出 kill 命令行给终端中任何的 Postgre 进程。
你可以使用数据库命令行 pg_cancel_backend() 来代替。
发出一个 kill -9 或者 kill -ll 可能会导致数据库错误。
8.1 GPDB 的启动、重启、停止
- 启动
在主节点服务器上运行gpstart
来启动 Greenplum 数据库:
$gpstart
- 重启
重启 Greenplum 数据库,指的是,停止 Greenplum 数据库系统 之后,再重新启动它。
gpstop
工具带上-r
选项可以重启 Greenplum 数据库。 重启 Greenplum 数据库,可以在主节点服务器上键入下面的命令:
$gpstop -r
仅对更改的配置文件进行重新载入, 重新载入 Greenplum 数据库 的配置文件不会中断系统。
gpstart
工具可以重新载入变更的pg_hba.conf
配置文件,也可以在服务不中断的情况下重载主节点上的postgresql.conf
和pg_hba.conf
配置中的运行时参数。活动着的会话(客户端与数据库的连接),会在重新连接数据库后拣选变更的配置(使其生效)。很多服务器的配置参数需要整个整个系统进行重启(gpstart -r
)来进行激活。
不关闭系统,重新载入更改的配置文件可以这样使用gpstop
工具:
$gpstop -u
- 停止
在主节点上使用 gostop
工具可以停止或者重启你的 Greenplum 数据库系统。当这个命令被激活时,gpstop
会停止系统中所有的 postgre
进程,包括主节点和所有段实例上的 postgre
进程。gpstop
工具使用一个默认多达 64 个并行工作线程来关闭 Greenplum 数据集群中的 Postgre 实例。系统会等待所有激活的传输,直到他们完成工作才关闭。立即停止 Greenplum 数据库,可以使用快速模式。
- 停止 Greenplum 数据库
$ gpstop
- 使用快速模式停止 Greenplum 数据库
$ gstop -M fast
8.2 维护模式
仅仅启动主节点来执行维护或者管理任务不会影响到在段上的数据。
在维护模式下,你看可以只连接到数据库的主节点来编辑系统的日志设置。更多的系统日志表的内容,请查看 Greenplum 数据库参考指南(Greenplum Database Reference Guide)
- 运行
gpstart
带上-m
选项:
$gpstart -m
- 在维护模式下连接到主节点,做日志的维护,例子如下:
$ PGOPTIONS='-c gp_session_role=utility' psql template1
- 在这之后,完成你的管理任务,停止主节点上的维护模式,切换到生产模式。
$ gpstop -mr
警告:
不正确使用维护模式连接会导致系统状态的不一致。
只有技术支持才应该执行这个操作。
8.3 访问数据库
8.3.1 通过 psql 进行连接
用户可以使用与 PostgreSQL兼容的客户端程序来连接到 Greenplum 数据库,例如:psql
。用户和管理员连接到 Greenplum 数据库主要是通过访问主节点来进行;段不接受客户端的连接。
为了连接到 Greenplum 数据库的 主节点,你需要知道下面的连接信息 并相应配置你的客户端程序。
表1.连接参数
连接参数 | 描述 | 环境变量 |
---|---|---|
应用名称 | 应用名是连接到数据库的默认值,保存在 psql 中的连接参数 application_name 中。 |
$PGAPPNAME |
数据库名 | 你希望连接的数据库名。在新初始化的系统中,使用template1 数据库来做第一次连接。 |
$PGDATABASE |
主机名 | Greenplum 数据库主节点的主机名。默认的主机名是 localhost。 | $PGHOST |
端口 | 运行着的 Greenplum 数据库主节点端口号。默认是 5432。 | $PGPORT |
用户名 | 用来连接的数据库用户(角色)名。这不是必与你的操作系统用户名一样。检查你的 Greenplum 管理员用户名,如果你不确定,每个 Greenplum 数据库系统都有一个超级用户(账号),它是在初始化的时候自动创建的。这个账号是你的操作系统在初始化 Greenplum 系统的时候的操作系统用户名(典型的是 gpadmin )。 |
$PGUSER |
通过 psql 进行连接
如何连接取决于默认值的使用或者环境变量的使用,下面是几个访问数据库的例子:
$ psql -d gpdatabase -h master_host -p 5432 -U gpadmin
$ psql gpdatabase
$ psql
如果用户定义的数据库还没有被创建,你可以访问 template1
数据库,例子:
$ psql template1
连接到数据库之后, psql 提供一个提示,这个提示代表当前连接着的数据库,下面的字符串 =>
(或者 =#
你是数据库的超级用户)。例子:
gpdatabase=>
在提示符后,你可以键入 SQL 命令,一条 SQL 命令必须以一个 ;
(英文分号) 结尾,然后发送到服务器并执行。例子:
=> SELECT * FROM mytable;
8.3.2 客户端应用程序
Greenplum 数据库在安装之后,就有大量客户端工具应用被放在你的 Greenplum 数据库的主节点的 $GPHOME/bin
目录下。下面这些是最常用的客户端工具应用:
表1. 常用客户端应用
名称 | 用法 |
---|---|
createdb |
创建一个新的数据库 |
createlang |
定义一种新的(数据库支持的)程序语言 |
createuser |
定义一个新的数据库角色 |
dropdb |
移除一个数据库 |
droplang |
移除一种程序语言 |
dropuser |
移除一个角色 |
psql |
PostgreSQL 交互终端 |
reindexdb |
为一个数据库重建索引 |
vacuumdb |
垃圾收集并分析一个数据库 |
当使用这些客户端工具的时候,你必须通过 Greenplum 主节点实例连接到数据库。你需要知道你的目标数据库的名字,主节点的主机名,主节点的端口号和用于连接的数据库用户名。这些信息的提供使用的命令行选项是 -d, -h, -p 和 -U
。如果一个参数被发现不属于任何选项,它将首先被解释为数据库名。
如果这些选项在使用的时候没有被指定,所有的这些选项都有默认值。默认的主机名是 localhost 。默认的端口号是 5432。默认的用户名是你操作系统的用户名。默认的数据库名也是你的操作系统用户名。注意操作系统的用户名和 Greenplum 数据库的用户名不是必须一样的。
如果默认值不正确,你可以设置环境变量 PGDATABASE
, PGHOST
, PGPORT
和 PGUSER
为正确的值,或者使用一个 psql ~/.pgpass
文件来包含频繁使用的密码。
8.3.3 适用于 Greenplum 数据库的 pgAdmin III
如果你更喜欢图形接口,就使用 pgAdmin III。这个 GUI 客户端 支持 PostgreSQL 数据库 所有 标准的功能,同时添加了 Greenplum 特殊功能的支持。
Greenplum 的 pgAdmin III 支持下面这些 Greenplum 特殊的功能:
- 扩展表
- 追加优化表,包括压缩过的追加优化表
- 表分区
- 资源队列
- 图形化的
EXPLAIN ANALYZE
- Greenplum 服务器配置参数
图1.在 pgAdmin III 中的 Greenplum 选项
安装包下载:https://www.pgadmin.org/。安装指南已经被包含在安装包中。
8.3.3.1 在 pgAdmin III 中执行管理员任务
- 编辑服务器配置
pgAdmin III 提供了两种方式来更新服务器配置postgresql.conf
: 在本地的时候,通过 文件(File)菜单,在远程的时候,通过 工具(Tools)菜单。在很多时候,远程编辑服务器的配置是很方便的,因为它不需要你上传或者复制 postgresql.conf
文件。
- 远程编辑服务器配置
- 连接到你想要编辑的服务器。如果你要连接到多个服务器,要确保在左边窗格中的服务器对象高亮。
- 选择
工具(Tools) > 服务配置(Server Configuration) > postgresql.conf
。后端的配置编辑器就会打开,显示可用的列表并激活服务器的配置参数。 - 定位你想要的编辑的参数,双击进入打开配置设置对话框。
- 输入新的参数值,或者选择/反选激活想要的编辑的项,之后双击确定(OK)。
- 如果参数可以通过重载服务器配置被激活,那么双击绿色的重载图标,或者选择 文件(File)> 重载服务(Reload server)。注意:很多参数还是需要服务的整个重启才能生效的。
- 查看一个图形化的查询计划
使用 pgAdmin III 查询工具,你可以运行一个 EXPLAIN
查询来查看查询计划的细节。
9. GPDB 的系统配置
有很多服务器配置参数影响着GPDB系统的行为。大多数的参数与常规的 PostgreSQL一样,但还有一些GP特有的配置参数。
9.1 设置本地化配置参数
设置本地化配置参数,必须修改所有的postgresql.conf文件才能使得修改生效。多数情况下,这意味着需要在Master和每个Segment(Primary和Mirror)上进行修改。
要在GPDB系统所有postgresql.conf文件修改参数,可以使用gpconfig命令。
例如:
$ gpconfig -c gp_vmem_protect_limit -v 4096MB
然后重启GPDB以确保修改的配置生效:
$ gpstop –r
9.2 设置 Master 配置参数
如果参数是Master级别的,仅需要在GP Master Instance设置即可。如果参数是会话级别的,可以灵活的在特定的数据库、角色或者会话来设置。若某个参数在多个级别设置,越细粒度的级别优先级越高。例如,会话复写角色,角色复写数据库,数据库复写系统。
- 在系统级别设置参数
在 Master 的 postgresql.conf 文件设置参数以设定新的系统层面的缺省值。
- 编辑
$MASTER_DATA_DIRECTORY/postgresql.conf
文件。 - 找到需要修改的参数,去除注释(删除行首的井号#字符),设置新的值。
- 保存关闭该文件。
- 对于会话级别的参数,不需要重启服务,使用下面的命令使得修改生效:
$ gpstop -u
- 对于需要重启服务的参数,使用下面的命令重启GPDB:
$ gpstop -r
- 在数据库级别设置参数
在数据库设置会话级别参数,每个连接到该数据库的会话将使用这些参数设置。在数据库级别的设置复写系统级别的设置。使用 ALTER DATABASE
命令在数据库级别设置参数。例如:
=# ALTER DATABASE mydatabase SET search_path TO myschema;
- 在角色级别设置参数
在角色设置会话级别的参数,每个使用该角色的会话将使用这些参数设置。在角色级别的设置复写数据库级别的设置。使用 ALTER ROLE
命令在角色级别设置参数。例如:
=# ALTER ROLE bob SET search_path TO bobschema;
- 在会话级别设置参数
任何会话级别的参数都可以在活动的数据库会话中使用SET命令设置。设置对于当前会话后面的查询有效(直到使用RESET命令恢复缺省值)。在会话级别的设置复写在角色级别的设置。例如:
=# SET work_mem TO '200MB';
=# RESET work_mem;
例2:
=# SET statement_mem='1024MB';
9.3 查看配置参数设置
使用 SQL命令 SHOW
查看 GPDB 系统使用的服务器配置参数的设置。
$ psql -c 'SHOW ALL;'
使用 SHOW命令
只是查看Master 的设置。如果希望查看整个 GPDB 系统(Master 和 Segment)的特定参数的设置,需要使用 gpconfig
命令。例如,查看系统的最大连接数:
[gpadmin@mdw ~]$ gpconfig --show max_connections
Values on all segments are consistent
GUC : max_connections
Master value: 250
Segment value: 750
9.4 配置参数的种类
有很多服务器配置参数都会影响着 GPDB系统 的行为。
9.4.1 连接与认证参数
- 连接参数
gp_vmem_idle_resource_timeout
listen_addresses
max_connections
max_prepared_transactions
superuser_reserved_connections
tcp_keepalives_count
tcp_keepalives_idle
tcp_keepalives_interval
unix_socket_directory
unix_socket_group
unix_socket_permissions
- 安全与认证参数
db_user_namespace
krb_caseins_users
krb_server_keyfile
krb_srvname
password_encryption
ssl
ssl_ciphers
9.4.2 系统资源消耗参数
- 内存消耗参数
这些参数控制着系统内存的使用。可以通过调整 gp_vmem_protect_limit
避免运行查询处理时Segment主机 出现内存溢出问题。
gp_vmem_idle_resource_timeout
gp_vmem_protect_limit
gp_vmem_protect_segworker_cache_limit
max_appendonly_tables
max_prepared_transactions
max_stack_depth
shared_buffers
temp_buffers
- 自由空间映射参数
这些参数控制着自由空间映射的尺寸,自由空间映射存储着过期的记录。由 VACUUM命令
回收的磁盘空间存储在自由空间映射中。
max_fsm_pages
max_fsm_relations
- 操作系统资源参数
max_files_per_process
shared_preload_libraries
- 基于成本的延迟回收参数
标准PostgreSQL有一些参与用于配置VACUUM
和ANALYZE
的执行成本。这些特性的目的是允许管理员在数据库并发活动时降低相关命令的I/O冲击。当这些操作消耗的累计I/O成本超过了设定的限制,操作的执行将会被延迟。然后重置计数器并重新执行。
警告: 基于成本的回收延迟不建议在 GPDB 中使用,因为在 Segment 之间是异步运行的。回收成本的限制和延迟是基于 Segment 本地调用,而不是从GP集群全局的状态来考虑。
vacuum_cost_delay
vacuum_cost_limit
vacuum_cost_page_dirty
vacuum_cost_page_hit
vacuum_cost_page_miss
9.4.3 查询调优参数
- 查询计划控制参数
查询计划控制参数控制着查询规划器选择什么样的计划操作类型。 启用或禁用特定的计划操作是一种强制规划器选择不同计划的方式。这对于使用不同的计划类型来测试查询以选择最优性能是很有帮助的。
enable_bitmapscan
enable_groupagg
enable_hashagg
enable_hashjoin
enable_indexscan
enable_mergejoin
enable_nestloop
enable_seqscan
enable_sort
enable_tidscan
gp_enable_adaptive_nestloop
gp_enable_agg_distinct
gp_enable_agg_distinct_pruning
gp_enable_direct_dispatch
gp_enable_fallback_plan
gp_enable_fast_sri
gp_enable_groupext_distinct_gather
gp_enable_groupext_distinct_pruning
gp_enable_multiphase_agg
gp_enable_predicate_propagation
gp_enable_preunique
gp_enable_sequential_window_plans
gp_enable_sort_distinct
gp_enable_sort_limit
- 查询规划成本估算
警告: GP建议不要调整这些查询成本估算参数。这些参数已经调整到适合GPDB硬件配置和工作负载特征的状态。这些参数是相关的。修改一个而不修改其他的参数可能会产生相反的性能影响。
cpu_index_tuple_cost
cpu_operator_cost
cpu_tuple_cost
cursor_tuple_fraction
effective_cache_size
gp_motion_cost_per_row
gp_segments_for_planner
random_page_cost
seq_page_cost
- 数据库统计抽样参数
这些参数调整 ANALYZE
操作数据抽样的数量。调整这些参数会影响系统级别的统计信息收集。可以在特定的表和列配置统计信息手机参数,使用 ALTER TABLE SET STATISTICS
命令。
default_statistics_target
gp_analyze_relative_error
- 排序操作配置参数
gp_enable_sort_distinct
gp_enable_sort_limit
- 聚合操作配置参数
gp_enable_agg_distinct
gp_enable_agg_distinct_pruning
gp_enable_multiphase_agg
gp_enable_preunique
gp_enable_groupext_distinct_gather
gp_enable_groupext_distinct_pruning
gp_workfile_compress_algorithm
- 关联操作配置参数
join_collapse_limit
gp_adjust_selectivity_for_outerjoins
gp_hashjoin_tuples_per_bucket
gp_statistics_use_fkeys
gp_workfile_compress_algorithm
- 其他查计划配置参数
from_collapse_limit
gp_enable_predicate_propagation
gp_statistics_pullup_from_child_partition
9.4.4 错误报告和日志参数
- 日志滚动
log_rotation_age
log_rotation_size
log_truncate_on_rotation
- 日志级别
client_min_messages
log_error_verbosity
log_min_duration_statement
log_min_error_statement
log_min_messages
- 日志内容
debug_pretty_print
debug_print_parse
debug_print_plan
debug_print_prelim_plan
debug_print_rewritten
debug_print_slice_table
log_autostats
log_connections
log_disconnections
log_dispatch_stats
log_duration
log_executor_stats
log_hostname
log_parser_stats
log_planner_stats
log_statement
log_statement_stats
log_timezone
gp_debug_linger
gp_log_format
gp_max_csv_line_length
gp_reraise_signal
9.4.5 系统监测参数
- SNMP 提醒
下面的参数用来在GPDB系统发生事件时发送SNMP通知。
gp_snmp_community
gp_snmp_monitor_address
gp_snmp_use_inform_or_trap
- 邮件提醒
下面的参数用来配置系统发送致命错误事件的邮件提醒。比如, Segment失败或者服务崩溃重启。
gp_email_from
gp_email_smtp_password
gp_email_smtp_server
gp_email_smtp_userid
gp_email_to
- GP命令中心代理
下面的参数用以为GPCC配置数据收集代理。
gp_enable_gpperfmon
gp_gpperfmon_send_interval
gpperfmon_port
9.4.6 运行时统计信息收集参数
这些参数在空值时, PostgreSQL 服务的统计信息收集功能会收集这些数据。 当统计信息收集被开启,产生的数据可以通过 pg_stat
和 pg_statio
系统日志视图来获取。
stats_queue_level
track_activities
track_counts
update_process_title
9.4.7 统计信息自动收集参数
当自动统计信息收集被开启,在INSERT
、 UPDAT
、 DELETE
、 COPY
和CREATE TABLE…AS SELECT
语句被执行时,如果影响是数量达到指定门槛 (on_change) 或者现有系统中没有统计信息(on_no_stats), ANALYZE
会自动被运行。
要开启这个功能,在GP Master 的 postgresql.conf 文件中设置下面的服务器配置参数,并需要重启 GPDB 系统:
gp_autostats_mode
log_autostats
警告: 根据特定的数据库操作,自动统计信息收集可能会产生负面的性能影响。需谨慎评估缺省设置on_no_stats是否适合当前的系统。
9.4.8 客户端连接缺省参数
- 语句行为参数
check_function_bodies
default_tablespace
default_transaction_isolation
default_transaction_read_only
search_path
statement_timeout
vacuum_freeze_min_age
- 本地化和格式化参数
DateStyle
extra_float_digits
IntervalStyle
lc_collate
lc_ctype
lc_messages
lc_monetary
lc_numeric
lc_time
TimeZone
- 其他客户端缺省参数
dynamic_library_path
explain_pretty_print
local_preload_libraries
9.4.9 锁管理参数
deadlock_timeout
max_locks_per_transaction
9.4.10 工作负载管理参数
下面的参数用来配置 GPDB 工作负载的管理特征(资源队列),查询优先级,内存利用和并发空值。
gp_resqueue_priority
gp_resqueue_priority_cpucores_per_segment
gp_resqueue_priority_sweeper_interval
gp_vmem_idle_resource_timeout
gp_vmem_protect_limit
gp_vmem_protect_segworker_cache_limit
max_resource_queues
max_resource_portals_per_transaction
resource_cleanup_gangs_on_wait
resource_select_only
stats_queue_level
9.4.11 外部表参数
下面的参数用来配置GPDB的外部表特征。
gp_external_enable_exec
gp_external_grant_privileges
gp_external_max_segs
gp_reject_percent_threshold
9.4.12 外部表参数
下面的参数用来配置GPDB的只追加表(AO表)特征。
max_appendonly_tables
9.4.13 数据库和表空间和文件空间参数
下面的参数用来配置系统中数据库、表空间和文件空间的最大值限制。
gp_max_tablespaces
gp_max_filespaces
gp_max_databases
9.4.14 老 PostgreSQL 版本兼容参数
下面是与老的PostgreSQL版本兼容性参数。通常,不需要在GPDB中修改这些参数。
add_missing_from
array_nulls
backslash_quote
escape_string_warning
regex_flavor
standard_conforming_strings
transform_null_equals
9.4.15 GP 集群配置参数
下面的参数是控制 GPDB集群 和各组建(Segment、 Master分布式事务管理以及互联网络)的配置参数。
- 互联网络配置参数
gp_interconnect_hash_multiplier
gp_interconnect_queue_depth
gp_interconnect_setup_timeout
gp_interconnect_type
gp_max_packet_size
- 分派配置参数
gp_cached_segworkers_threshold
gp_connections_per_thread
gp_enable_direct_dispatch
gp_segment_connect_timeout
gp_set_proc_affinity
- 故障操作参数
gp_set_read_only
gp_fts_probe_interval
gp_fts_probe_threadcount
- 分布式事务管理参数
gp_max_local_distributed_cache
- 只读参数
gp_command_count
gp_content
gp_dbid
gp_num_contents_in_cluster
gp_role
gp_session_id