Cloud SQL 性能捕获概览

Cloud SQL for MySQL 性能捕获功能可帮助您诊断和解决 MySQL 数据库中因系统需求不断变化而导致的复杂且短暂的性能问题。随着应用工作负载的扩缩以及周围基础设施变得越来越复杂,数据库面临着越来越高且不可预测的需求。这些外部系统压力可能会导致数据库速度变慢或停滞。

当数据库性能下降时,标准指标可能不足以在更大的基础架构环境中找出根本原因。性能捕获功能会在检测到问题时捕获数据库的详细时间点快照,从而解决此问题。您可以使用可配置的触发器在发生暂时性问题时截取系统级快照。触发器还可以检测长时间运行的事务,这些事务可能是性能问题的根本原因。您可以配置触发器,以自动结束长时间运行的事务。

应用场景示例

本部分列出了为实例启用性能捕获后,如何使用性能捕获的示例用例。

使用场景 触发条件 诊断分析
由于撤消日志累积,导致系统级速度变慢 历史记录列表长度 识别 InnoDB 清除进程因长时间运行的读取或大型数据操纵语言 (DML) 操作而落后的情况。延迟可能会导致存储压力增加和性能下降。
内部引擎争用导致的数据库停滞 信号量等待 有助于诊断无响应的数据库。 此触发器可以检测 InnoDB 存储引擎中的互斥量或读写锁争用,例如自适应哈希索引 (AHI) 或缓冲池争用。
应用级锁争用或未编入索引的查询 事务锁等待 当大量事务处于 LOCK WAIT 状态时触发,表明存在行级争用或长时间运行的空闲事务。
复杂排序或聚合导致实例过载 CPU 利用率高 在容器 CPU 使用率较高时捕获状态,这通常是由低效查询或并发量激增引起的。
内存不足 (OOM) 重启风险 内存用量较高 帮助您诊断每个线程缓冲区过大或内存泄漏等问题,以免导致实例崩溃。
流量突然激增或客户端应用出现瓶颈 运行中的线程 实例负载的一般指标,可用于识别并发活跃连接数的突然激增。
由于写入工作负载繁重,副本上的数据过时 落后秒数 监控只读副本上的复制延迟时间,以帮助诊断从主实例同步数据时的延迟。
长时间运行的查询阻止了清除 长时间运行的事务 识别已打开太长时间且可能持有关键锁的事务。此外,您还可以自动结束长时间运行的事务。

如何捕获性能数据

性能捕获作为基于代理的服务运行,用于监控您的实例。启用性能捕获后,Cloud SQL 实例会执行以下操作来捕获性能数据:

  1. 代理会探测您的实例配置,以读取您定义的基于阈值的触发器。然后,代理会以可配置的间隔 probingIntervalSeconds(默认设置为 30 秒)探测实例的指标。

  2. 如果检测到问题并且超出了触发器的阈值,则代理会继续将实例的实时状态与您的规则进行比较。为防止因临时峰值而误报,代理会触发完整的性能捕获。仅当在配置的 probeThreshold(默认为 3)的连续探测期间满足条件时,才会触发捕获。此连续阈值可防止因瞬时峰值而触发捕获。

    例如,如果代理检测到连续三次探测的线程数都很高,则可能会触发性能捕获。

    如果配置了多个触发条件,则在满足任何条件时,Cloud SQL 都会启动捕获。

  3. 触发捕获后,性能捕获会连接到数据库并运行一系列诊断命令,以捕获详细的快照。

  4. 捕获的信息会格式化为日志条目,并直接发送到 Cloud SQL 实例的项目 Cloud Logging,位于名为 mysql-performance-capture.log 的特定日志流下。

冷却期和自适应退避期

为防止日志记录过多和系统开销过大,性能捕获功能在捕获后会实施冷却期。

标准冷却期

成功捕获后,性能捕获会启动 30 分钟的标准冷却时间。在此期间,即使实例处于长时间存在问题的状态,代理也不会触发新的捕获。

自适应冷却和退避

如果某个实例反复触发针对同一违规行为的捕获,则性能捕获会使用自适应冷却退避机制。此机制有助于限制日志记录量和阈值配置错误的费用。

在此机制下:

  • 冷却期延长至 24 小时。
  • 性能捕获会进入睡眠模式,该模式会暂停所有触发器检查和诊断捕获。
  • 实例每天只能进行一次性能捕获。

性能捕获触发器

本部分列出了可用于 MySQL 性能捕获的触发器。除非另有说明,否则表中列出的所有触发器都使用探测配置值 probingIntervalSeconds 和 probeThreshold 来验证持续触发条件。

触发条件名称 API 名称 说明 默认 值 配置 范围
CPU 利用率
过高
cpuUtilizationThresholdPercent 当数据库实例的总体 CPU 利用率持续超过此百分比时,触发捕获。这有助于检测实例过载,这种过载通常是由包含大量排序和聚合的低效查询、索引不足或并发量过高引起的。为避免在出现轻微峰值时进行捕获,请将默认值配置为实例的较高百分比范围。 0(已停用) 0或
10-99 (%)
内存用量
较高
memoryUsageThresholdPercent 当数据库容器的内存用量持续超过实例分配内存的此百分比时,触发捕获。此触发器有助于诊断潜在的内存不足问题、内存泄漏或内存配置效率低下问题。为避免捕获次要峰值,请将默认值设置为实例范围的上限。 0(已停用) 0或
10-99 (%)
临时
文件用量较高
不可配置。此触发器会自动为 MySQL 8.0 及更高版本启用。 当 MySQL 进程创建的临时文件导致磁盘用量显著增加时,自动触发捕获。临时文件通常会被删除,但仍由 MySQL 进程保持打开状态。

此触发器的阈值使用渐进式升级模型来设置差异阈值。它从 100 GB 开始,在每次冷却后依次翻倍至 200 GB、400 GB,最高可达 1.6 TB。通过使用渐进式上报模型,仅当临时文件使用量的差异大幅增加时,才会捕获性能数据。
已启用 不适用
历史记录列表
长度
historyListLengthThresholdCount 当 InnoDB 历史记录列表长度 (HLL) 超过配置的值时触发捕获。HLL 持续偏高表示 InnoDB 清除进程无法跟上,未清除的事务数量在增加,这通常是由于长时间运行的事务造成的。如此高的数量可能会导致存储空间消耗增加和性能问题。

此阈值取决于工作负载。即使 HLL 持续较高,某些实例也可以充分运行。不过,您仍然可以使用此触发器来突出显示潜在问题,例如长时间运行的读取、大型数据操纵语言 (DML) 语句或清除线程瓶颈。
0(已停用) 0或
10000-10000000
长时间运行的
事务
transactionDurationThreshold 如果事务运行时间超过配置的时长(以秒为单位),则系统会记录该事务。此触发器有助于识别可能长时间持有锁或长时间消耗资源的操作。

超过 transactionDurationThreshold 的事务会在 probingIntervalSeconds 配置中指定的每个时间间隔(默认 30 秒)后进行评估。不过,为了管理日志量,这些长时间运行的事务中最多有 10 个事务的详细信息会发送到 Cloud Logging,每个冷却期(30 分钟)最多发送一次。前 10 个事务的每个日志条目中都包含来自 INFORMATION_SCHEMA.INNODB_TRX 的完整查询文本(最多 1024 字节)。
3600(秒) 60 或以上
副本 SQL/IO
线程错误
不可配置。 此触发器默认在所有副本实例上自动启用,且无法停用。 如果副本实例上的复制 SQL 线程或 IO 线程遇到任何错误并停止,则会立即触发捕获。此触发器对于维护副本完整性和 识别复制故障至关重要

此触发器不使用任何探测配置设置(例如 probingIntervalseconds 或 probeThreshold)来验证性能捕获条件。
已启用 不适用
运行中的线程 runningThreadsThreshold 当根据 threads_running 状态变量运行的活跃线程数超过指定值时,触发捕获。例如,您可以将阈值配置为在活跃运行线程数超过 100 时运行性能捕获。

此触发器是性能捕获所必需的。如果您未明确配置此触发器,则系统会根据属于实例的 vCPU 数量计算默认值。
MIN(600, cpuCount * 20) 10 或以上
落后于
来源的秒数
secondsBehindSourceThreshold 当读取副本实例上的复制延迟时间(以秒为单位)超过指定值时,触发捕获。您可以使用此触发器来监控和诊断复制延迟。系统会自动为副本实例启用此触发器。如果您未明确配置触发器,则默认值为 900 秒。我们建议您将该值配置在较高的一端,以避免过度捕获和频繁冷却。 900(秒) 1 或以上
信号量等待 semaphoreWaitThresholdCount 当等待内部 InnoDB 信号量的线程数超过此触发器的配置值时,触发捕获。此高级指标使用互斥量或读写锁来指示 InnoDB 存储引擎本身的争用情况。通常观察到的争用包括自适应哈希索引 (AHI) 争用、缓冲池争用和磁盘 IO 争用。

如果任何单个信号量的最长等待时间超过 200 秒,也会触发捕获,无论此触发器的配置值如何。
0(已停用) 0或
10-10000
事务
锁等待
transactionLockWaitThresholdCount 当处于 LOCK WAIT 状态的事务数量超过配置的数量时,触发捕获。在繁忙的系统中,少量事务处于锁等待状态可能是正常的,但持续出现大量锁等待则强烈表明存在应用级锁争用、未编入索引的 DML、长时间空闲事务和高并发行争用,这些问题可能会严重降低性能和吞吐量。 0(已停用) 0 或
10-10000

价格

所有 Cloud SQL 区域均提供性能捕获功能,无需额外付费。标准费用仅适用于底层数据库资源。 性能捕获功能会将日志存储在 Cloud Logging 中,这可能会产生额外的 Cloud Logging 存储费用。

如需详细了解在 Logging 中存储日志的价格,请参阅价格。

限制

  • 您必须启用 Query Insights 才能使用性能捕获功能。如果您停用 Query Insights,则性能捕获也会停用。
  • 性能捕获仅适用于 Cloud SQL for MySQL 5.7 及更高版本。

后续步骤