运行ALTER以添加新列时,tmp表不会增长

时间:2016-07-13 22:52:24

标签: mysql alter percona datadirectory

我有一个25 GB的表,我必须添加一列。

我运行一个脚本,当我执行它时,我可以看到数据目录中的临时表,但它仍然停留在大约480K。我可以在进程列表中看到ALTER正在运行且没有问题。

如果我在长时间的活动后终止脚本,那么在进程列表中查询将保持“已杀死”状态,并且tmp文件将开始增长,直到查询被彻底杀死(即,从“已杀死”状态进入进程列表完全从进程列表中消失。)

当我运行以下命令时(在终止查询之前):

select * from global_temporary_tables\G

它也没有显示任何行添加。

我还能做些什么吗?

1 个答案:

答案 0 :(得分:1)

首先,您的“ps”输出报告可能显示的内容与任何内容无关。不要依赖“ps”所说的内容:它包括陈旧的数据。

如果进程被终止(SIGKILL,而不是SIGTERM),我保证不再向任何地方提供任何输出。如果它是SIGTERMed,则取决于您附加的信号处理程序。我将冒险猜测你没有注册任何信号处理程序。

大多数生产DBMS都以块的形式设置存储。获得X空间量,其可以包含能够添加行和/或列的“松弛”空间(我不说这两个机制是相同的)。仅仅因为某些东西没有以你能够察觉的方式成长并不意味着没有做出改变。为什么不查看数据字典,询问表的当前结构。

您是否已提交更改?在某些DBMS中,DDL操作被视为可提交/可回滚(yecch)事件。