性能检测报告

最近更新时间:2019-04-16 12:21:36

简介

性能检测是针对数据库实例性能及运行状况综合分析服务,针对 SQL 语句的性能、CPU 使用率、IOPS 使用率、内存使用率、磁盘空间使用率、连接数、锁信息、热点表、事务等进行综合分析,性能检测提供了智能的诊断及优化功能,能最大限度发现数据库存在的或潜在的健康问题。

目前仅如下版本实例支持此功能:

  • 分布式数据库 TDSQL(DCDB)
  • 关系型数据库 MariaDB

说明:

性能检测工具来自于腾讯内部“扁鹊云数据库性能检测系统(CloudDBA)”,其包括性能检测、SQL 分析、实时诊断、会话检查与处置,表空间分布等性能分析系统模块。

注意:

针对某些检测结论,性能检测报告提供了一系列的优化建议,请您在应用这些建议前谨慎测试,以防加重实例的性能问题。

功能介绍

  • 健康评分:您可以看到当前数据库性能综合打分,满分100分;长期低于60分请注意优化业务或数据库配置。

  • 报告生成、查看与保存:公测期间,您可以任意创建报告;并查看最近一次生成的报告;报告可以通过另存网页下载到本地查阅。

性能检测主要包含如下功能

资源分析

分析一定时间内数据库实例资源(CPU/磁盘/连接)的使用情况,并综合评分的概况。

说明:

由于多数实例默认开启了闲时超用策略,因此您可能观察到最大 CPU 使用率可能超过100%。如果您的 CPU 长期超过100%,且平均值高于建议值,建议您尽快扩容。

系统状态

梳理实例关键指标,并列举其状态和出现时间和提出对应修改建议。

表空间分布

列出按数据空间倒序的当前 TOP 10表,协助您分析超大表情况。

冗余索引检测

列出当前可能的冗余索引(区分度小于1%的冗余),并提出优化建议。

说明:

由于查询语句要先查询索引,再通过索引去查询表,所以,如果索引列相同数据过多不利于减少筛选的数据量,反而不如直接全表扫描性能快。

死锁诊断

死锁诊断通诊断show engine innodb status获取 DB 最后一次死锁信息,如果死锁发生时间在用户选择的诊断时间段内,便展示出来。

说明:

死锁出现频率过高代表事务内的 SQL 在并发执行场景中的持锁容易产生环路,根本解决方案是修改 SQL 运行逻辑顺序,优化加锁机制,减少死锁产生概率。临时解决方案是kill掉领头的阻塞会话。

锁等待诊断

当前时间段内的锁等待超过60s的报告。

注意:

有锁等待是正常现象,但有时候业务会出现 Lock wait timeout exceeded;try restarting transaction 锁等待超时等报错。MySQL 的 innodb 锁信息保存在系统库 information_schema 中的 innodb_trx,innodb_lock_waits,innodb_locks 三张表下,锁等待诊断通过分析诊断 set 主 DB 中的三张表的锁依赖关系,找出持有锁时间超过一定阈值,并阻塞的其他会话的领头事务信息和会话信息,以及被阻塞事务的会话信息,并 kill 掉该领头会话。

注意:

当前锁等待只支持 innoDB 引擎。

长会话诊断

列通过诊断 set 主 DB 中的 information_schema.processlist 获取 Command 不是 Sleep,但执行时间(Time)超过10s的会话。

说明:

最佳解决长会话的手段是优化SQL,并在业务代码中主动植入session失效配置;当然,您也可以通过调整interactive_timeoutwait_timeout两个参数,让过期session主动失效。

慢查询分析

基于执行次数倒序,列出当前 TOP20的慢查询语句。

说明:

慢查询可以通过 long_query_time 配置调整;慢查询产生的原因产生较多。通常,如果您的实例消耗资源合理且慢查询较多,则建议您关注业务 SQL、索引是否合理;如果您实例消耗性能较高且慢查询较多,建议您关注实例配置是否合理,并优化业务 SQL、索引等。慢查询数据可以在慢查询分析功能下,查询更多详细数据。

DB 状态检查

检查当前数据库 DB 层的健康状态。

其他

列出需要 DBA 关注的其他值。