查询分析¶
查询分析是数据库模块的独立分析入口,支持跨实例的查询聚合展示。当您管理多个数据库实例时,无需逐个进入实例详情页,即可从全局视角定位系统级慢查询瓶颈。
适用数据库类型
查询分析当前支持 MySQL、PostgreSQL、Oracle、SQL Server、MongoDB。切换数据库类型后,列表将按该类型重新加载对应实例的查询数据。
功能定位¶
与查看器以单实例为维度的查询分析不同,查询分析的核心能力包括:
- 跨实例聚合:同一条业务 SQL 在多个实例上执行时,自动聚合为全局累计数据,避免逐实例排查。
- 同类查询合并:系统会自动将参数值不同的同类 SQL(如
WHERE id = 1与WHERE id = 2)识别并合并为同一查询模板进行统计,避免同一语句因参数差异而分散展示。 - 全局性能排序:支持按总耗时、执行次数、平均耗时等多维度排序,快速发现全局性能瓶颈。
页面布局¶
查询分析页面由顶部操作栏、左侧快捷筛选、查询列表及详情侧板组成。
顶部操作栏¶
| 元素 | 说明 |
|---|---|
| 数据库类型选择器 | 下拉切换 MySQL / PostgreSQL / Oracle / SQL Server / MongoDB,切换后列表按该类型重新加载 |
| SQL 模板搜索 | 支持按关键词搜索 SQL 模板,输入限制 512 字节 |
| 查询总数 | 显示当前筛选条件下的查询模板数量 |
| 导出 | 导出当前列表页为 CSV 文件、TXT 或导出到仪表板 |
| 显示项 | 支持自定义显示/隐藏列表列 |
左侧快捷筛选¶
| 筛选维度 | 说明 |
|---|---|
| 实例名 | 多选,展示该数据库类型下的所有实例 |
| 数据库地址 | 多选,按数据库连接地址筛选 |
| 总耗时 | 范围分段筛选 |
| 执行次数 | 范围分段筛选 |
时间范围联动
查询分析的时间范围与全局时间控件联动。列表数据与详情侧板中的趋势图均基于选定的时间窗口进行实时聚合。
查询列表¶
列表展示在当前时间范围、当前数据库类型下,经聚合后的所有查询模板。每条记录代表一类 SQL(参数已替换为 ?),并汇总了该类 SQL 在所有选中实例上的执行数据。
列表字段¶
| 字段 | 说明 |
|---|---|
| SQL 模板 | 参数替换为 ? 后的 SQL 文本,列表中最多显示 2 行。点击可展开右侧详情侧板 |
| 执行次数 | 时间范围内,该类查询在所有实例上的累计执行次数 |
| 平均耗时 | 该类查询的平均单次执行时间 |
| 总耗时 | 时间范围内,该类查询在所有实例上的累计执行时间 |
| 性能开销占比 | 该类查询累计总耗时占所有查询累计总耗时的百分比,以进度条可视化。占比越高,说明该类查询对系统整体性能的影响越大 |
| 平均扫描行数 | 该类查询在所有实例上的平均扫描/返回行数,用于评估查询的数据扫描范围 |
| 趋势 | 当前时间范围内执行次数的迷你折线图(Sparkline),与列表页时间范围联动 |
SQL 模板与原始 SQL
列表中展示的 SQL 模板已将具体参数值替换为 ?,方便您关注语句结构本身。在详情侧板中,可查看该模板下最近出现的一条原始 SQL 样本,并支持一键复制完整文本。
查询详情侧板¶
点击列表任意行,右侧滑出查询详情侧板,展示该类查询的全局性能数据。侧板包含以下 Tab:
完整 SQL¶
侧板顶部固定展示该类查询的完整 SQL 模板(参数已替换为 ?),支持一键复制。
性能趋势¶
与列表页时间范围联动,以时间序列图表展示该类查询的三个核心指标:
| 图表 | 说明 |
|---|---|
| 执行次数 | 次/分钟,反映该类查询的并发压力趋势 |
| 平均耗时 | 毫秒(ms),反映该类查询的单次执行效率趋势 |
| 总耗时 | 毫秒(ms),反映该类查询在整体系统中的时间消耗趋势 |
每个指标独立展示时间序列图,支持选择时间间隔过滤或导出图表。
实例¶
展示该类查询在各实例上的执行分布,帮助判断瓶颈集中在哪个实例。
| 字段 | 说明 |
|---|---|
| 数据库地址 | 实例的连接地址 |
| 实例名 | 数据库实例标识 |
| 执行次数 | 该实例上该类查询的执行次数,带进度条可视化 |
| 平均耗时 | 该实例上该类查询的平均执行时间 |
| 总耗时 | 该实例上该类查询的累计执行时间,带进度条可视化 |
| 平均发送行数 | 该实例上该类查询平均返回的行数 |
| 错误次数 | 该实例上该类查询执行失败的次数 |
- 实例名可点击,将以新页面打开该实例的单实例查询详情页(复用现有查看器详情)。
- 支持在搜索框中按实例名或数据库地址过滤。
用户¶
展示该类查询在各数据库账号上的执行分布。
| 字段 | 说明 |
|---|---|
| 用户 | 数据库账号名 |
| 样本数 | 该用户执行此类查询的次数 |
| 平均耗时 | 该用户执行此类查询的平均时间 |
- 支持在搜索框中按用户名过滤。
查询样本¶
展示该类查询的实际采样记录,字段依据数据库类型有所差异。
MySQL 示例字段:
| 字段 | 说明 |
|---|---|
| 时间 | 采样发生的时间戳 |
| 数据库 | 目标数据库(Schema) |
| 执行时长 | 该样本的实际执行耗时 |
| 用户 | 执行该样本的数据库账号 |
| 等待组 | 该样本的等待事件分组 |
不同数据库的采样字段差异
查询样本的展示字段与数据库类型相关。例如 SQL Server 会展示“会话 ID、等待类型、CPU 耗时”等字段,Oracle 与 PostgreSQL 亦会展示各自的原生性能字段。具体字段以页面实际展示为准。
执行计划¶
在查询列表中点击 SQL 模板,打开详情侧板并进入执行计划。执行计划描述数据库优化器为当前查询选择的执行方式,可用于判断查询是否存在全表扫描、索引使用不当或 Join 成本较高等问题。
适用数据库类型
执行计划当前支持 MySQL、PostgreSQL、Oracle 和 SQL Server,暂不支持 MongoDB。只有当前环境已开启执行计划采集,且系统已采集到对应的计划数据时,页面才会展示执行计划。
选择执行计划¶
同一条查询可能在不同数据库实例上采用不同的执行计划,也可能在同一实例上存在多个计划。您可以通过页面顶部的选择器切换查看,选项由实例名称和计划标识组成,例如 prod-sql-01 · 0x72AE91F3。
以 SQL Server 为例,计划标识显示为 Plan Hash。当同一条查询的 Plan Hash 发生变化时,通常表示数据库采用了不同的执行方案。
选择计划后,页面展示该计划所属的数据库实例、数据库名称和计划标识。
使用建议
建议先通过性能趋势和实例定位耗时异常,再进入执行计划查看节点依赖关系与高成本操作。拓扑图适合了解整体执行路径,节点列表适合对比节点数据,XML / JSON 适合查看数据库返回的完整原始信息。
拓扑图¶
拓扑图按照执行计划中的节点层级展示数据库的执行步骤。节点之间的连线表示节点的依赖关系,并非查询的真实执行时间线。
每个节点根据数据库返回的数据展示以下信息:
- 执行操作名称;
- 逻辑操作(仅在原始计划包含该字段,且与执行操作不同时展示);
- 访问的表或索引;
Rows:数据库优化器预计节点输出的行数;Cost:当前节点及其子节点的相对成本。
您可以放大、缩小、拖动或完整展示拓扑图。将鼠标悬停在节点上,可进一步查看执行操作、逻辑操作、访问对象、预计读取行数、过滤条件、Join 条件或数据库原生警告等信息。页面仅展示原始计划中实际存在的字段。
如何理解 Rows 和 Cost
Estimated Rows 是数据库优化器预计节点输出的行数,不是实际处理行数。Node Cost 用于比较同一执行计划中各节点的相对成本,不代表实际执行耗时,也不适合在不同数据库之间直接比较。
节点列表¶
节点列表以缩进方式展示执行计划的节点层级,适合快速对比各节点访问的对象、预计行数和节点成本。列表顺序用于表达节点之间的层级关系,不代表真实执行时间顺序。
| 字段 | 说明 |
|---|---|
| 执行步骤 | 数据库返回的执行操作名称及节点层级 |
| 访问对象/索引 | 当前节点访问的表、视图或索引 |
| Estimated Rows | 数据库优化器预计节点输出的行数;原始计划同时包含读取行数时,会分别展示输出和读取数据 |
| Node Cost | 当前节点及其子节点的相对成本 |
XML / JSON¶
原始视图展示采集器获取的完整执行计划,支持格式化、搜索、复制和下载。
| 数据库 | 原始格式 | 下载格式 |
|---|---|---|
| SQL Server | XML | 符合 ShowPlan XML 格式时下载为 .sqlplan,其他 XML 下载为 .xml |
| MySQL | JSON | .json |
| PostgreSQL | JSON | .json |
| Oracle | JSON | .json |
执行计划数据说明
执行计划来自采集器已经获取的数据,系统不会为查看计划而重新执行用户 SQL,也不会主动执行 EXPLAIN 或 EXPLAIN ANALYZE。执行计划不一定产生于页面当前选择的时间范围,也不一定对应某一次具体执行;是否包含实际行数和实际耗时,以数据库返回的原始计划为准。
指标计算说明¶
查询分析中的聚合指标按以下逻辑计算:
| 指标 | 计算说明 |
|---|---|
| 执行次数 | 所有实例上该类查询执行次数的累加 |
| 平均耗时 | 所有实例累计总耗时 ÷ 所有实例累计执行次数 |
| 总耗时 | 所有实例上该类查询耗时的累加 |
| 性能开销占比 | 该类查询累计总耗时 ÷ 所有查询累计总耗时 × 100% |
| 平均扫描行数 | 所有实例上该类查询平均扫描行数的平均值 |
数据时效性说明
查询分析的数据按用户选择的时间范围实时聚合。若某实例在选定时间范围内无数据上报,则该实例不会出现在聚合结果中。