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服务会减少撤消日志的大小吗? 请帮帮我。
检查运行时间非常长的事务。
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,这将花费很长时间)。 但是,如果重新启动服务器,也会发生同样的情况。 不要重启,您的服务器将会停机相当一段时间。 只需杀死线程并等待即可。