简介
云数据库 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 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值做一个对应。缓存机制是由一系列小缓存组成,例如表缓存、记录缓存、权限缓存、引擎缓存等。
分析器:将客户端发送的 SQL 进行语义和语法的分析,分解成数据结构,生成"解析树"。预处理器根据规则进一步检查“解析树”是否合法,最终生成新的“解析树”。
优化器:当“解析树”通过解析器语法检查后,交由优化器对查询进行优化,将其转换成执行计划。
执行器:执行优化器给出的执行计划,然后存储引擎交互。
存储引擎层
存储引擎负责 MySQL 中数据的存储和提取,与底层系统文件进行交互,云数据库 MySQL 主要使用 InnoDB 引擎和 MyISAM 引擎。
指标分类


预设专家建议核心告警指标
腾讯云可观测平台与云数据库 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 等待行锁次数 | times/s | 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 | 主从延迟时间 |