更新日期:2024年09月11日
功能描述
ALTER SYSTEM SET 命令用于设置POSTMASTER、
SIGHUP、
BACKEND 级别的GUC
参数。此命令会将参数写入配置文件,不同级别生效方式有所不同。
注意事项
此命令仅限初始用户和拥有sysadmin 权限的用户才可使用。
不同级别GUC 参数生效时间如下:
POSTMASTER 级别的GUC 参数需要重启后才生效。
BACKEND 级别的GUC 参数需要会话重新连接后才生效。
SIGHUP 级别的GUC 参数立即生效(需要等待线程重新加载参数,实际略微有延
迟)
。
通过配置audit_set_parameter 参数,可以配置此操作是否被审计。
操作可被备机同步。
同gs_guc 一致,并不关注数据库是主或备节点、是否只读。
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
753
不可在事务中执行,因为此操作无法被回滚。
部分参数只能由初始用户修改,具体如下:
audit_copy_exec, audit_data_format, audit_database_process, audit_directory,
audit_dml_state,
audit_dml_state_select, audit_enabled, audit_file_remain_threshold, audit_file_remain_time,
audit_function_exec, audit_grant_revoke, audit_login_logout, audit_resource_policy,
audit_rotation_interval, audit_rotation_size, audit_set_parameter, audit_space_limit,
audit_system_object, audit_user_locked, audit_user_violation,
asp_log_directory, config_file, data_directory, enable_access_server_directory,
enable_copy_server_files, external_pid_file, hba_file, ident_file, log_directory,
perf_directory,
query_log_directory, ssl_ca_file, ssl_cert_file, ssl_crl_file, ssl_key_file,
stats_temp_directory,
unix_socket_directory, unix_socket_group, unix_socket_permissions,
krb_caseins_users, krb_server_keyfile, krb_srvname, allow_system_table_mods,
enableSeparationOfDuty,
modify_initial_password, password_encryption_type, password_policy
语法格式
ALTER SYSTEM SET { GUC_name } TO { GUC_value };
参数说明
GUC_name
GUC 参数名。
GUC_value
GUC 参数值。
示例
--设置SIGHUP 级别参数audit_enabled。
gbase=# alter system set audit_enabled to off;
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
754
ALTER SYSTEM SET
gbase=# show audit_enabled;
audit_enabled
---------------
off
(1 row)
--设置POSTMASTER 级别参数enable_thread_pool,将在重启之后生效。
gbase=#alter system set enable_thread_pool to on;
NOTICE:
please restart the database for the POSTMASTER level parameter to take effect.
ALTER SYSTEM SET
背景信息
数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。
例行重建
索引,可有效的提高查询效率。
数据库支持的索引类型为B-tree 索引,例行重建索引可有效的提高查询效率。
如果数据发生大量删除后,索引页面上的索引键将被删除,导致索引页面数量的减少,
造成索引膨胀。重建索引可回收浪费的空间。
新建的索引中逻辑结构相邻的页面,
通常在物理结构中也是相邻的,
所以一个新建的索
引比更新了多次的索引访问速度要快。
重建索引
重建索引有以下两种方式。选其中之一即可。
先运行DROP
INDEX 语句删除索引,再运行CREATE
INDEX 语句创建索引。
在删除索引过程中,会在父表上增加一个临时排他锁,
阻止相关读写操作。在创建索引
过程中,会锁住写操作但是不会锁住读操作,此时读操作只能使用顺序扫描。
使用REINDEX 语句重建索引。
使用REINDEX TABLE 语句重建索引,会在重建过程中增加排他锁,阻止相关读
写操作。
使用REINDEX INTERNAL TABLE 语句重建desc 表
(包括列存表的cudesc 表)的
索引,会在重建过程中增加排他锁,阻止相关读写操作。
操作步骤
重建索引有以下两种方式。根据实际情况选一即可。
GBase 8c 管理员指南
南大通用数据技术股份有限公司
45
以导入表“areaS”上的“area_id”字段存在普通索引“areaS_idx”为例。
方式一删除索引再创建
先运行DROP INDEX 语句删除索引,再运行CREATE INDEX 语句创建索引。
步骤1 删除索引。
postgres=# DROP INDEX areaS_idx;
DROP INDEX
步骤2 创建索引。
postgres=# CREATE INDEX areaS_idx ON areaS (area_id);
CREATE INDEX
方式二使用REINDEX 重建
- 使用REINDEX TABLE 语句重建索引。
postgres=# REINDEX TABLE areaS;
REINDEX
- 使用REINDEX INTERNAL TABLE 重建desc 表(包括列存表的cudesc 表)的索引。
postgres=# REINDEX INTERNAL TABLE areaS;
REINDEX
在重建索引前,用户可以通过临时增大maintenance_work_mem 和psort_work_mem 的
取值,来加快索引的重建。