功能描述
异常诊断功能为用户的数据库实例提供实时的性能监控、健康巡检、故障诊断和优化,让用户既可以直观地感知数据库实例实时的运行状况,也可以定位实时出现的性能异常,并根据优化建议进行系统优化。异常诊断提供实时和历史两种查看方式。
整体概览
查看监控信息
查看指标信息
在异常诊断页主要展示 CPU 利用率、内存使用率、磁盘使用率、输入/输出流量、健康得分信息,其中,磁盘使用率详情可单击右上角的详情查看。数据库健康得分结合 AI,更贴合用户数据库真实运行状况。
查看实例架构图
在异常诊断页,在页面上方选择实时,在页面右上方单击实例架构图,可查看实例的健康得分,运行指标、3D 或平面视图。
查看调用关系图
在异常诊断页,在页面右上方单击调用关系图,可查看 APM 应用调用关系图。
需要接入应用性能监控 APM 后即可查看数据库与应用拓扑图和当前数据库应用调用图。
查看诊断信息
实时/历史诊断栏:展示实例实时的 Running Threads 数、CPU 使用率以及诊断事件。
诊断提示栏:展示诊断事件历史记录的概要信息,包括等级(分为健康、提示、告警、严重、致命)、开始时间、诊断项、持续时长。DBbrain 会定期(每10分钟)的对实例进行健康巡检。
查看诊断详情
1. 登录 DBbrain 控制台,在左侧导航选择诊断优化,在上方选择对应数据库,然后选择异常诊断页。
2. 在实时/历史诊断视图中,鼠标选择对应时间段,可拉伸该时间段的诊断视图,查看更细粒度的视图详情。单击查看详情或诊断提示栏的记录项可进入诊断详情页。
3. 在视图单击诊断事件,会显示该事件的详情。
事件详情:包括诊断项、起止时间、风险等级、持续时长、概要等信息。
现场描述:异常事件(或健康巡检事件)的外在表现现象的快照和性能趋势。
智能分析:分析导致性能异常的根本原因,定位具体操作。
优化建议:提供优化指导建议,包括但不限于 SQL 优化(索引建议、重写建议)、资源配置优化和参数调优。
在优化建议页,单击优化对比,在弹窗中可以查看 SQL 执行计划、索引建议、表结构以及 SQL 优化前后代价对比。
SQL 代价通过分析 SQL 相关库表的统计信息、OPTIMIZER_SWITCH 配置、及索引字段区分度进行估算,对优化后的 SQL 语句代价进行整体估计,使用可视化图表直观呈现 SQL 优化后降低的效果,您也可通过优化前后的执行计划比对进一步验证优化的效果。
忽略/取消忽略告警
忽略告警功能,从单击忽略后,该实例由相同根因产生的诊断项告警也将被忽略。对于已被忽略的异常告警信息,将会被置灰色。
说明:
该功能仅针对诊断项为非“健康巡检”的异常告警。
取消忽略告警功能,从单击取消忽略后,该实例由相同根因产生的异常告警也将被取消忽略。默认不显示已忽略的诊断项。
1. 登录 DBbrain 控制台,在左侧导航选择诊断优化,在上方选择对应数据库,然后选择异常诊断页。
2. 在诊断提示中,鼠标悬浮在对应告警上,即可显示忽略操作,然后单击忽略。单击任意一条异常告警的忽略及取消忽略,可忽略及取消忽略同类告警信息。
或者进入事件详情页,在右上方单击忽略或取消忽略。
单击忽略管理,可查看已忽略内容和已忽略类型。
查看 SQL 和慢 SQL 信息
“实时/历史 SQL”展示实例的请求数汇总和分布,包括总请求数、查询(Select)、替换(Replace)、插入(Insert)、删除(Delete)、更新(Update)的趋势信息。
“实时/历史慢 SQL”展示慢 SQL(slow log)和 CPU 使用率的趋势,单击右上角的查看详情可跳转至慢 SQL 分析页面,查看分析详情。
说明:
直连方式接入的自建数据库实例,因无法采集主机资源监控指标,故部分功能无法展示。建议采用 agent 方式接入自建数据库实例。
诊断项详细说明
诊断项为智能诊断的项目,其类别包括性能、可用性、可靠性、可维护性四类,每个诊断项仅属于一个类别。
诊断项名称 | 诊断项类别 | 说明 | 风险等级划分 | MySQL | TDSQL-C MySQL | 自建 MySQL |
连接性检查 | 可用性 | 无法与数据库建立连接 | 致命 | ✓ | ✓ | ✓ |
插入、更新、删除慢 | 性能 | 执行插入、更新或删除操作时,需要花费较长的时间才能完成 | 严重:锁等待导致 告警:非锁等待导致 | ✓ | ✓ | ✓ |
执行中慢会话 | 性能 | 存在执行中未结束的慢会话 | 提示 | ✓ | ✓ | ✓ |
慢 SQL | 性能 | 存在需要优化的慢查询语句 | 提示 | ✓ | ✓ | ✓ |
等待行锁 | 性能 | 存在等待锁时间过长的事务 | 严重 | ✓ | ✓ | ✓ |
事务未提交 | 性能 | 存在过长时间的未提交的事务 | 致命 | ✓ | ✓ | ✓ |
长事务 | 性能 | 事务持续时间长 | 致命:事务持续时间 > 60 严重:60 > 事务持续时间 > 30 告警:事务持续时间 <30 | ✓ | ✓ | ✓ |
SQL 执行间隔过大事务 | 性能 | 事务中存在执行间隔过大 SQL | 致命:事务中SQL执行间隔 > 10 严重:10 > 事务中SQL执行间隔 > 5 告警:事务中SQL执行间隔 <5 | ✓ | ✓ | ✓ |
事务中 SQL 过多 | 性能 | 事务中 SQL 过多 | 告警:事务中SQL数量 > 1000 提示:1000 > 事务中SQL数量 ≥ 3 | ✓ | ✓ | - |
大事务影响行数 | 性能 | 该事务对过多的数据行有插入、删除或修改 | 告警:大事务影响行数 > 1000 提示:1000 > 大事务影响行数 ≥ 100 | ✓ | ✓ | - |
SQL 响应时间过长事务 | 性能 | 事务中存在响应时长过大的 SQL | 致命:事务响应时长 > 30 严重:30 > 事务响应时长 > 15 告警:15 > 事务响应时长 > 5 提示:事务响应时长 <5 | ✓ | ✓ | ✓ |
存在报错 SQL 事务 | 性能 | 事务中存在报错 SQL | 致命 | ✓ | ✓ | ✓ |
非预期提交事务 | 性能 | 事务非预期的隐式提交 | 致命 | ✓ | ✓ | ✓ |
未恢复自动提交事务 | 性能 | 未恢复自动提交事务模式 | 致命 | ✓ | ✓ | ✓ |
DDL 语句等待 Metadata Lock | 性能 | 存在等待 Metadata Lock 的线程,且其在执行 DDL 语句 | 严重 | ✓ | ✓ | ✓ |
insert, update, delete 语句等待 Metadata Lock | 性能 | 存在等待 Metadata Lock 的线程,且其在执行 IUD 语句 | 严重 | ✓ | ✓ | ✓ |
select 语句等待 Metadata Lock | 性能 | 存在等待 Metadata Lock 的线程,且其在执行 SELECT 语句 | 严重 | ✓ | ✓ | ✓ |
死锁 | 可靠性 | 数据库发生死锁 | 致命 | ✓ | ✓ | ✓ |
只读锁 | 性能 | 存在等待全局只读锁的线程 | 致命 | ✓ | ✓ | ✓ |
SQL 语句等待 Metadata Lock | 性能 | 存在等待 Metadata Lock 的线程,且其在执行非 DDL、IUD、SELECT 语句 | 告警 | ✓ | ✓ | ✓ |
Waiting for flush tables | 性能 | 存在等待 flush table 状态的线程 | 致命:活跃会话数 > 30 严重:30 > 活跃会话数 > 20 告警:活跃会话数 < 20 | ✓ | ✓ | ✓ |
活跃会话高 | 性能 | 活跃会话数大于三倍的数据库实例 CPU 规格 | 提示 | ✓ | ✓ | ✓ |
高并发/压力请求 | 性能 | 产生高并发或者压力请求 | 致命:CPU 利用率 > 80 严重:80 > CPU 利用率 > 60 告警:60 > CPU 利用率 > 40 | ✓ | ✓ | ✓ |
预编译语句过多 | 性能 | 出现未关闭预编译语句个数过多(16382是 MySQL 默认允许的最大值) | 致命:预编译语句个数 > 16382 严重:16382 > 预编译语句个数 > 14695 告警:14695 > 预编译语句个数 > 11505 提示:预编译语句个数< 11505 | ✓ | ✓ | ✓ |
磁盘空间利用率 | 可靠性 | 磁盘利用率过高 | 致命:磁盘利用率 > 95 严重:95 > 磁盘利用率 > 90 告警:90 > 预编译语句个数 > 85 提示:85 > 预编译语句个数 > 80 | ✓ | ✓ | ✓ |
CPU 利用率 | 性能 | CPU 利用率过高 | 致命:CPU 利用率 > 80 严重:80 > CPU 利用率 > 60 告警:60 > CPU 利用率 > 40 | ✓ | ✓ | ✓ |
Table open cache 命中率低 | 性能 | Table open cache 命中率低 | 告警 | ✓ | ✓ | ✓ |
高危账号 | 可维护性 | 存在匿名账户、无密码账户等情况 | 提示 | ✓ | ✓ | ✓ |
大表 | 可维护性 | 单表大于10%的实例磁盘规格 | 致命:单表所占空间 > 磁盘容量的40% 严重:磁盘容量的40% > 单表所占空间 > 磁盘容量的30% 告警:磁盘容量的30% > 单表所占空间 > 磁盘容量的20% 提示:磁盘容量的20% > 单表所占空间 > 磁盘容量的10% | ✓ | ✓ | ✓ |
复制 IO 线程中断 | 可靠性 | 主从中断,复制 IO 线程中断 | 致命:非重启导致中断 提示:重启导致中断 | ✓ | ✓ | - |
RO 规格小 | 可靠性 | 只读延迟大于30秒并且只读实例的CPU核数小于主实例 | 告警 | ✓ | - | - |
复制 SQL 线程中断 | 可靠性 | 主从中断,复制 SQL 线程中断 | 致命:非重启导致中断 | ✓ | ✓ | - |
DDL 导致复制延迟 | 可靠性 | DDL 导致的主从复制延迟(包括主-只读,主-备库延迟)
| 致命:只读延迟 > 10 min 严重:只读延迟<10 min 或备库延迟 > 10 min 告警:备库<10 min | ✓ | ✓ | - |
事务导致复制延迟 | 可靠性 | 事务导致的主从复制延迟(包括主-只读,主-备库延迟) | 致命:只读延迟 > 10 min 严重:只读延迟<10 min或备库延迟 > 10 min 告警:备库<10 min | ✓ | ✓ | - |
全局只读锁导致复制延迟 | 可靠性 | 全局只读锁导致的主从复制延迟(包括主-只读,主-备库延迟) | 致命:只读延迟 > 10 min 严重:只读延迟<10 min 或备库延迟 > 10 min 告警:备库<10 min | ✓ | ✓ | - |
自增键耗尽 | 可用性 | 自增值超过自增主键最大值80% | 致命:自增值超过最大值80% | ✓ | ✓ | - |
复制延迟 | 可用性 | 主从复制延迟(包括主-只读,主-备库延迟) | 致命:只读延迟 > 10 min 严重:只读延迟<10 min 或备库延迟 > 10 min 告警:备库<10 min | ✓ | ✓ | - |
主从切换 | 可用性 | 主实例和从实例发生切换 | 致命 | ✓ | - | - |
服务器故障导致实例迁移 | 可用性 | 服务器故障导致实例迁移 | 致命 | ✓ | - | - |
只读实例剔除 | 可用性 | 只读实例故障或超过延迟阈值,只读实例被踢除 | 致命 | ✓ | - | - |
磁盘超限 | 可用性 | 数据库磁盘使用超过购买的空间 | 致命 | ✓ | - | - |
内存超限 | 可用性 | 数据库内存使用过载,出现内存 OOM | 致命 | ✓ | - | - |
CPU 利用率波动 | 性能 | 监控指标 CPU 增长过快 | 提示 | ✓ | - | - |
内存利用率波动 | 性能 | 监控指标 Memory 增长过快 | 提示 | ✓ | - | - |
磁盘空间利用率波动 | 性能 | 监控指标 Disk 增长过快 | 提示 | ✓ | - | - |
全表扫描 | 可用性 | 在查询中没有使用索引,而是扫描整张表的操作。 | 致命:全表扫描行数 > 10*N(N表示全表扫描行数设定值,默认值 500) 严重:10*N > 全表扫描行数 > 5*N(N表示全表扫描行数设定值,默认值 500) 告警:5*N > 全表扫描行数 ≥ N(N表示全表扫描行数设定值,默认值 500) | ✓ | ✓ | - |
执行计划变化 | 可用性 | 用于发现同 SQL 模板语句的执行计划变化。这种变化可能会导致突发性的性能劣化。 | 致命:当前sql的query_cost /上一次sql的query_cost > 10 严重:10 > 当前sql的query_cost /上一次sql的query_cost > 5 告警:5 > 当前sql的query_cost /上一次sql的query_cost > 1 提示:当前sql的query_cost /上一次sql的query_cost<1 |
✓
|
✓
| - |
维护时间窗口延迟高 | 可用性 | 在维护时间窗口内,从实例延迟大于10分钟并且从实例延迟大于设置的最大延迟时间 | 致命
|
✓
| - | - |
说明:
agent 接入方式接入的自建数据库实例暂无主备复制相关的诊断项。
直连接入方式接入的自建数据库实例无主机资源相关的诊断项和主备复制相关的诊断项。