Когда вы запускаете оператор alter table
для MySQL, он начинает перестраивать таблицу.
Он выполняет следующие шаги:
- Копирует таблицу
old
в новыйфайл. - Добавить столбец в определение файла
new
.frm-файл - Добавить столбец в файл данных в
new
.myd-datafile, для этого требуется перезаписать весь файл данных. - Просмотрите все строки в файле данных
new
, чтобы заполнить новый столбец значением по умолчанию - Если новый столбец имеет индекс, MySQL должен выполнить шаги 2,3,4 длятакже .MYI-indexfile.
- Переименуйте
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/