繁体   English   中英

MySQL 改变表内存增加

[英]MySQL Alter Table Memory Increase

我试图通过向每个表添加一列来更改 2000 个表。 我通过在 C# 中使用 for 循环并对每个表名执行查询以获取我拥有的字符串列表来实现这一点。 它开始很快,但随后变得越来越慢。 mysql.exe 的内存在大约 30 秒内从 50k 增加到 375k。 为什么要这样做? 一旦我做了一个改变表,内存应该会再次下降。 每次更改后是否没有处理某些资源? 缓存还是缓冲区? 垃圾收集? 我无法完成这个 for 循环,因为它在第 20-25 个更改表之后变得非常慢。

当你向 MySQL 发出一个alter table语句时,它开始重建表。

它执行以下步骤:

  1. old表复制到新文件中。
  2. new文件定义 .frm-file 添加一列
  3. new .myd-datafile 中添加数据文件中的列,这需要重写整个数据文件。
  4. 遍历new数据文件中的所有行以使用默认值填充新列
  5. 如果新列有索引,MySQL 也必须对 .MYI-indexfile 执行步骤 2、3、4。
  6. 重命名old数据文件
  7. 重命名new数据文件,使其具有与old文件相同的名称。
  8. 删除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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM