6.6.4.6 Использование памяти myisamchk
Выделение памяти важно при запуске myisamchk. myisamchk использует не больше памяти, чем установлено для его переменных, связанных с памятью. Если вы собираетесь использовать myisamchk для очень больших таблиц, вы должны сначала определить, сколько памяти вы хотите использовать. По умолчанию используется около 3 МБ для выполнения ремонта. Использование больших значений позволит myisamchk работать быстрее. Например, если у вас доступно более 512 МБ оперативной памяти, вы можете использовать такие параметры (в дополнение к другим параметрам, которые вы можете указать):
myisamchk --myisam_sort_buffer_size=256M \
--key_buffer_size=512M \
--read_buffer_size=64M \
--write_buffer_size=64M ...
Использование --myisam_sort_buffer_size=16M, вероятно, достаточно для большинства случаев.
Обратите внимание, что myisamchk использует временные файлы в TMPDIR. Если TMPDIR указывает на файловую систему памяти, ошибки недостатка памяти могут легко возникать. Если это произойдёт, запустите myisamchk с параметром --tmpdir=, чтобы указать каталог, расположенный на файловой системе с большим объёмом пространства. dir_name
При выполнении операций ремонта myisamchk также требует значительного объёма дискового пространства:
В два раза больше размера файла данных (оригинальный файл и его копия). Это пространство не нужно, если вы выполняете ремонт с помощью
--quick; в этом случае пересоздаётся только файл индекса. Это пространство должно быть доступно на той же файловой системе, что и исходный файл данных, так как копия создаётся в том же каталоге, что и оригинал.Место для нового файла индекса, заменяющего старый. Старый файл индекса усекается в начале операции ремонта, поэтому обычно этим пространством можно пренебречь. Это пространство должно быть доступно на той же файловой системе, что и исходный файл данных.
-
При использовании
--recoverили--sort-recover(но не при использовании--safe-recover), вам нужно дисковое пространство для сортировки. Это пространство выделяется во временном каталоге (указанном параметромTMPDIRили--tmpdir=). Следующая формула показывает требуемый объём:dir_name(
largest_key+row_pointer_length) *number_of_rows* 2Вы можете проверить длину ключей и
row_pointer_lengthс помощью myisamchk -dvtbl_name(см. Раздел 6.6.4.5, «Получение информации о таблице с помощью myisamchk»). Значенияrow_pointer_lengthиnumber_of_rows— это значенияDatafile pointerиData recordsв описании таблицы. Чтобы определить значениеlargest_key, проверьте строкиKeyв описании таблицы. СтолбецLenуказывает количество байтов для каждой части ключа. Для индекса с несколькими столбцами размер ключа — сумма значенийLenдля всех частей ключа.
Если у вас возникла проблема с дисковым пространством во время ремонта, вы можете попробовать --safe-recover вместо --recover.
© 2025 Oracle
Licensed under the GPLv2 License.