MySQL撤消日志不断增长

MySQL撤消日志不断增长,mysql,innodb,Mysql,Innodb,MySQL撤销日志一直增长到180G,并且没有回滚记录,我就是不明白为什么。据我所知,当它达到设置为1GB的innodb_max_undo_log_大小时,它会自动截断。有什么好的解决办法吗?以下是查询: 从INFORMATION_SCHEMA.INNODB_TABLESPACES ORDER BY file_SIZE DESC LIMIT 1中选择Name,ALLOCATED_SIZE/1024/1024/1024作为大小GB 我应该检查什么?重启MySQL服务是否会减少撤消日志的大小?请提供

MySQL撤销日志一直增长到180G,并且没有回滚记录,我就是不明白为什么。据我所知,当它达到设置为1GB的innodb_max_undo_log_大小时,它会自动截断。有什么好的解决办法吗?以下是查询: 从INFORMATION_SCHEMA.INNODB_TABLESPACES ORDER BY file_SIZE DESC LIMIT 1中选择Name,ALLOCATED_SIZE/1024/1024/1024作为大小GB


我应该检查什么?重启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来说,随着事务回滚,这将需要很长时间。但是,如果重新启动服务器,也会发生同样的情况。不要重新启动,您的服务器将关闭一段时间。只需终止线程并等待。

非常感谢,终止线程后撤消日志大小会恢复正常吗?现在我注意到有很多事务被删除并回滚@幻想者。它显示--TRANSACTION 20716380661,ACTIVE 3148秒回滚正在使用的SQL语句mysql表1,locked 1回滚497920锁结构,堆大小52371664,994926行锁,undo log entries 179113 mysql线程id 361723,以及--TRANSACTION 2071074756,ACTIVE 7961秒回滚回滚728195锁结构,堆大小76570832,1455036行锁,撤消日志条目292458 MySQL线程id 359783。我需要终止所有线程id?我已经尝试终止线程id,但是事务仍然存在,没有终止@FancyPantsys,撤消日志大小将恢复正常。当线程回滚时,就让它们完成它们的任务。不要杀死它们,反正也不行。请注意,撤消清除线程释放撤消日志中的数据可能需要一些时间。它不会立即发生。
mysql> kill 124353057;