华为云云数据库rdsRDS for MySQL长事务排查和处理_云淘科技

长事务有哪些潜在的影响?

长事务会锁定资源,通常伴随着MDL锁、行锁指标的升高,导致其他事务无法访问这些资源,降低数据库的并发性能。
长事务可能会占用大量的内存。
长事务会导致日志文件增长,可能会导致日志文件过大,甚至导致磁盘打满。

排查长事务

连接实例查看长事务及其会话ID。

连接实例后,通过以下命令查看执行时间超过3000秒的事务的事务ID、执行的SQL以及对应的会话ID。

mysql> SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_query, trx_rows_modified FROM information_schema.innodb_trx WHERE TIME_TO_SEC(timediff(now(),trx_started)) >3000;

表1 字段说明

字段名

说明

trx_id

事务ID。

trx_state

事务状态。包括RUNNING、LOCK WAIT、ROLLING BACK等。

trx_started

事务开始时间。

trx_mysql_thread_id

该事务所属的MySQL会话ID。

trx_query

事务执行的SQL语句。

trx_rows_modified

事务修改的行数。

通过查看监控指标确认存在长事务。

登录管理控制台。
单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
在“实例管理”页面,选择目标实例,单击操作列中的“查看监控指标”,进入监控指标概览页。
查看“长事务指标”(指标ID:rds_long_transaction),当该指标成线性上升且时间较大时说明存在长事务。

kill长事务

获取长事务对应的线程ID。

通过执行•连接实例查看长事务及其会话ID。中的SQL语句,获取执行时间超过某一时间(例如:3000秒)的事务对应的会话ID。

mysql> SELECT trx_mysql_thread_id FROM information_schema.innodb_trx WHERE TIME_TO_SEC(timediff(now(),trx_started)) >3000;

获取到会话ID后,通过kill命令结束对应的事务。

mysql> kill trx_mysql_thread_id

kill长事务会导致事务回滚,请评估业务影响后执行。

设置长事务告警

查看已设置的告警。

登录管理控制台。
单击页面左上角的,选择“管理与监管 > 云监控服务 CES”,进入CES信息页面。
选择“告警 > 告警规则”,查看已设置的告警。

图1 查看告警规则

设置长事务告警。

单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
在“实例管理”页面,选择目标实例,单击操作列中的“查看监控指标”,进入监控指标概览页。
查看“长事务指标”。

图2 查看监控指标

单击“长事务指标”右上角的“+”,创建告警规则。

图3 长事务指标

在“创建告警规则”界面,填选相关信息。具体参数说明请参见创建告警规则和通知。

父主题: RDS for MySQL

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家