/ 云数据库 rds/ / rds for mysql/ rds for mysql长事务排查和处理
更新时间:2024-10-25 gmt 08:00

rds for mysql长事务排查和处理-九游平台

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

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

排查长事务

  • 连接实例查看长事务及其会话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

    事务修改的行数。

  • 通过查看监控指标确认存在长事务。
    1. 单击页面左上角的,选择“数据库 > 云数据库 rds”,进入rds信息页面。
    2. 在“实例管理”页面,选择目标实例,单击操作列中的“查看监控指标”,进入监控指标概览页。
    3. 查看“长事务指标”(指标id:rds_long_transaction),当该指标呈线性上升且时间较大时说明存在长事务。

kill长事务

  1. 获取长事务对应的线程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;

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

    mysql> kill trx_mysql_thread_id

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

设置长事务告警

  1. 查看已设置的告警。
    1. 单击页面左上角的,选择“管理与监管 > 云监控服务 ces”,进入ces信息页面。
    2. 选择“告警 > 告警规则”,查看已设置的告警。
      图1 查看告警规则
  2. 设置长事务告警。
    1. 单击页面左上角的,选择“数据库 > 云数据库 rds”,进入rds信息页面。
    2. 在“实例管理”页面,选择目标实例,单击操作列中的“查看监控指标”,进入监控指标概览页。
    3. 查看“长事务指标”。
      图2 查看监控指标
    4. 单击“长事务指标”右上角的“ ”,创建告警规则。
      图3 长事务指标
    5. 在“创建告警规则”界面,填选相关信息。具体参数说明请参见创建告警规则和通知

相关文档

网站地图