外观
GaussDB 监控指标分类
性能指标
查询性能指标
tps:每秒事务数,反映数据库处理事务的能力
- 监控方法:查询pg_stat_database视图
- 计算公式:(xact_commit + xact_rollback) / 时间间隔
- 正常范围:根据业务负载而定
qps:每秒查询数,反映数据库处理查询的能力
- 监控方法:查询pg_stat_database视图
- 计算公式:(tup_returned + tup_fetched + tup_inserted + tup_updated + tup_deleted) / 时间间隔
- 正常范围:根据业务负载而定
响应时间:查询的平均响应时间
- 监控方法:使用pg_stat_statements扩展
- 指标:mean_time字段
- 正常范围:通常应小于100ms
执行计划指标
全表扫描率:执行全表扫描的查询比例
- 监控方法:查询pg_stat_user_tables视图
- 指标:seq_scan字段
- 优化建议:对于频繁全表扫描的表,考虑创建索引
索引使用率:索引被使用的频率
- 监控方法:查询pg_stat_user_indexes视图
- 指标:idx_scan字段
- 优化建议:移除不使用的索引
资源使用指标
CPU使用率:数据库进程占用的CPU百分比
- 监控方法:使用操作系统工具(top, sar)或监控系统
- 正常范围:通常应小于70%
内存使用率:数据库使用的内存比例
- 监控方法:查询pg_stat_bgwriter视图
- 指标:buffers_alloc字段
- 正常范围:根据配置的shared_buffers大小而定
系统指标
实例状态指标
数据库状态:数据库实例的运行状态
- 监控方法:使用gs_ctl工具或查询pg_stat_database视图
- 状态值:active, idle, idle in transaction, idle in transaction (aborted), fastpath function call
- 正常状态:active或idle
连接数:当前数据库连接数
- 监控方法:查询pg_stat_database视图或pg_stat_activity视图
- 指标:numbackends字段
- 正常范围:应小于max_connections参数值的80%
后台进程指标
检查点活动:检查点的执行情况
- 监控方法:查询pg_stat_bgwriter视图
- 指标:checkpoints_timed, checkpoints_req, buffers_checkpoint, buffers_clean, maxwritten_clean
- 正常范围:检查点次数应稳定,不应频繁触发
WAL写入:WAL日志的写入情况
- 监控方法:查询pg_stat_bgwriter视图
- 指标:buffers_backend_fsync, buffers_alloc
- 正常范围:WAL写入应稳定,不应出现突发高峰
存储指标
磁盘使用指标
表空间大小:各表空间的使用大小
- 监控方法:使用pg_tablespace_size函数
- 示例:
SELECT pg_size_pretty(pg_tablespace_size('tbs_user')); - 告警阈值:通常设置为总容量的80%
表大小:各表的使用大小
- 监控方法:使用pg_total_relation_size函数
- 示例:
SELECT pg_size_pretty(pg_total_relation_size('table_name')); - 优化建议:对于大表,考虑分区或归档
IO性能指标
磁盘读写速率:磁盘的读写速度
- 监控方法:使用操作系统工具(iostat, sar)
- 指标:kB_read/s, kB_wrtn/s
- 正常范围:根据存储设备性能而定
IO等待时间:磁盘IO操作的等待时间
- 监控方法:使用操作系统工具(iostat, sar)
- 指标:await字段
- 正常范围:通常应小于10ms
连接指标
连接状态指标
活跃连接数:当前活跃的数据库连接数
- 监控方法:查询pg_stat_activity视图
- 过滤条件:
WHERE state = 'active' - 正常范围:应小于max_connections参数值的50%
空闲连接数:当前空闲的数据库连接数
- 监控方法:查询pg_stat_activity视图
- 过滤条件:
WHERE state = 'idle' - 优化建议:设置合理的idle_in_transaction_session_timeout参数
连接来源指标
连接来源分布:不同IP或应用的连接分布
- 监控方法:查询pg_stat_activity视图
- 字段:client_addr, application_name
- 分析方法:按client_addr或application_name分组统计
连接认证失败次数:认证失败的连接尝试次数
- 监控方法:查看数据库日志
- 关键字:"authentication failed"
- 告警阈值:出现大量认证失败时应警惕
复制指标
主从复制指标
复制状态:主从复制的状态
- 监控方法:查询pg_stat_replication视图
- 状态值:startup, catchup, streaming
- 正常状态:streaming
复制延迟:从库与主库的同步延迟
- 监控方法:查询pg_stat_replication视图
- 计算公式:pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)
- 正常范围:通常应小于1MB
同步状态指标
- 同步备库状态:同步备库的状态
- 监控方法:查询pg_stat_replication视图
- 字段:sync_state
- 状态值:async, sync, potential
- 正常状态:sync(对于同步复制)
安全指标
权限相关指标
超级用户数量:数据库中超级用户的数量
- 监控方法:查询pg_roles视图
- 过滤条件:
WHERE rolsuper = true - 安全建议:超级用户数量应尽量少
权限变更次数:权限变更的频率
- 监控方法:查看数据库日志
- 关键字:"GRANT", "REVOKE"
- 安全建议:定期审计权限变更
访问控制指标
连接限制:达到连接限制的次数
- 监控方法:查看数据库日志
- 关键字:"sorry, too many clients already"
- 优化建议:增加max_connections参数或优化应用连接池
失败登录尝试:失败的登录尝试次数
- 监控方法:查看数据库日志
- 关键字:"invalid password"
- 安全建议:设置合理的password_encryption_type参数
监控指标最佳实践
1. 指标选择
- 关键业务指标:根据业务特点选择关键指标
- 全面覆盖:监控性能、系统、存储、连接等多个方面
- 分层监控:从实例级、数据库级、表级、查询级进行分层监控
2. 监控频率
- 实时监控:对于关键指标,监控频率应小于1分钟
- 定期监控:对于非关键指标,监控频率可设置为5-15分钟
- 历史数据:保存至少30天的历史监控数据
3. 告警设置
- 合理阈值:根据业务特点设置合理的告警阈值
- 多级告警:设置不同级别的告警(警告、严重、紧急)
- 告警通知:确保告警能及时通知到相关人员
4. 分析与优化
- 定期分析:定期分析监控数据,找出性能瓶颈
- 趋势预测:基于历史数据预测资源使用趋势
- 持续优化:根据分析结果进行持续优化
常见问题(FAQ)
Q1: 如何选择需要监控的关键指标?
A1: 选择关键指标应考虑:
- 业务需求:根据业务特点选择相关指标
- 系统资源:监控CPU、内存、磁盘、网络等资源
- 数据库状态:监控实例状态、连接状态、复制状态
- 性能表现:监控TPS、QPS、响应时间等
Q2: 监控指标的正常范围是多少?
A2: 监控指标的正常范围因业务负载和系统配置而异,建议:
- 基于历史数据建立基线
- 根据业务需求调整阈值
- 参考数据库最佳实践
Q3: 如何设置合理的告警阈值?
A3: 设置告警阈值的方法:
- 基于历史数据的95分位数
- 考虑业务峰值负载
- 设置多级告警阈值
- 定期调整告警阈值
Q4: 如何分析监控数据?
A4: 分析监控数据的方法:
- 查看趋势变化:识别异常波动
- 对比历史数据:找出差异
- 关联多个指标:分析指标间的关系
- 定位问题根源:从现象到本质
Q5: 有哪些常用的监控工具?
A5: 常用的监控工具包括:
- 内置工具:gs_ctl, gs_check, pg_stat_*视图
- 开源工具:Prometheus + Grafana, Zabbix, Nagios
- 商业工具:DataDog, New Relic, Dynatrace
- 华为云监控:Cloud Eye
