Spec-Zone .ru
спецификации, руководства, описания, API

8.6.3. Скорость REPAIR TABLE Операторы

REPAIR TABLE для MyISAM таблицы подобны использованию myisamchk для операций восстановления, и часть той же самой оптимизации производительности применяется:

Предположите, что myisamchk работа табличного восстановления делается, используя следующие опции, чтобы установить ее переменные выделения памяти:

--key_buffer_size=128M --myisam_sort_buffer_size=256M--read_buffer_size=64M --write_buffer_size=64M

Некоторые из тех myisamchk переменных соответствуют системным переменным сервера:

Переменная myisamchk Системная Переменная
key_buffer_size key_buffer_size
myisam_sort_buffer_size myisam_sort_buffer_size
read_buffer_size read_buffer_size
write_buffer_size ни один

Каждая из системных переменных сервера может быть установлена во времени выполнения, и некоторые из них (myisam_sort_buffer_size, read_buffer_size) имейте значение сеанса в дополнение к глобальному значению. Установка значения сеанса ограничивает эффект изменения к Вашему текущему сеансу и не влияет на других пользователей. Замена переменной только для глобальной переменной (key_buffer_size, myisam_max_sort_file_size) влияет на других пользователей также. Для key_buffer_size, следует принять во внимание, что буфер совместно используется с теми пользователями. Например, если Вы устанавливаете myisamchk key_buffer_size переменная к 128 МБ, Вы могли установить соответствие key_buffer_size системная переменная, больше чем это (если это уже не устанавливается больше), чтобы разрешить ключевое буферное использование действием в других сеансах. Однако, изменение глобального ключевого размера буфера лишает законной силы буфер, вызывая увеличенный дисковый ввод-вывод и замедление для других сеансов. Альтернатива, которая избегает этой проблемы, должна использовать отдельный ключевой кэш, присвоить ей индексирование от таблицы, которая будет восстановлена, и освободить ее, когда восстановление полно. См. Раздел 8.9.2.2, "Многократные Ключевые Кэши".

Основанный на предыдущих комментариях, a REPAIR TABLE работа может быть сделана следующим образом, чтобы использовать настройки, подобные myisamchk команде. Здесь отдельный ключевой буфер 128 МБ выделяется, и файловая система, как предполагается, разрешает размер файла по крайней мере 100 Гбайт.

SET SESSION myisam_sort_buffer_size = 256*1024*1024;SET SESSION read_buffer_size = 64*1024*1024;SET GLOBAL myisam_max_sort_file_size = 100*1024*1024*1024;SET GLOBAL repair_cache.key_buffer_size = 128*1024*1024;CACHE INDEX tbl_name IN repair_cache;LOAD INDEX INTO CACHE tbl_name;REPAIR TABLE tbl_name ;SET GLOBAL repair_cache.key_buffer_size = 0;

Если Вы намереваетесь изменить глобальную переменную, но хотеть сделать столь только для продолжительности a REPAIR TABLE работа, чтобы минимально влиять на других пользователей, сохраните ее значение в пользовательской переменной и восстановите ее позже. Например:

SET @old_myisam_sort_buffer_size = @@global.myisam_max_sort_file_size;SET GLOBAL myisam_max_sort_file_size = 100*1024*1024*1024;REPAIR TABLE tbl_name ;SET GLOBAL myisam_max_sort_file_size = @old_myisam_max_sort_file_size;

Системные переменные, которые влияют REPAIR TABLE может быть установлен глобально при запуске сервера, если Вы хотите, чтобы значения были в действительности по умолчанию. Например, добавьте эти строки к серверу my.cnf файл:

[mysqld]myisam_sort_buffer_size=256Mkey_buffer_size=1Gmyisam_max_sort_file_size=100G

Эти настройки не включают read_buffer_size. Установка read_buffer_size глобально к большому значению делает так для всех сеансов и может заставить производительность страдать из-за чрезмерного выделения памяти для сервера со многими одновременными сеансами.