Cloud SQL for MySQL 性能捕获功能可帮助您诊断和解决 MySQL 数据库中复杂的瞬时性能问题。
当实例出现性能下降(例如数据库运行缓慢或停滞)时,标准指标可能不足以确定根本原因。性能捕获功能可在检测到问题时捕获数据库的详细时间点快照,从而解决此问题。您可以使用可配置的触发器在出现暂时性问题时拍摄系统级快照,并检测长时间运行的事务。
应用场景示例
本部分列出了在为实例启用性能捕获功能后,您可以如何使用该功能的一些示例用例。
诊断数据库停滞问题
问题:实例已无响应数分钟,但指标仅显示每秒查询次数 (QPS) 下降和连接数增加。
使用示例:使用 runningThreadsThreshold 定义阈值触发器。
性能捕获日志显示了大量的信号量等待,这表明特定的互斥锁争用(例如,在自适应哈希索引上)是根本原因。
分析查询性能下降情况
问题:查询性能突然在整个系统中下降。
使用示例:性能捕获日志显示了一个长时间运行的事务,该事务累积了大量的撤消日志。该日志会标识长时间运行的交易、用户和查询文本。
调查复制延迟
问题:读取副本明显落后于其来源。
使用示例:您为 secondsBehindSourceThreshold 配置了较高的触发阈值。您可以查看性能捕获日志,以查明导致延迟的具体 GTID。
管理长时间运行的事务
问题:批量作业或用户查询运行时间过长,导致锁定。
使用示例:您为 transactionDurationThreshold 配置了阈值触发器。
性能捕获日志会标识超出阈值的交易。您可以使用此信息进行调查。
效果数据的捕获方式
性能捕获功能以基于代理的服务形式运行,可监控您的实例。启用性能捕获后,Cloud SQL 实例会执行以下操作来捕获性能数据:
代理会探测数据库配置,以读取您定义的触发器。然后,代理会以可配置的时间间隔(默认设置为 30 秒)探测数据库的指标。
如果检测到问题且触发器的阈值已被超出,代理会继续将数据库的实时状态与您的规则进行比较。为防止临时峰值导致任何误报,代理只有在连续多次探测到问题时才会触发完整性能捕获。 例如,如果代理连续三次探测到线程数较高,则可能会触发性能捕获。
当性能捕获被触发时,代理会连接到数据库并运行一系列诊断命令来捕获详细的快照。
捕获的信息会格式化为日志条目,并直接发送到项目的 Cloud Logging,供 Cloud SQL 实例使用,位于名为
mysql-performance-capture.log的特定日志流下。
可配置的触发器
您可以配置以下触发器以捕获性能数据:
runningThreadsThreshold:当主实例上运行的活跃线程数超过指定值时触发。例如,您可以配置阈值,以便在活跃运行线程数超过 100 时运行性能捕获。secondsBehindSourceThreshold:当复制延迟超过指定秒数时,为副本触发。例如,您可以配置阈值,以便在读取副本延迟时间超过 300 秒时运行性能捕获。transactionDurationThreshold:触发对运行时间超过指定时长的各个事务进行日志记录。例如,您可以将触发器设置为记录任何运行时间超过 10 分钟的单个事务。
性能捕获后的冷却期
为了防止在持续的性能事件期间出现过多的日志记录和系统开销,性能捕获在成功捕获快照后会实现 30 分钟的冷却时间。当系统处于长时间的问题状态时,系统会自动启动此冷却期,以防止代理触发新的冗余捕获。
价格
性能捕获功能会将日志存储在 Cloud Logging 中,这可能会产生额外的存储费用。
如需详细了解在 Logging 中存储日志的价格,请参阅价格。
限制
- 您必须启用查询数据分析才能使用性能捕获功能。 如果您停用 Query Insights,系统也会停用性能捕获功能。
- 性能捕获功能仅适用于 Cloud SQL for MySQL 5.7 及更高版本。