提问者:小点点

MySQL撤消日志持续增长


MySQL撤消日志一直增长到180G,没有回滚记录,我只是不知道为什么。 据我所知,当它到达innodb_max_undo_log_size时,它会自动截断,而1GB设置为innodb_max_undo_log_size。 有什么好的解决办法吗? 这是一个查询:
从Information_Schema.Innodb_Tablespaces ORDER BY file_size DESC LIMIT 1中选择名称,分配大小/1024/1024/1024作为大小(GB);

|Name           | SIZE (GB)        |
|innodb_undo_001 | 183.953220367432 |

我应该检查的是什么? 重启MySQL服务会减少撤消日志的大小吗? 请帮帮我。


共1个答案

匿名用户

检查运行时间非常长的事务。

mysql> show engine innodb status\G

现在滚动到该节中的最后一个条目

------------
TRANSACTIONS
------------

在那里,您将看到运行时间最长的事务。 下面是一个例子:

---TRANSACTION 184428602997, ACTIVE 236 sec
8057 lock struct(s), heap size 980520, 2000277 row lock(s)
MySQL thread id 124353057, OS thread handle 0x7ee6ef041700, query id 6717837828 10.20.30.40 a_mysql_username cleaning up

在这里,您可以看到事务运行236秒。 当你做的时候

mysql> show processlist;

你可能不会在同一时间看到它。 在processlist中,time列给出事务中上次状态更改后的秒数。 当事务执行新查询时,定时器重置为0。

不管怎样,您在上面的示例中还看到了这个事务的mysql线程id。 用这个杀死线程。

mysql> kill 124353057;

你的问题应该解决了。 当事务回滚时,这将花费相当长的时间(实际上对于180GB,这将花费很长时间)。 但是,如果重新启动服务器,也会发生同样的情况。 不要重启,您的服务器将会停机相当一段时间。 只需杀死线程并等待即可。