数据库概览
检查Schema变更:识别并且记录上个月以来发生的重要模式变更,确保这些变更不会对性能造成影响。代码版本管理工具(Git 等)可以帮助我们记录所有结构变更。
系统性能
检查系统统计:监控最近一个月的 CPU、I/O 以及磁盘利用率,发现性能瓶颈。
查看配置设置:检查与预写日志记录(WAL)相关的设置,并确保检查点基于时间进行以优化 I/O。
分析等待事件:识别与锁定相关的瓶颈,并且检查可能导致问题的等待事件。
修复表膨胀
数据膨胀:检查 autovacuum 设置,确保按照预期运行清理以防止产生新的数据膨胀。如果需要,可以使用 VACUUM FULL 命令(小心使用)或者 pg_repack 或 pg_squeeze 等工具清理现有的数据膨胀。
索引膨胀:调查随机插入和更新索引导致的潜在索引膨胀问题。根据需要可以使用 REINDEX CONCURRENTLY 重建索引。
检查查询性能
检查新增查询:检查新增的查询语句,确保它们使用了最优索引(EXPLAIN),并且性能稳定。
检查慢查询:分析查询日志(pgBadger),找出超长时间运行的查询语句并分析原因。
分析性能趋势:逐月比较查询语句的性能趋势,识别性能下降的语句,并通过执行计划确认性能下降的原因。
识别被阻塞的查询:分析查询日志,检查是否存在被阻塞或者锁等待的查询语句。
索引优化
优化索引使用:查看当前的索引使用情况,删除任何无效、未使用或冗余的索引以减少维护开销。
创建缺失索引:识别并创建缺失的可以提高查询性能的索引。
评估新索引:评估新增索引的影响,尤其是可能阻碍 PostgreSQL HOT 优化的索引。
检查可用性
回顾数据库故障:如果数据库出现服务中断,分析事故原因并记录相关文档以防止未来出现相同问题。
监控数据库重启:分析任何数据库重启事件,确保不是关键性能问题导致重启。
检查事务 ID 使用状况:查看事务 ID 使用情况以及 autovacuum 进程的性能,避免出现事务 ID 回卷问题。
评估连接数限制:确保数据库没有到达连接数上限(max_connections),并且资源分配合理。
监控复制延迟:检查复制延迟,确保跨节点复制正常运行。
应用程序错误日志:通过数据库日志查看应用程序错误,必要时适当调整应用程序。
检查备份:验证备份是否成功,并且基于最近的备份执行了还原测试,确保备份完整性。
监控自动化
自动执行日常任务:确定能够执行日常自动化任务(查询性能监控、索引选择、清理进程等)的工具,例如 Percona Monitoring and Management,pgAdmin、pganalyze、pgCluu 等。
自动化告警:配置关键性能指标(复制延迟、查询超时、磁盘利用率等)的告警阈值,并且在超过阈值时自动发送告警信息。