操作指南

API 文档

云产品监控指标

文档中心 > 云监控 > 最佳实践 > 云数据库 MySQL 告警监控实践

云数据库 MySQL 告警监控实践

最近更新时间:2021-01-24 19:15:58

简介

云数据库 MySQL(TencentDB for MySQL)是腾讯云基于开源数据库 MySQL 专业打造的一种高性能分布式数据存储服务,提供了备份恢复、监控、容灾、快速扩容、数据传输等全套解决方案,简化数据库运维工作,让用户专注于业务发展。

云数据库 MySQL 优势:

  • 快速便捷的数据库服务交付能力,在几分钟内部署可扩展的 MySQL,并可按需弹性升降配置。
  • 真正100%的 MySQL 兼容能力,完全兼容主流 MySQL 分支。
  • 提供热备、冷备、binlog 三重灾备体系,可用性达到99.95%,可靠性达到99.9996%,确保服务可用,数据不丢失。
  • 提供一系列数据库管理服务:监控、备份、回档、扩容、性能诊断、数据迁移等。
  • 实例最高 QPS 可达245509次/秒,极大的简化业务开发,减少业务架构复杂度。
  • 卓越的高可用,支持多可用区部署,跨城容灾的能力。

云数据库 MySQL 技术架构

云数据库 MySQL 高可用版完全兼容 MySQL,并且采用一主 N 从的高可用模式,实时热备,提供宕机自动检测和故障自动转移。数据节点部署在强大的硬件之上,底层存储使用本地 PCI-e SSD 硬盘,提供强大的 IO 性能。可以覆盖游戏、互联网、金融、物联网、零售电商、物流、保险、证券等行业应用。架构图如下所示:

技术特征

多实例

  • 只读实例:只开放读能力,分担主实例读压力,实现读写分离。
  • 主实例:可读写,主从实时热备,保证高可用,支持一主两从强同步,零误差,无错乱。
  • 异地灾备实例:满足跨地域容灾金融级需求。

数据迁移

  • 无需停机迁移,数据迁移时对业务无影响。
  • 数据完成同步后,仅需切换数据库读写 IP 到云数据库 MySQL,即可完成迁移任务。

异地灾备(金融行业)

  • 两地三中心部署架构:同城节点直线距离大于10KM,异地节点直线距离大于100KM。
  • 同城多可用区网络互通,且网络延迟低于5ms。
  • 多地域间使用多地域之间使用腾讯云专线连接,广州与上海同步延迟仅三十余毫秒。

备份和回档机制

云数据库 MySQL 每日自动冷备,备份于业务低峰期在备机上完成,不影响现网业务。

每份冷备数据保存3份副本,实现数据强一致性,保证数据不丢失。

支持逻辑备份和物理备份两种备份方式:

  • 逻辑备份支持导出 SQL 文件,可仅针对部分库表回档,适合需要细粒度回档的场景。
  • 物理备份速度极快,支持增量备份,但需对整个实例回档,适合需要频繁备份数据的场景。

云数据库 MySQL 监控

云监控为用户提供了统一监控云数据库 MySQL 的平台,可以通过使用云监控全面了解云数据库 MySQL 的资源使用、引擎性能和运行状况,提供指标分类、预设常用告警指标、预设核心指标的 Dashboard 面板。帮助用户更轻松的理解云数据库 MySQL 的指标,更方便、快捷的掌控云数据库 MySQL 出现的突发情况,提升运维效率,减少运维成本。

监控指标及其分类

监控实例分析

云数据库 MySQL 实例的架构主要分为三个部分:网络连接层服务层存储引擎层

网络连接层

接入集群:提供与 MySQL 服务器建立连接的支持。

服务层

服务层是 MySQL 的核心,主要包含以下五个部分:

  • 连接器:管理缓冲用户连接,线程处理,权限验证等需要缓存的需求。
  • 查询缓存:将客户端提交给 MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值做一个对应。缓存机制是由一系列小缓存组成,例如表缓存、记录缓存、权限缓存、引擎缓存等。
  • 分析器:将客户端发送的 SQL 进行语义和语法的分析,分解成数据结构,生成"解析树"。预处理器根据规则进一步检查“解析树”是否合法,最终生成新的“解析树”。
  • 优化器:当“解析树”通过解析器语法检查后,交由优化器对查询进行优化,将其转换成执行计划。
  • 执行器:执行优化器给出的执行计划,然后存储引擎交互。

存储引擎层

存储引擎负责 MySQL 中数据的存储和提取,与底层系统文件进行交互,云数据库 MySQL 主要使用 InnoDB 引擎和 MyISAM 引擎。

指标分类

腾讯云监控对云数据库 MySQL 的每一部分进行相应指标的监控,并将指标进行分类,以便用户理解和使用,详情请参见 指标说明

预设专家建议核心告警指标

腾讯云监控与云数据库 MySQL 业务侧经过讨论,根据多年运维经验,提供常用告警指标和阈值的专家建议。用户配置告警时,页面将默认显示预设的指标及阈值建议,支持修改,方便用户快速配置告警策略。

1. 磁盘利用率 > 80%

MySQL实例可能因长时间运行,未进行磁盘及数据管理等原因,导致磁盘使用率升高,从而影响业务正常运行。尤其当实例显示“磁盘空间满”状态,数据库不可进行写入操作,会有实例异常、数据库备份失败、数据库实例只读状态等潜在风险。

为避免业务因磁盘利用率过高而受影响,设置磁盘利用率 > 80%告警,当接收到告警后,建议根据实际情况采用磁盘容量扩容、迁移冷数据等解决方案确保磁盘有一定的冗余度,保证数据库的正常使用。

2. CPU 利用率 > 80%

系统执行应用来进行提交查询(包括数据修改操作)时需要大量的逻辑读(逻辑 IO,执行查询所需访问的表的数据行数),所以系统需要消耗大量的 CPU 资源以维护从存储系统读取到内存中的数据一致性。若 MySQL CPU 的利用率长时间处于100%,会严重影响数据库的整体性能,极端情况下可能会出现实例 HANG 住的情况。

为避免业务因 CPU 资源不足而受影响,设置 CPU 使用率 > 80%告警,当接收到告警后,建议从应用架构、实例规格等方面来解决,例如:

  • 升级实例规格,增加 CPU 资源。
  • 增加只读实例,将对数据一致性不敏感的查询转移到只读实例上,分担主实例压力。

3. 内存利用率 > 80%

MySQL 的内存是重要的性能参数,常出现由于低效 SQL 请求以及待优化的数据库导致内存利用率过高甚至超过100%的情况。内存利用率过高容易引起服务响应速度变慢,严重时还会触发内存 OOM 进而发生主备切换。

为避免业务因内存利用率过高而受影响,设置内存利用率 > 80%告警,当接收到告警后,建议对内存利用率过高的实例进行业务优化或者升级内存空间。

预设核心指标 Dashboard 面板

为了让用户更快捷、更方便的监控云数据库 MySQL 的资源使用、运行等状况,腾讯云监控将核心指标配置成预设 Dashboard 面板,用户可直接进入云监控的 Dashboard 页面,无需进行其他配置,即可看到如图所示的云数据库 MySQL 的 Dashboard 预设面板。

当用户选择自己已有的实例后,便可自动展示预设的资源、引擎连接和引擎访问等核心指标的监控 Dashboard,提升用户体验,降低使用成本。

  • 监控 CPU 利用率、磁盘利用率、内存利用率、内网入流量、内网出流量等资源,配合告警,当监控值超过某一值时,要关注是否需要扩容。
  • 监控 QPS、TPS、当前打开的连接数的量,提前感知数据库的状态。如果发现监控值突增,可能是业务出现了问题,需要根据实际情况定位问题,提前做好数据库的扩容和优化。
  • 监控慢查询数和全表扫描数,如果出现,请及时查看哪些 SQL 语句引起的慢查询,可能需要优化这部分 SQL 或者服务。

指标说明

说明:

下方表格中加粗的指标为核心指标。

监控项 指标英文名 指标中文名 单位 指标说明
资源监控 CpuUseRate CPU 利用率 % 允许闲时超用,CPU 利用率可能大于100%
Capacity 磁盘占用空间 MB 包括 MySQL 数据目录和 binlog、relaylog、undolog、errorlog、slowlog 日志空间
MemoryUse 内存占用 % 允许闲时超用,实际内存占用可能大于购买规格
MemoryUseRate 内存利用率 % 允许闲时超用,内存利用率可能大于100%
BytesReceived 内网入流量 Bps 每秒接受的字节数
BytesSent 内网出流量 Bps 每秒发送的字节数
RealCapacity 磁盘使用空间 MB 仅包括 MySQL 数据目录,不含 binlog、relaylog、undolog、errorlog、slowlog 日志空间
VolumeRate 磁盘利用率 % 磁盘使用空间/实例购买空间
IOPS IOPS count/s 每秒输入/输出操作
引擎监控(普通)-连接 QPS 每秒执行操作数 times/s 数据库每秒执行的 SQL 数(含 insert、select、update、delete、replace),QPS 指标主要体现 TencentDB 实例的实际处理能力
ConnectionUseRate 连接数利用率 % 当前打开连接数/最大连接数
TPS 每秒执行事务数 times/s 数据库每秒传输的事务处理个数
mMaxConnections 最大连接数 count 最大连接数
ThreadsConnected 当前连接数 count 当前打开的连接的数量
引擎监控(普通)-访问 ComDelete 删除数 times/s 每秒删除数
ComInsert 插入数 times/s 每秒插入数
ComReplace 覆盖数 times/s 每秒覆盖数
ComUpdate 更新数 times/s 每秒更新数
Queries 总访问量 times/s 所有执行的 SQL 语句,包括 set,show 等
QueryRate 访问量占比 % 每秒执行操作数 QPS/推荐每秒操作数
SlowQueries 慢查询数 count 查询时间超过 long_query_time 秒的查询的个数
SelectCount 查询数 times/s 每秒查询数
SelectScan 全表扫描数 count/s 执行全表搜索查询的数量
引擎监控(普通)-表 TableLocksWaited 等待表锁次数 times/s 不能立即获得的表的锁的次数
CreatedTmpTables 内存临时表数量 times/s 创建临时表的数量
引擎监控(普通)-InnoDB InnodbCacheHitRate innodb 缓存命中率 % Innodb 引擎的缓存命中率
InnodbCacheUseRate innodb缓存使用率 % Innodb 引擎的缓存使用率
InnodbNumOpenFiles InnoDB 总页数当前 InnoDB 打开表的数量 count Innodb 引擎当前打开表的数量
InnodbOsFileReads innodb 读磁盘数量 times/s Innodb 引擎每秒读磁盘文件的次数
InnodbOsFileWrites innodb 写磁盘数量 times/s Innodb 引擎每秒写磁盘文件的次数
InnodbOsFsyncs innodbfsync数量 times/s Innodb 引擎每秒调用 fsync 函数次数
引擎监控(普通)-MyISAM KeyCacheHitRate myisam缓存命中率 % myisam 引擎的缓存命中率
KeyCacheUseRate myisam缓存使用率 % myisam 引擎的缓存使用率
引擎监控(扩展)-访问 ComCommit 提交数 times/s 每秒提交次数
ComRollback 回滚数 times/s 每秒回滚次数
引擎监控(扩展)-连接 ThreadsCreated 已创建的线程数 count 创建用来处理连接的线程数
ThreadsRunning 运行的线程数 count 激活的(非睡眠状态)线程数
引擎监控(扩展)-Tmp CreatedTmpDiskTables 磁盘临时表数量 times/s 每秒创建磁盘临时表的次数
CreatedTmpFiles 临时文件数量 times/s 每秒创建临时文件的次数
引擎监控(扩展)-Handler HandlerCommit 内部提交数 times/s 每秒事务提交的次数
HandlerReadRndNext 读下一行请求数 times/s 每秒读取下一行的请求次数
HandlerRollback 内部回滚数 times/s 每秒事务被回滚的次数
引擎监控(扩展)-Buff InnodbBufferPoolPagesFree InnoDB空页数 count Innodb 引擎内存空页个数
InnodbBufferPoolPagesTotal InnoDB总页数 count Innodb 引擎占用内存总页数
InnodbBufferPoolReadRequests innodb缓冲池预读页次数 times/s Innodb 引擎每秒已经完成的逻辑读请求次数
InnodbBufferPoolReads innodb 磁盘读页次数 times/s Innodb 引擎每秒已经完成的物理读请求次数
引擎监控(扩展)-InnoDB Data InnodbDataRead InnoDB读取量 times/s Innodb 引擎每秒已经完成读取数据的字节数
InnodbDataReads InnoDB总读取量 times/s Innodb 引擎每秒已经完成读取数据的次数
InnodbDataWrites InnoDB总写入量 times/s Innodb 引擎每秒已经完成写数据的次数
InnodbDataWritten InnoDB写入量 times/s Innodb 引擎每秒已经完成写数据的字节数
引擎监控(扩展)-InnoDB Row InnodbRowLockTimeAvg InnoDB平均获取行锁时间(毫秒) ms Innodb 引擎行锁定的平均时长
InnodbRowLockWaits InnoDB等待行锁次数 ms Innodb 引擎每秒等待行锁定的次数
InnodbRowsDeleted InnoDB行删除量 times/s Innodb 引擎每秒删除的行数
InnodbRowsInserted InnoDB 行插入量 times/s Innodb 引擎每秒插入的行数
InnodbRowsRead InnoDB 行读取量 times/s Innodb 引擎每秒读取的行数
InnodbRowsUpdated InnoDB 行更新量 times/s Innodb 引擎每秒更新的行数
引擎监控(扩展)-Key KeyBlocksUnused 键缓存内未使用的块数量 count myisam 引擎未使用键缓存块的个数
KeyBlocksUsed 键缓存内使用的块数量 count myisam 引擎已使用键缓存块的个数
KeyReadRequests 键缓存读取数据块次数 times/s myisam 引擎每秒读取键缓存块的次数
KeyReads 硬盘读取数据块次数 times/s myisam 引擎每秒读取硬盘数据块的次数
KeyWriteRequests 数据块写入键缓冲次数 times/s myisam 引擎每秒写键缓存块的次数
KeyWrites 数据块写入磁盘次数 times/s myisam 引擎每秒写硬盘数据块的次数
引擎监控(扩展)-表 OpenedTables 已经打开的表数 count 引擎已经打开的表的数量
TableLocksImmediate 立即释放的表锁数 count 引擎即将释放的表锁数
引擎监控(扩展)-其他 LogCapacity 日志使用量 MB 引擎已使用的日志量
OpenFiles 打开文件数 times/s 引擎打开的文件数量
部署监控(备机) MasterSlaveSyncDistance 主从延迟距离 MB 主从 binlog 差距
SlaveIoRunning IO线程状态 状态值(0-Yes,1-No,2-Connecting) IO 线程运行状态
SlaveSqlRunning SQL线程状态 slave_sql_running SQL 线程运行状态
SecondsBehindMaster 主从延迟时间 MB 主从延迟时间
目录