PostgreSQL 运维实战系列,第六期:DBA 的自动化运维与 AI 赋能工具箱 0. 前言:当传统 DBA 遇上不可持续的工作负载 前五期我们覆盖了从生产环境搭建、高可用部署、性能调优、故障诊断到容量规划的全链路运维知识。但一个现实问题日益凸显:DBA 的人力无法与数据规模一同线性增长。 当你管理 3 个集群时,手工巡检是可行的。当你管理 30 或 300 个集群时,手工巡检就变成了“不可持续发展”。与此同时,数据库的复杂性仍在指数级增长——仅可观测性的关键指标就可能超过 600 个。 这正是自动化运维和 AI 赋能的价值所在。Gartner 预测,到 2027 年,超过 50% 的数据库运维任务将由 AI 自动化完成。 本期聚焦三个层级: 自动化巡检与健康检查:把 DBA 的“看家本领”固化进脚本,每日自动生成健康报告 混沌工程与韧性验证:主动制造故障,验证系统在真实灾难面前是否真的可靠 AI 辅助诊断与智能运维:从“人看日志”到“AI 读指标,人来决策” 1. 自动化巡检:让“好习惯”变成“每天自动跑” 1.1 从“查什么”到“怎么查”——构建自动化巡检体系 一个称职的 DBA 每天早上打开电脑后做的第一件事,通常是执行一组“熟悉到肌肉记忆”的检查 SQL。自动化巡检的本质,就是把这张“检查清单”变成每天凌晨自动运行的脚本,并把结果推送到 DBA 看得见的地方。 你必须每天的检查的核心指标: 检查项 关键 SQL 告警阈值 事务 ID 年龄 SELECT datname, age(datfrozenxid) FROM pg_database; > 15 亿预警(接近 20 亿上限) 死元组占比 SELECT relname, n_dead_tup, n_live_tup FROM pg_stat_user_tables WHERE n_dead_tup > 0; 死元组占比 > 10% 复制延迟 SELECT pid, usename, application_name, state, pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) FROM pg_stat_replication; > 10 秒 连接数使用率 SELECT count(*)::numeric / current_setting('max_connections')::numeric * 100 FROM pg_stat_activity; > 80% 停滞复制槽 SELECT slot_name, active FROM pg_replication_slots WHERE active = false; > 0(需人工确认) 长时间未提交事务 SELECT pid, age(now(), xact_start) FROM pg_stat_activity WHERE xact_start IS NOT NULL AND state = 'idle in transaction'; > 10 分钟 检查维度不止在 SQL 层:数据库的运行依赖底层操作系统。DBA 还需联合排查系统资源,通过 sar、htop、vmstat 等工具输出到同一个监控体系里。OS + DB 两部分融合在一起,巡检才是完整的。 1.2 定时任务自动生成 HTML 日报 将常用巡检组合打包进一个自动执行脚本,并利用邮件或企业微信机器人发送结构化报告,能有效减少重复劳动且避免遗漏: #!/bin/bash # daily_health_check.sh PSQL="psql -U postgres -d postgres -t -A -F ','" # 连接数与复制延迟 $PSQL -c "SELECT count(*) FROM pg_stat_activity;" > /tmp/conn_count.txt $PSQL -c "SELECT pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) FROM pg_stat_replication;" > /tmp/replica_lag.txt # 事务 ID 年龄 $PSQL -c "SELECT age(datfrozenxid) FROM pg_database WHERE datname = current_database();" > /tmp/xid_age.txt # 自动拼接邮件正文发送通知 […]