概述
云数据库 PostgreSQL 结合 DBbrain 智能运维平台和 AI 大模型,提供慢 SQL 自动诊断与优化建议能力。系统自动采集慢查询日志,利用 AI 模型分析执行计划,给出索引优化、SQL 改写、参数调整等建议。
功能架构
┌────────────────────────────────────────────────────────┐│ DBbrain 智能诊断 │├────────────────────────────────────────────────────────┤│ ││ ┌──────────┐ ┌──────────────┐ ┌─────────────┐ ││ │ 慢查询 │ │ AI 诊断引擎 │ │ 优化建议 │ ││ │ 采集 │ → │ (大模型分析) │ → │ 生成 │ ││ └──────────┘ └──────────────┘ └─────────────┘ ││ ↑ ↑ ││ │ │ ││ ┌──────────┐ ┌──────────────┐ ││ │ pg_stat │ │ EXPLAIN │ ││ │ 统计信息 │ │ 执行计划 │ ││ └──────────┘ └──────────────┘ │└────────────────────────────────────────────────────────┘
使用方式
控制台操作
1. 登录 数据库智能管家 DBbrain 控制台。
2. 在实例管理页选择 PostgreSQL 实例。
3. 进入 慢 SQL 分析 → AI 诊断。
4. 查看每条慢查询的 AI 诊断报告和优化建议。
SQL 层面使用
说明:
以下示例的大模型名
<your-llm-model> 仅为占位;请替换为实际开通的模型,如腾讯混元(hunyuan-*)等。结合 tencentdb_ai 插件,可以在 SQL 内直接对慢查询进行 AI 分析。注意:示例中通过
pg_stat_statements 取目标 SQL 时,生产环境建议使用 queryid 精确定位,不要使用模糊 LIKE 匹配,避免命中无关查询。-- 1) 获取慢查询的执行计划EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)SELECT * FROM ordersWHERE customer_id = 12345AND order_date > '2026-01-01'ORDER BY order_date DESC;-- 2) 使用 AI 分析执行计划(生产环境建议按 queryid 取目标 SQL)SELECT tencentdb_ai.chat_completions('<your-llm-model>','你是一位 PostgreSQL 性能优化专家。请分析以下执行计划,找出性能瓶颈并给出优化建议:' ||E'\\n' ||(SELECT query FROM pg_stat_statements WHERE queryid = $1));
结合 tencentdb_index_advisor
-- 对慢查询使用智能索引推荐SELECT * FROM tencentdb_index_advisor.advise_index('SELECT * FROM orders WHERE customer_id = $1 AND order_date > $2 ORDER BY order_date DESC');-- 批量工作负载分析SELECT * FROM tencentdb_index_advisor.advise_index_workload(ARRAY['SELECT * FROM orders WHERE customer_id = $1','SELECT * FROM orders WHERE status = $1 AND created_at > $2','SELECT count(*) FROM orders WHERE product_id = $1']);
典型场景
场景一:缺失索引
问题 SQL:
SELECT * FROM users WHERE email = 'user@example.com';-- 执行时间: 2.5s, Seq Scan on users (rows=1000000)
AI 诊断结论:
表
users 有100万行,email 列无索引。全表顺序扫描导致耗时过长。
优化建议:
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);-- 优化后执行时间: 0.5ms
场景二:统计信息过期
问题:查询计划选择了错误的 JOIN 顺序
AI 诊断结论:
pg_statistic 中的行数估算偏差超过100倍。建议执行
ANALYZE 更新统计信息。优化建议:
ANALYZE orders;ANALYZE order_items;
场景三:SQL 改写
问题 SQL:
SELECT * FROM products WHERE id NOT IN (SELECT product_id FROM discontinued);
AI 优化建议:
-- 改写为 NOT EXISTS(避免 NULL 值问题且效率更高)SELECT p.* FROM products pWHERE NOT EXISTS (SELECT 1 FROM discontinued d WHERE d.product_id = p.id);