4.6.3.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(см. Раздел 4.6.3.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.