При работе myisamchk
очень важно распределение памяти. Объем используемой
myisamchk
памяти не превышает количества, указанного с помощью опций -O
.
Когда речь идет о применении myisamchk
на очень больших файлах, следует
сначала принять решение о том, какое количество памяти будет при этом
использоваться. По умолчанию для целей исправления ошибок отводится только
около 3Mб. Применяя большие величины, можно достичь большей скорости
работы myisamchk
. К примеру, если имеется более 32Mб оперативной памяти,
то можно задать следующие опции (в дополнение к любым другим указанным опциям):
shell> myisamchk -O sort=16M -O key=16M -O read=1M -O write=1M ...
В большинстве случаев достаточно использовать -O sort=16M
.
Важно понимать, что myisamchk
использует временные файлы, для указания на
которые служит TMPDIR
. Если TMPDIR
указывает на файловую систему с
размещением в памяти, то велика вероятность ошибок нехватки памяти (out of
memory). Если такое произойдет, то в TMPDIR
следует поместить имя
некоторого другого каталога с большим пространством и перезапустить
myisamchk
.
При выполнении ремонта myisamchk
также понадобится большое количество
дискового пространства; :
Потребуется пространство порядка удвоенного размера файла - для оригинала и копии файла данных. В этом пространстве нет необходимости, когда исправление выполняется с
--quick
, поскольку в этом случае повторно создается только индексный файл. Дополнительное место необходимо на том же диске, где находится оригинальный файл записи!Необходимо место для нового индексного файла, заменяющего старый. В начальной фазе выполнения старый индексный файл усекается, поэтому обычно данный объем можно не учитывать. Место должно обеспечиваться на диске, содержащем оригинальный индексный файл!
При указании
--recover
или--sort-recover
(но не в случае использования--safe-recover
) потребуется место для буфера сортировки: (largest_key + row_pointer_length)*number_of_rows * 2
. Можно узнать длину ключей иrow_pointer_length
с помощьюmyisamchk -dv table
. Это пространство выделяется на временном диске (который определяется при помощиTMPDIR
либо--tmpdir=#
).
Если возникнут проблемы в связи с нехваткой дискового пространства во
время исправления, можно попробовать использовать --safe-recover
вместо
--recover
.