Skip to content

GaussDB 参数文件结构

参数文件类型

主配置文件

  • postgresql.conf:GaussDB的主要配置文件,包含数据库的核心参数设置
  • location:默认位于数据目录下
  • format:文本格式,每行一个参数设置
  • priority:最高优先级,直接影响数据库运行

环境变量配置文件

  • postgresql.env:用于设置数据库运行的环境变量
  • location:默认位于数据目录下
  • 作用:影响数据库进程的启动环境

客户端认证配置文件

  • pg_hba.conf:控制客户端访问数据库的认证配置
  • location:默认位于数据目录下
  • 作用:定义哪些客户端可以连接到数据库,以及使用什么认证方式

客户端识别配置文件

  • pg_ident.conf:用于映射外部用户名到数据库用户名
  • location:默认位于数据目录下
  • 作用:主要用于系统用户与数据库用户的映射

参数文件格式

参数设置格式

  • 基本格式parameter_name = value
  • 注释:以#开头的行表示注释
  • 空格处理:参数名和等号之间、等号和值之间的空格是可选的
  • 大小写:参数名不区分大小写

参数值类型

  • 布尔值on/offtrue/falseyes/no1/0
  • 整数:直接指定数值,如1024
  • 浮点数:如0.51.23e4
  • 字符串:直接指定或用单引号/双引号括起来
  • 枚举值:从预定义的选项中选择一个值
  • 列表:用逗号分隔的多个值,如'value1,value2,value3'

参数单位

  • 内存单位B(字节)、KB(千字节)、MB(兆字节)、GB(吉字节)
  • 时间单位ms(毫秒)、s(秒)、min(分钟)、h(小时)、d(天)
  • 大小单位:与内存单位相同

主配置文件结构

1. 连接和认证

  • listen_addresses:监听的IP地址
  • port:监听的端口号
  • max_connections:最大并发连接数
  • superuser_reserved_connections:为超级用户保留的连接数
  • unix_socket_directories:Unix套接字目录
  • ssl:是否启用SSL

2. 文件位置

  • data_directory:数据目录路径
  • hba_file:pg_hba.conf文件路径
  • ident_file:pg_ident.conf文件路径
  • external_pid_file:外部PID文件路径

3. 资源消耗

  • shared_buffers:共享缓冲区大小
  • work_mem:每个操作的工作内存大小
  • maintenance_work_mem:维护操作的内存大小
  • autovacuum_work_mem:自动清理操作的内存大小
  • dynamic_shared_memory_type:动态共享内存类型

4. 预写式日志

  • wal_level:WAL日志级别
  • fsync:是否同步写入WAL日志
  • synchronous_commit:同步提交级别
  • wal_buffers:WAL缓冲区大小
  • checkpoint_timeout:检查点超时时间
  • max_wal_size:最大WAL大小
  • min_wal_size:最小WAL大小

5. 查询规划

  • effective_cache_size:查询优化器估计的可用缓存大小
  • random_page_cost:随机页面访问成本
  • seq_page_cost:顺序页面访问成本
  • cpu_tuple_cost:处理每条记录的CPU成本
  • cpu_index_tuple_cost:处理每个索引条目的CPU成本
  • cpu_operator_cost:处理每个操作符的CPU成本

6. 日志记录

  • log_destination:日志输出目标
  • logging_collector:是否启用日志收集器
  • log_directory:日志存储目录
  • log_filename:日志文件名格式
  • log_rotation_age:日志轮换时间间隔
  • log_rotation_size:日志轮换大小阈值
  • log_min_messages:记录的最小日志级别
  • log_min_error_statement:记录错误语句的最小日志级别

7. 运行时统计

  • track_activities:是否跟踪每个会话的当前活动
  • track_statement:跟踪哪种类型的语句
  • track_io_timing:是否跟踪I/O操作的时间
  • stats_temp_directory:统计临时文件目录

8. 自动清理

  • autovacuum:是否启用自动清理
  • log_autovacuum_min_duration:记录自动清理操作的时间阈值
  • autovacuum_max_workers:自动清理的最大工作进程数
  • autovacuum_naptime:自动清理进程的休眠时间
  • autovacuum_vacuum_threshold:触发VACUUM的阈值
  • autovacuum_analyze_threshold:触发ANALYZE的阈值

9. 客户端连接默认

  • client_encoding:客户端编码
  • default_transaction_isolation:默认事务隔离级别
  • default_transaction_read_only:默认事务是否为只读
  • check_function_bodies:是否检查函数体
  • default_statistics_target:默认统计信息目标

10. 锁管理

  • deadlock_timeout:检测死锁的超时时间
  • max_locks_per_transaction:每个事务的最大锁数
  • max_pred_locks_per_transaction:每个事务的最大谓词锁数

参数管理工具

gs_guc工具

  • 功能:GaussDB的参数配置管理工具
  • 主要命令
    • gs_guc set:设置参数
    • gs_guc get:获取参数值
    • gs_guc reload:重新加载参数配置
    • gs_guc check:检查参数配置
  • 使用示例
    bash
    # 设置参数
    gs_guc set -D /data/gaussdb -c "max_connections = 500"
    
    # 获取参数值
    gs_guc get -D /data/gaussdb -c "max_connections"
    
    # 重新加载参数
    gs_guc reload -D /data/gaussdb -c "max_connections"

SQL命令管理

  • SHOW:查看参数值

    sql
    SHOW max_connections;
    SHOW all;
  • SET:设置会话级别的参数

    sql
    SET work_mem = '16MB';
    SET default_transaction_isolation = 'read committed';
  • ALTER SYSTEM:设置系统级别的参数

    sql
    ALTER SYSTEM SET max_connections = 500;
    ALTER SYSTEM RESET max_connections;

参数生效方式

1. 会话级别生效

  • 范围:仅对当前会话有效
  • 设置方式:使用SET命令
  • 特点:不需要重启数据库,立即生效
  • 示例
    sql
    SET work_mem = '16MB';

2. 数据库级别生效

  • 范围:对指定数据库的所有会话有效
  • 设置方式:使用ALTER DATABASE命令
  • 特点:不需要重启数据库,新会话生效
  • 示例
    sql
    ALTER DATABASE postgres SET work_mem = '16MB';

3. 用户级别生效

  • 范围:对指定用户的所有会话有效
  • 设置方式:使用ALTER USER命令
  • 特点:不需要重启数据库,新会话生效
  • 示例
    sql
    ALTER USER postgres SET work_mem = '16MB';

4. 系统级别生效

  • 范围:对整个数据库系统有效
  • 设置方式
    • 使用gs_guc set命令
    • 使用ALTER SYSTEM命令
    • 直接修改配置文件
  • 特点
    • 有些参数需要重启数据库才能生效
    • 有些参数可以通过重新加载配置生效

参数修改注意事项

1. 参数类型

  • 静态参数:需要重启数据库才能生效
  • 动态参数:可以通过重新加载配置生效
  • 会话参数:仅对当前会话有效

2. 修改前准备

  • 备份配置文件:在修改参数前,备份原始配置文件
  • 了解参数含义:确保理解参数的作用和影响
  • 测试验证:在测试环境中验证参数修改的效果
  • 制定回滚方案:准备好回滚措施,以防修改后出现问题

3. 修改后验证

  • 检查参数值:使用SHOW命令或gs_guc get命令检查参数是否已生效
  • 监控系统性能:观察参数修改后系统性能的变化
  • 检查日志:查看日志中是否有相关错误或警告信息
  • 验证业务功能:确保业务功能正常运行

参数优化最佳实践

1. 基于负载调整

  • OLTP负载:优化连接数、内存参数、锁管理参数
  • OLAP负载:优化工作内存、并行查询参数、I/O参数
  • 混合负载:平衡各种参数设置,满足不同类型的查询需求

2. 基于硬件配置

  • 内存:根据物理内存大小调整shared_buffers、work_mem等参数
  • CPU:根据CPU核心数调整max_connections、parallel_workers等参数
  • 存储:根据存储类型调整fsync、checkpoint参数等

3. 监控和调整

  • 定期监控:监控数据库性能指标,识别需要调整的参数
  • 逐步调整:每次只调整少量参数,避免同时修改多个参数
  • 记录变更:记录参数修改的时间、原因、效果等信息
  • 定期回顾:定期回顾参数设置,根据业务变化进行调整

4. 参考最佳实践

  • 官方文档:参考GaussDB官方文档中的参数调优建议
  • 行业经验:参考同行业类似场景的参数设置
  • 性能测试:通过性能测试确定最佳参数组合

常见问题(FAQ)

Q1: 如何查看参数的当前值?

A1: 可以使用以下方法查看参数值:

  • 使用SHOW parameter_name;命令查看单个参数值
  • 使用SHOW all;命令查看所有参数值
  • 使用gs_guc get -D /data/gaussdb -c parameter_name命令查看参数值
  • 直接查看配置文件

Q2: 哪些参数修改后需要重启数据库?

A2: 以下类型的参数通常需要重启数据库:

  • 影响数据库核心架构的参数
  • 内存分配相关的关键参数
  • 安全相关的参数
  • 可以通过gs_guc check命令查看参数是否需要重启

Q3: 如何备份和恢复参数配置?

A3: 备份和恢复参数配置的方法:

  • 备份:直接复制配置文件到安全位置
  • 恢复:将备份的配置文件复制回原位置,然后重启或重载数据库
  • 使用版本控制工具管理配置文件的变更

Q4: 如何优化GaussDB的参数设置?

A4: 参数优化的步骤:

  1. 了解数据库的业务负载类型
  2. 监控数据库的性能指标
  3. 识别需要调整的参数
  4. 在测试环境中验证参数调整
  5. 在生产环境中逐步调整
  6. 监控调整后的效果
  7. 定期回顾和优化

Q5: 如何处理参数设置错误导致的数据库无法启动?

A5: 处理方法:

  1. 检查数据库日志,找出错误原因
  2. 使用备份的配置文件恢复
  3. 如果没有备份,手动编辑配置文件,修正错误的参数设置
  4. 重启数据库
  5. 验证数据库是否能正常启动