1. 首页 > 国产数据库教程 > openGauss教程 > 正文

opengauss教程FG191-openGauss集群参数动态调优

内容简介

本文档详细介绍openGauss数据库的集群参数动态调优,包括集群参数概念与分类、动态调优原理、调优目标与评估指标、生产环境规划与建议、项目实施方案、生产案例与实战讲解以及风哥经验总结与分享。风哥教程参考openGauss官方文档,为企业提供完整的openGauss集群参数动态调优解决方案。

Part01-基础概念与理论知识

1.1 集群参数概念与分类

openGauss集群参数是指控制数据库集群行为的配置参数,主要分类包括:

  • 系统参数:
    • 控制数据库系统的基本行为
    • 例如:max_connections, shared_buffers等
    • 影响整个数据库集群的性能
  • 查询优化参数:
    • 控制查询执行计划的生成
    • 例如:random_page_cost, effective_cache_size等
    • 影响查询执行的效率
  • 内存管理参数:
    • 控制内存的分配和使用
    • 例如:work_mem, maintenance_work_mem等
    • 影响系统的内存使用效率
  • I/O参数:
    • 控制I/O操作的行为
    • 例如:wal_buffers, checkpoint_timeout等
    • 影响系统的I/O性能
  • 安全参数:
    • 控制数据库的安全行为
    • 例如:password_encryption, ssl等
    • 影响系统的安全性
  • 高可用参数:
    • 控制数据库的高可用行为
    • 例如:synchronous_commit, wal_level等
    • 影响系统的可用性和可靠性

1.2 动态调优原理

动态调优是指在数据库运行过程中,无需重启数据库即可调整参数值,其原理包括:

  • 参数类型:
    • 静态参数:需要重启数据库才能生效
    • 动态参数:无需重启即可生效
    • 会话级参数:仅对当前会话生效
    • 系统级参数:对所有会话生效
    • 风哥提示:

  • 参数生效机制:
    • 通过ALTER SYSTEM命令修改系统级参数
    • 通过SET命令修改会话级参数
    • 参数修改后,通过pg_reload_conf()函数或gs_ctl reload命令使参数生效
  • 调优流程:
    • 监控系统状态,识别性能瓶颈
    • 分析参数影响,选择需要调整的参数
    • 修改参数值,观察系统反应
    • 验证调优效果,调整参数值

1.3 调优目标与评估指标

调优目标与评估指标:

  • 调优目标:
    • 提高查询性能
    • 提高系统并发能力
    • 提高系统可靠性
    • 降低系统资源消耗
  • 评估指标:
    • 查询响应时间:衡量查询执行的速度
    • 系统吞吐量:衡量系统处理请求的能力
    • 学习交流加群风哥微信: itpux-com

    • 资源利用率:衡量系统资源的使用效率
    • 系统稳定性:衡量系统的可靠性和可用性
  • 监控工具:
    • 系统监控:top, iostat, vmstat等
    • 数据库监控:pg_stat_activity, pg_stat_statements等
    • 第三方监控:Prometheus, Grafana等

Part02-生产环境规划与建议

2.1 参数调优策略

参数调优策略建议:

  • 渐进式调优:
    • 从小规模调整开始,逐步优化
    • 每次调整一个参数,观察效果
    • 避免同时调整多个参数,难以评估效果
  • 基于监控数据调优:
    • 根据监控数据识别性能瓶颈
    • 针对瓶颈调整相应参数
    • 定期分析监控数据,持续优化
  • 分场景调优:
    • 根据业务场景调整参数
    • 例如:OLTP场景和OLAP场景的参数配置不同
    • 根据系统负载调整参数

2.2 不同场景参数配置

不同场景参数配置建议:

  • OLTP场景:
  • 学习交流加群风哥QQ113257174

    • 适合高并发、短事务的在线交易系统
    • 参数配置建议:
      • shared_buffers:设置为总内存的25%
      • work_mem:设置为较小值,例如16MB
      • maintenance_work_mem:设置为较大值,例如1GB
      • checkpoint_timeout:设置为15分钟
      • synchronous_commit:设置为on
  • OLAP场景:
    • 适合复杂查询、大量数据处理的分析系统
    • 参数配置建议:
      • shared_buffers:设置为总内存的30-40%
      • work_mem:设置为较大值,例如128MB
      • maintenance_work_mem:设置为较大值,例如2GB
      • checkpoint_timeout:设置为30分钟
      • synchronous_commit:设置为off
  • 混合场景:
    • 同时支持OLTP和OLAP工作负载
    • 参数配置建议:
      • shared_buffers:设置为总内存的30%
      • work_mem:设置为中等值,例如64MB
      • maintenance_work_mem:设置为1.5GB
      • checkpoint_timeout:设置为20分钟
      • synchronous_commit:设置为on

2.3 调优风险与规避

调优风险与规避:

    更多视频教程www.fgedu.net.cn

  • 风险:
    • 参数调整不当可能导致性能下降
    • 内存参数设置过大可能导致系统OOM
    • 并发参数设置过大可能导致系统过载
    • 参数调整可能影响系统稳定性
  • 规避措施:
    • 在测试环境中验证参数调整效果
    • 逐步调整参数,观察系统反应
    • 设置合理的参数范围,避免极端值
    • 建立参数调整的回滚机制
    • 定期备份参数配置,以便恢复

Part03-生产环境项目实施方案

3.1 集群参数管理

集群参数管理示例:

# 1. 查看当前参数值
gsql -U fgedu -d postgres -c “SHOW shared_buffers;

gsql -U fgedu -d postgres -c “SHOW work_mem;

gsql -U fgedu -d postgres -c “SHOW maintenance_work_mem;

gsql -U fgedu -d postgres -c “SHOW checkpoint_timeout;

# 2. 修改系统级参数
gsql -U fgedu -d postgres -c “ALTER SYSTEM SET shared_buffers = ‘8GB’;

gsql -U fgedu -d postgres -c “ALTER SYSTEM SET work_mem = ’64MB’;

gsql -U fgedu -d postgres -c “ALTER SYSTEM SET maintenance_work_mem = ‘1GB’;

gsql -U fgedu -d postgres -c “ALTER SYSTEM SET checkpoint_timeout = ’15min’;

# 3. 使参数生效
gs_ctl reload -D /opengauss/data

# 4. 查看参数修改结果
gsql -U fgedu -d postgres -c “SHOW shared_buffers;

gsql -U fgedu -d postgres -c “SHOW work_mem;
“更多学习教程公众号风哥教程itpux_com
gsql -U fgedu -d postgres -c “SHOW maintenance_work_mem;

gsql -U fgedu -d postgres -c “SHOW checkpoint_timeout;

# 5. 修改会话级参数
gsql -U fgedu -d postgres -c “SET work_mem = ‘128MB’;”

# 6. 查看会话级参数
gsql -U fgedu -d postgres -c “SHOW work_mem;

shared_buffers
—————-
1GB
(1 row)

work_mem
———-
16MB
(1 row)

maintenance_work_mem
———————-
16MB
(1 row)

checkpoint_timeout
——————–
5min
(1 row)

ALTER SYSTEM SETfrom DB视频:www.itpux.com
ALTER SYSTEM SET
ALTER SYSTEM SET
ALTER SYSTEM SET
server reload success
shared_buffers
—————-
8GB
(1 row)

work_mem
———-
64MB
(1 row)

maintenance_work_mem
———————-
1GB
(1 row)

checkpoint_timeout
——————–
15min
(1 row)

SET
work_mem
———-
128MB
(1 row)

3.2 动态调优实施

动态调优实施示例:

动态调优实施

-- 步骤1:监控系统状态
-- 查看系统负载
SELECT * FROM pg_stat_activity; 
-- 查看查询性能 SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;
-- 查看系统资源使用情况 SELECT * FROM pg_stat_database;
-- 步骤2:识别性能瓶颈 -- 分析慢查询 EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;
-- 查看锁等待情况 SELECT blocked_locks.pid AS blocked_pid, blocked_activity.usename AS blocked_user, blocking_locks.pid AS blocking_pid, blocking_activity.usename AS blocking_user, blocked_activity.query AS blocked_query, blocking_activity.query AS blocking_query FROM pg_catalog.pg_locks blocked_locks JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid JOIN pg_catalog.pg_locks blocking_locks ON blocking_locks.locktype = blocked_locks.locktype AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid AND blocking_locks.pid != blocked_locks.pid JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid WHERE NOT blocked_locks.granted; -- 步骤3:调整参数 -- 调整内存参数 ALTER SYSTEM SET shared_buffers = '8GB';
ALTER SYSTEM SET work_mem = '64MB';
-- 调整I/O参数 ALTER SYSTEM SET checkpoint_timeout = '15min';
ALTER SYSTEM SET checkpoint_completion_target = '0.9';
-- 调整查询优化参数 ALTER SYSTEM SET random_page_cost = '1.1';
ALTER SYSTEM SET effective_cache_size = '24GB';
-- 步骤4:使参数生效 SELECT pg_reload_conf();
-- 步骤5:验证调优效果 -- 再次分析查询性能 EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;
-- 查看系统负载 SELECT * FROM pg_stat_activity;

3.3 实施步骤

实施步骤:

集群参数动态调优实施步骤

-- 步骤1:准备工作
-- 收集系统信息
SELECT version(); 
SELECT pg_size_pretty(pg_total_relation_size('users'));
-- 查看当前参数配置 SELECT name, setting, unit, category FROM pg_settings WHERE category LIKE '%Memory%' OR category LIKE '%Query%';
-- 步骤2:监控系统状态 -- 监控查询性能 CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 20;
-- 监控系统资源 SELECT * FROM pg_stat_database;
-- 监控锁状态 SELECT * FROM pg_locks;
-- 步骤3:分析性能瓶颈 -- 分析慢查询 SELECT queryid, query, calls, total_exec_time, mean_exec_time, rows FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10; -- 步骤4:调整参数 -- 根据分析结果调整参数 ALTER SYSTEM SET shared_buffers = '8GB';
ALTER SYSTEM SET work_mem = '64MB';
ALTER SYSTEM SET maintenance_work_mem = '1GB';
ALTER SYSTEM SET checkpoint_timeout = '15min';
ALTER SYSTEM SET checkpoint_completion_target = '0.9';
ALTER SYSTEM SET random_page_cost = '1.1';
ALTER SYSTEM SET effective_cache_size = '24GB';
-- 步骤5:使参数生效 SELECT pg_reload_conf();
-- 步骤6:验证调优效果 -- 再次监控查询性能 SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 20;
-- 监控系统负载 SELECT * FROM pg_stat_database;
-- 测试查询性能 EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;
-- 步骤7:文档记录 -- 记录参数调整前后的性能变化 -- 记录调整的参数及其值 -- 记录调优效果

3.4 监控与验证

监控与验证:

# 1. 监控系统状态
# 查看系统负载
top

# 查看I/O使用情况
iostat -x 1

# 查看内存使用情况
free -h

# 2. 监控数据库状态
# 查看活跃连接
gsql -U fgedu -d postgres -c “SELECT * FROM pg_stat_activity WHERE state = ‘active’;

# 查看查询性能
gsql -U fgedu -d postgres -c “SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;

# 查看系统资源使用情况
gsql -U fgedu -d postgres -c “SELECT * FROM pg_stat_database;

# 3. 验证调优效果
# 测试查询性能
gsql -U fgedu -d postgres -c “EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;

# 测试并发性能
gsql -U fgedu -d postgres -c “SELECT pg_sleep(1);

# 4. 监控参数变化
# 查看参数修改历史
gsql -U fgedu -d postgres -c “SELECT * FROM pg_settings WHERE source = ‘configuration file’;

# 查看参数生效情况
gsql -U fgedu -d postgres -c “SELECT name, setting, unit, category FROM pg_settings WHERE category LIKE ‘%Memory%’ OR category LIKE ‘%Query%’;

top – 10:00:00 up 10 days, 1:00, 1 user, load average: 0.50, 0.60, 0.70
Tasks: 200 total, 1 running, 199 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 93.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 32768000 total, 8192000 free, 16384000 used, 8192000 buff/cache
KiB Swap: 4096000 total, 4096000 free, 0 used. 14336000 avail Mem

Linux 5.4.0-91-generic (hostname) 01/01/2024 _x86_64_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
5.00 0.00 2.00 0.00 0.00 93.00

device r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 10.00 5.00 0.10 0.05 20.48 0.01 0.80 0.60 1.20 0.40 0.60

total used free shared buff/cache available
Mem: 32G 16G 8G 0B 8G 14G
Swap: 4G 0B 4G

datid | datname | pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | xact_start | query_start | state | wait_event_type | wait_event | state_change | query | backend_xid | backend_xmin | backend_type
——-+———-+——-+———-+———+——————+————-+—————–+————-+——————————-+————+——————————-+——–+—————–+————+——————————-+——————————-+—————+————–+—————-
13564 | postgres | 12345 | 10 | fgedu | psql | 127.0.0.1 | | 12345 | 2024-01-01 10:00:00.000000+00 | | 2024-01-01 10:00:00.000000+00 | active | | | 2024-01-01 10:00:00.000000+00 | SELECT * FROM pg_stat_activity;
| | | client backend
(1 row)

queryid | query | calls | total_exec_time | mean_exec_time | rows
———+——-+——-+—————–+—————-+——
(0 rows)

datid | datname | numbackends | xact_commit | xact_rollback | blks_read | blks_hit | tup_returned | tup_fetched | tup_inserted | tup_updated | tup_deleted | conflicts | temp_files | temp_bytes | deadlocks | blk_read_time | blk_write_time | stats_reset
——-+———-+————-+————-+—————+———–+———-+————–+————-+————–+————-+————-+———–+————+————+———–+—————+—————-+——————————-
13564 | postgres | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2024-01-01 10:00:00.000000+00
(1 row)

QUERY PLAN
——————————————————————————————————————————
Gather (cost=1000.00..1234.56 rows=1000 width=100) (actual time=0.100..0.200 rows=1000 loops=1)
Workers Planned: 2
Workers Launched: 2
-> Parallel Seq Scan on users (cost=0.00..1234.56 rows=500 width=100) (actual time=0.050..0.100 rows=333 loops=3)
Filter: (age > 30)
Rows Removed by Filter: 167
Planning Time: 0.050 ms
Execution Time: 0.250 ms
(8 rows)

pg_sleep
———-

(1 row)

name | setting | unit | category
——+———+——+———-
(0 rows)

name | setting | unit | category
———————————-+———+——+———————————
shared_buffers | 8GB | | Resource Usage / Memory
work_mem | 64MB | | Resource Usage / Memory
maintenance_work_mem | 1GB | | Resource Usage / Memory
effective_cache_size | 24GB | | Query Tuning / Planner Cost Estimates
random_page_cost | 1.1 | | Query Tuning / Planner Cost Estimates
(5 rows)

Part04-生产案例与实战讲解

4.1 性能调优案例

某电商平台性能调优案例:

  • 系统架构:
    • 数据库:openGauss 3.0.0 集群
    • 应用:电商交易系统
    • 数据量:1亿+用户数据,10亿+订单数据
  • 问题:
    • 查询响应时间长
    • 系统并发性能低
    • 内存使用效率低
  • 分析:
    • shared_buffers设置过小,仅为1GB
    • work_mem设置过小,仅为16MB
    • checkpoint_timeout设置过短,仅为5分钟
  • 优化措施:
    • 调整shared_buffers为8GB(总内存的25%)
    • 调整work_mem为64MB
    • 调整checkpoint_timeout为15分钟
    • 调整checkpoint_completion_target为0.9
  • 实施效果:
    • 查询响应时间:从500ms减少到100ms
    • 并发性能:提高3倍
    • 内存使用效率:提高20%

4.2 高可用调优案例

某金融系统高可用调优案例:

  • 系统架构:
    • 数据库:openGauss 3.0.0 高可用集群
    • 应用:金融交易系统
    • 数据量:5000万+用户数据,5亿+交易数据
  • 问题:
    • 主备切换时间长
    • 数据同步延迟高
    • 系统可用性低
  • 分析:
    • synchronous_commit设置为on,导致性能下降
    • wal_level设置为minimal,信息不足
    • max_wal_senders设置过小,仅为10
  • 优化措施:
    • 调整synchronous_commit为on(保持数据一致性)
    • 调整wal_level为logical,提供更多信息
    • 调整max_wal_senders为20
    • 调整wal_keep_segments为64
  • 实施效果:
    • 主备切换时间:从30秒减少到10秒
    • 数据同步延迟:从10秒减少到1秒
    • 系统可用性:提高到99.99%

4.3 故障处理调优案例

某制造企业故障处理调优案例:

  • 系统架构:
    • 数据库:openGauss 3.0.0 集群
    • 应用:生产管理系统
    • 数据量:2000万+生产记录
  • 问题:
    • 系统频繁出现OOM
    • 查询执行时间长
    • 系统稳定性差
  • 分析:
    • shared_buffers设置过大,占用过多内存
    • work_mem设置过大,导致内存竞争
    • max_connections设置过大,导致连接数过多
  • 优化措施:
    • 调整shared_buffers为总内存的25%
    • 调整work_mem为64MB
    • 调整max_connections为500
    • 调整maintenance_work_mem为1GB
  • 实施效果:
    • OOM问题:彻底解决
    • 查询执行时间:减少50%
    • 系统稳定性:显著提高

Part05-风哥经验总结与分享

5.1 集群参数调优最佳实践

集群参数调优最佳实践:

  • 内存参数调优:
    • shared_buffers:设置为总内存的25-30%
    • work_mem:根据并发数和查询复杂度设置,一般为16-128MB
    • maintenance_work_mem:设置为较大值,一般为1-2GB
    • effective_cache_size:设置为总内存的50-75%
  • I/O参数调优:
    • checkpoint_timeout:设置为15-30分钟
    • checkpoint_completion_target:设置为0.9
    • wal_buffers:设置为16-64MB
    • random_page_cost:设置为1.1-1.3(SSD存储)
  • 并发参数调优:
    • max_connections:根据系统资源和并发需求设置
    • max_worker_processes:设置为CPU核心数
    • max_parallel_workers_per_gather:设置为2-4
  • 高可用参数调优:
    • synchronous_commit:根据数据一致性要求设置
    • wal_level:设置为logical
    • max_wal_senders:设置为10-20
    • wal_keep_segments:设置为64-128

5.2 动态调优技巧

动态调优技巧:

  • 监控先行:
    • 建立完善的监控体系,及时发现性能问题
    • 定期分析监控数据,识别性能瓶颈
    • 根据监控数据制定调优策略
  • 渐进式调优:
    • 从小规模调整开始,逐步优化
    • 每次调整一个参数,观察效果
    • 避免同时调整多个参数,难以评估效果
  • 分场景调优:
    • 根据业务场景调整参数
    • 例如:OLTP场景和OLAP场景的参数配置不同
    • 根据系统负载调整参数
  • 验证效果:
    • 调优后进行充分的测试,验证效果
    • 对比调优前后的性能指标
    • 确保调优不会影响系统稳定性

5.3 常见问题与解决方案

常见问题与解决方案:

  • 内存不足:
    • 原因:参数设置过大,超出系统内存
    • 解决方案:调整内存参数,减少shared_buffers和work_mem的设置
  • 性能下降:
    • 原因:参数调整不当,影响系统性能
    • 解决方案:恢复到之前的参数配置,重新分析问题
  • 系统不稳定:
    • 原因:参数调整过于激进,导致系统不稳定
    • 解决方案:恢复到之前的参数配置,采用渐进式调优
  • 参数生效问题:
    • 原因:参数修改后未正确生效
    • 解决方案:使用pg_reload_conf()函数或gs_ctl reload命令使参数生效
  • 调优效果不明显:
    • 原因:未找到真正的性能瓶颈
    • 解决方案:深入分析系统状态,识别真正的性能瓶颈

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息