AWS RDS Mysql 按 ID 终止事务(不带thread_id)

AWS RDS Mysql kill transaction by ID (without thread_id)

提问人:João Salavisa 提问时间:10/3/2019 最后编辑:João Salavisa 更新时间:10/7/2022 访问量:1602

问:

我目前遇到了一些长时间运行的事务的问题,这些事务将锁锁定到我无法杀死的表中的一行。

Innodb_trx包含以下信息 - 特别注意 thread_id = null;

select * from information_schema.innodb_trx\G
*************************** 2. row ***************************
                    trx_id: 153261728
                 trx_state: RUNNING
               trx_started: 2019-10-02 10:05:42
     trx_requested_lock_id: NULL
          trx_wait_started: NULL
                trx_weight: 5
       trx_mysql_thread_id: 0
                 trx_query: NULL
       trx_operation_state: NULL
         trx_tables_in_use: 0
         trx_tables_locked: 2
          trx_lock_structs: 3
     trx_lock_memory_bytes: 1136
           trx_rows_locked: 1
         trx_rows_modified: 2
   trx_concurrency_tickets: 0
       trx_isolation_level: READ COMMITTED
         trx_unique_checks: 1
    trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
 trx_adaptive_hash_latched: 0
 trx_adaptive_hash_timeout: 0
          trx_is_read_only: 0
trx_autocommit_non_locking: 0

show engine innodb status\G;
------------------
---TRANSACTION 153261728, ACTIVE (PREPARED) 27716 sec recovered trx
3 lock struct(s), heap size 1136, 1 row lock(s), undo log entries 2
---TRANSACTION 96697370, ACTIVE (PREPARED) 988082 sec recovered trx
0 lock struct(s), heap size 1136, 3 row lock(s), undo log entries 3

有没有办法像这样终止/停止/回滚交易?

MySQL 亚马逊-RDS

评论

0赞 Raymond Nijland 10/3/2019
事务/查询仍在?KILL 有效,但不能thread_idSHOW FULL PROCESSLISTCONNECTION_ID()
0赞 João Salavisa 10/3/2019
@RaymondNijland很遗憾,完整的进程列表中没有进程。
4赞 Michael - sqlbot 10/3/2019
这些是 XA 事务吗?我想我从来没有遇到过使用它们的人,但这就是它的样子......percona.com/blog/2017/09/22/......
0赞 Ruslan 5/31/2023
@JoãoSalavisa你是如何解决这个问题的?

答:

0赞 David542 10/7/2022 #1

我有一个存储的查询,我通常用它来在rds上执行此操作,如下所示:

SELECT CONCAT('CALL mysql.rds_kill( ',id,');') kill_cmd, p.*
FROM information_schema.processlist p WHERE DB='yourDb';

enter image description here这将为所有活动进程生成 kill 语句。在你的例子中,你只需要一个(或几个)id,所以你可以从那里根据id复制粘贴你想要的语句。例如,您可以运行以下命令来终止进程:kill1991542

CALL mysql.rds_kill(1991542);

评论

0赞 Ruslan 5/31/2023
OP 指出该进程未显示在 processlist 中