[英]MySQL Alter Table Memory Increase
我试图通过向每个表添加一列来更改 2000 个表。 我通过在 C# 中使用 for 循环并对每个表名执行查询以获取我拥有的字符串列表来实现这一点。 它开始很快,但随后变得越来越慢。 mysql.exe 的内存在大约 30 秒内从 50k 增加到 375k。 为什么要这样做? 一旦我做了一个改变表,内存应该会再次下降。 每次更改后是否没有处理某些资源? 缓存还是缓冲区? 垃圾收集? 我无法完成这个 for 循环,因为它在第 20-25 个更改表之后变得非常慢。
当你向 MySQL 发出一个alter table
语句时,它开始重建表。
它执行以下步骤:
old
表复制到新文件中。new
文件定义 .frm-file 添加一列new
.myd-datafile 中添加数据文件中的列,这需要重写整个数据文件。new
数据文件中的所有行以使用默认值填充新列old
数据文件new
数据文件,使其具有与old
文件相同的名称。old
数据文件出于性能原因,它将尝试将new
数据和索引文件保存在内存中。
这是您看到的内存增加。
MySQL 会将表数据保留在内存中一段时间,并且只有在My.ini
分配给缓存空间的内存已耗尽时才会清除缓存。
您可以通过发出以下命令清除缓存:
RESET QUERY CACHE;
在每个alter table
语句之后。
请参阅: http : //dev.mysql.com/doc/refman/5.0/en/query-cache-status-and-maintenance.html
在此处阅读 MySQL 缓存问题: http : //www.docplanet.org/mysql/mysql-query-cache-in-depth/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.