文章目录
- 一、性能优化概述
- 1.1 优化目标
- 1.2 优化原则
- 1.3 优化策略
- 二、性能分析诊断流程
- 2.1 性能问题识别
- 2.1.1 性能指标监控
- 2.1.2 性能瓶颈识别
- 2.2 性能分析工具
- 2.2.1 系统监控
- 2.2.2 数据库监控视图
- 三、SQL优化策略
- 3.1 单节点查询优化
- 3.1.1 分片键使用原则
- 3.1.2 避免全节点扫描
- 3.2 跨节点查询优化
- 3.2.1 减少跨节点查询
- 3.2.2 跨节点聚合优化
- 3.3 索引优化
- 3.3.1 索引设计原则
- 3.3.2 索引使用分析
- 3.4 执行计划分析
- 3.4.1 查看执行计划
- 3.4.2 执行计划优化要点
- 3.5 常见SQL优化案例
- 案例1:避免SELECT *
- 案例2:优化IN子查询
- 案例3:优化LIKE查询
- 案例4:批量操作优化
- 案例5:分页查询优化
- 四、架构优化策略
- 4.1 分片策略优化
- 4.1.1 分片键选择原则
- 4.1.2 分片数量规划
- 4.1.3 分片类型选择
- 4.2 读写分离优化
- 4.2.1 读写分离配置
- 4.2.2 读写分离注意事项
- 4.3 表结构优化
- 4.3.1 表设计原则
- 4.3.2 分区表设计
- 4.4 索引优化
- 4.4.1 索引设计原则
- 4.4.2 索引维护
- 五、参数调优策略
- 5.1 CN节点参数调优
- 5.1.1 连接参数
- 5.1.2 查询优化参数
- 5.2 DN节点参数调优
- 5.2.1 内存参数
- 5.2.2 IO参数
- 5.3 GTM节点参数调优
- 六、硬件优化策略
- 6.1 CPU优化
- 6.2 内存优化
- 6.3 存储优化
- 6.4 网络优化
- 七、监控与告警
- 7.1 关键指标监控
- 7.2 告警阈值设置
- 八、优化实施流程
- 8.1 优化前准备
- 8.2 优化实施
- 8.3 持续优化
- 九、常见性能问题及解决方案
- 9.1 跨节点查询过多
- 9.2 节点负载不均衡
- 9.3 分布式事务性能差
- 9.4 主从延迟
- 十、优化检查清单
- 10.1 SQL优化检查
- 10.2 架构优化检查
- 10.3 参数优化检查
- 10.4 监控检查
- 10.5 全量可落地巡检清单(扩展版)
- 重要提醒
一、性能优化概述
1.1 优化目标
Gauss数据库性能优化的核心目标:
- 提升吞吐量:提高QPS(每秒查询数)和TPS(每秒事务数)
- 降低响应时间:减少SQL执行时间和事务响应时间
- 提高资源利用率:优化CPU、内存、IO等资源使用
- 保障系统稳定性:避免性能瓶颈导致的系统故障
- 优化分布式性能:减少跨节点查询,优化分布式事务性能
1.2 优化原则
- 系统性原则:从整体架构到具体参数,系统化优化
- 数据驱动原则:基于监控数据和性能指标进行优化
- 渐进式原则:逐步优化,每次调整后验证效果
- 业务优先原则:优化不能影响业务功能和数据一致性
- 可回滚原则:重要变更需制定回滚方案
- 分布式优先原则:优先保证单节点操作,减少跨节点查询
1.3 优化策略
性能优化策略 ├── 性能分析 │ ├── 性能指标收集 │ ├── 瓶颈识别(CN/DN/GTM) │ ├── 节点性能分析 │ └── 根因分析 ├── 优化策略制定 │ ├── 架构优化(分片策略、读写分离) │ ├── SQL优化(单节点查询、跨节点优化) │ ├── 参数调优(CN、DN、GTM节点) │ └── 硬件优化 ├── 优化实施 │ ├── 测试环境验证 │ ├── 生产环境实施 │ └── 效果监控 └── 持续优化 ├── 性能基线建立 ├── 定期评估 └── 优化迭代二、性能分析诊断流程
2.1 性能问题识别
2.1.1 性能指标监控
关键性能指标(KPI)
-- 1. 系统整体性能(CN节点)SELECT'QPS'ASMETRIC,COUNT(*)/(EXTRACT(EPOCHFROM(MAX(QUERY_START)-MIN(QUERY_START))))ASVALUEFROMPG_STAT_STATEMENTSWHEREQUERY_START>NOW()-INTERVAL'5 minutes';-- 2. 响应时间分布SELECTCASEWHENMEAN_EXEC_TIME<100THEN'<100ms'WHENMEAN_EXEC_TIME<500THEN'100-500ms'WHENMEAN_EXEC_TIME<1000THEN'500ms-1s'WHENMEAN_EXEC_TIME<5000THEN'1s-5s'ELSE'>5s'ENDASTIME_RANGE,COUNT(*)ASCOUNT,ROUND(COUNT(*)*100.0/SUM(COUNT(*))OVER(),2)ASPERCENTAGEFROMPG_STAT_STATEMENTSWHEREQUERY_START>NOW()-INTERVAL'5 minutes'GROUPBYCASEWHENMEAN_EXEC_TIME<100THEN'<100ms'WHENMEAN_EXEC_TIME<500THEN'100-500ms'WHENMEAN_EXEC_TIME<1000THEN'500ms-1s'WHENMEAN_EXEC_TIME<5000THEN'1s-5s'ELSE'>5s'END;-- 3. 缓冲池命中率(DN节点)SELECTSUM(HEAP_BLKS_HIT)*100.0/NULLIF(SUM(HEAP_BLKS_HIT)+SUM(HEAP_BLKS_READ),0)ASHEAP_HIT_RATE,SUM(IDX_BLKS_HIT)*100.0/NULLIF(SUM(IDX_BLKS_HIT)+SUM(IDX_BLKS_READ),0)ASIDX_HIT_RATEFROMPG_STAT_USER_TABLES;-- 4. 锁等待情况SELECTCOUNT(*)ASLOCK_WAITS,AVG(EXTRACT(EPOCHFROM(NOW()-WAIT_START)))ASAVG_WAIT_TIME_SEC,MAX(EXTRACT(EPOCHFROM(NOW()-WAIT_START)))ASMAX_WAIT_TIME_SECFROMPG_LOCKSWHERENOTGRANTED;-- 5. 节点查询统计SELECTNODENAME,COUNT(*)ASQUERY_COUNT,AVG(EXEC_TIME)ASAVG_TIMEFROMPG_STAT_STATEMENTSGROUPBYNODENAME;2.1.2 性能瓶颈识别
瓶颈类型识别
- CN节点瓶颈
- 连接数达到上限
- 查询计划生成耗时
- 跨节点查询过多
- 负载不均衡
- DN节点瓶颈
- CPU使用率高
- 内存不足
- IO等待时间长
- 锁等待频繁
- GTM节点瓶颈
- 全局事务ID分配延迟
- 全局锁竞争
- 网络瓶颈
- CN到DN网络延迟
- 跨节点网络通信
- 带宽不足
- 分布式事务瓶颈
- 两阶段提交耗时
- 分布式锁竞争
- 跨节点事务过多
诊断SQL
-- 1. 查看CN连接状态SELECTCOUNT(*)ASTOTAL_CONNECTIONS,COUNT(*)FILTER(WHERESTATE='active')ASACTIVE_CONNECTIONS,COUNT(*)FILTER(WHERESTATE='idle')ASIDLE_CONNECTIONSFROMPG_STAT_ACTIVITY;-- 2. 查看慢查询(包含节点信息)SELECTQUERY,NODENAME,MEAN_EXEC_TIME,CALLS,TOTAL_EXEC_TIMEFROMPG_STAT_STATEMENTSWHEREMEAN_EXEC_