GBase 8c 数据库性能优化全攻略

74 阅读3分钟

GBase 8c 是一种支持多模式的分布式事务数据库。本文为使用者与开发者提供性能优化的实用建议,旨在通过调整操作系统和数据库配置,合理分配资源如 CPU、内存、I/O 和网络,提升系统整体性能与查询效率。

一、操作系统优化

为了提高数据库的运行效率,可以根据业务需求对操作系统关键配置进行调整。

准备工作

使用工具 gs_check 检测当前操作系统参数是否达到建议值。如存在差异,需结合实际需求进行修改。

内存配置

通过编辑 sysctl.conf 文件,将内存参数 vm.extfrag_threshold 设置为推荐值 1000。若参数不存在,可自行添加。

vim /etc/sysctl.conf

修改完成后,请执行如下命令,使参数生效。

sysctl-p

修改完成后,请执行如下命令,使参数生效。

sysctl-p

网络相关参数设置

配置 “sysctl.conf” 文件,修改网络相关参数,如果文件中没有网络相关参数,可以手动添加。

vim /etc/sysctl.conf

在修改完成后,请执行如下命令,使参数生效。

sysctl-p

为确保数据库能够高效运行,应结合硬件资源和实际业务需求,合理配置数据库系统参数(GUC 参数)。

****、数据库内存优化****

数据库内存配置对复杂查询性能至关重要,主要涉及逻辑内存管理参数和算子执行时的内存分配。

逻辑内存管理

逻辑内存管理的核心参数为 max_process_memory,用于限制单节点的最大内存占用。其计算公式如下:

max_process_memory = 可用内存总量 - shared memory(包括 shared_buffers)- cstore_buffers

其中,shared_buffers 和 cstore_buffers 是影响作业内存的关键参数。

为了查看数据库节点的内存使用详情,可以通过以下视图查询:

  • 连接单个节点:使用 pg_total_memory_detail 查看内存区域的使用和峰值。
  • 连接主节点:使用 pgxc_total_memory_detail 查询多节点的内存分布。

参数 work_mem 调优

work_mem 参数决定单个查询执行算子的内存分配。一旦超出设置值,数据将写入临时磁盘空间,可能导致性能显著下降(响应时间从秒级延迟到分钟级)。推荐设置如下:

  • 对于复杂查询(5-10 个关联操作,无并发):work_mem = 总内存的 50% ÷ 10
  • 对于简单查询(2-5 个关联操作,无并发):work_mem = 总内存的 50% ÷ 5
  • 对于并发场景:work_mem = 串行情况下的 work_mem ÷ 并发数

此外,work_mem 的设置会影响算子的 “下盘” 行为。常见的可下盘算子包括:

  • Hash/VecHashJoin
  • Agg/VecAgg
  • Sort/VecSort
  • Material/VecMaterial
  • SetOp/VecSetOp
  • WindowAgg/VecWindowAgg

调优时需平衡并发吞吐量和单作业性能,建议结合实际查询(通过 Explain Performance 输出)进行分析后调整。


三、 数据库并发优化

数据库支持全局并发队列和局部并发队列两种控制方式。

全局并发队列

全局并发队列通过参数 max_active_statements 限制主节点的并发作业数。当作业数达到上限时,后续作业将排队等待。管理员执行的任务不受此限制。

设置此参数时,应综合考虑系统内存和 I/O 的使用情况:

  • 事务型高并发场景:max_active_statements = -1(不限并发数)。
  • 分析型查询场景:max_active_statements = CPU 核数 ÷ 数据库节点数,推荐值为 5~8。

局部并发队列

局部并发队列用于限制单个资源池内的并发作业数,依据作业复杂度(cost 值)进行调控。参数 parctl_min_cost 用于定义复杂作业的最低判定标准,从而平衡资源池的使用效率。