AI 辅助慢 SQL 诊断与优化

最近更新时间:2026-06-01 16:58:31

我的收藏

概述

云数据库 PostgreSQL 结合 DBbrain 智能运维平台和 AI 大模型,提供慢 SQL 自动诊断与优化建议能力。系统自动采集慢查询日志,利用 AI 模型分析执行计划,给出索引优化、SQL 改写、参数调整等建议。

功能架构

┌────────────────────────────────────────────────────────┐
│ DBbrain 智能诊断 │
├────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ 慢查询 │ │ AI 诊断引擎 │ │ 优化建议 │ │
│ │ 采集 │ → │ (大模型分析) │ → │ 生成 │ │
│ └──────────┘ └──────────────┘ └─────────────┘ │
│ ↑ ↑ │
│ │ │ │
│ ┌──────────┐ ┌──────────────┐ │
│ │ pg_stat │ │ EXPLAIN │ │
│ │ 统计信息 │ │ 执行计划 │ │
│ └──────────┘ └──────────────┘ │
└────────────────────────────────────────────────────────┘

使用方式

控制台操作

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 orders
WHERE customer_id = 12345
AND 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 p
WHERE NOT EXISTS (SELECT 1 FROM discontinued d WHERE d.product_id = p.id);

相关文档