Spec-Zone.ru › MySQL 5.7

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 -dv tbl_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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/myisamchk-memory.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API