Проверочные опции для myisamchk
-c или --check
Проверить таблицы на ошибки. Является операцией по умолчанию, если myisamchk не передаются другие опции, меняющие это поведение.
-e или --extend-check
Проверить таблицу очень тщательно (выполняется достаточно медленно в случае большого количества индексов). Эту опцию следует использовать в экстремальных ситуациях. В большинстве случаев myisamchk или myisamchk --medium-check вполне достаточно для выявления ошибок в таблице. Если используется --extended-check и система располагает приличным объемом памяти, то следует значительно увеличить значение key_buffer_size !
-F или --fast
Проверять только таблицы, которые не были корректно закрыты.
-C или --check-only-changed
Проверять только таблицы, изменившиеся с момента последней проверки.
-f или --force
Выполнять перезапуск myisamchk с -r (исправить) на таблице, если myisamchk найдет в ней хоть одну ошибку.
-i или --information
Выдавать статистическую информацию о проверяемой таблице.
-m или --medium-check
Быстрее, чем расширенная проверка (extended-check ), но при этом обнаруживается только 99,99% из общего числа ошибок (чего, однако, в большинстве случаев вполне достаточно).
-U или --update-state
Отмечать в файле '.MYI" факт проверки таблицы и наличие повреждений. Опцию следует использовать для получения максимального эффекта от опции --check-only-changed , однако ее применение недопустимо, если mysqld работает с таблицей и был запущен с опцией --skip-locking.
-T или --read-only
Не отмечать таблицу как проверенную. Это может пригодиться, когда myisamchk используется для проверки таблиц, используемых каким-то другим приложением, и это приложение не выполняет блокировку (как mysqld --skip-locking ).
Опции исправления для myisamchk
Следующие опции используются, если myisamchk запускается с -r или -o :
-D # или --data-file-length=# Максимальная длина файла данных (когда файл данных пересоздается при его "переполнении").
-e или --extend-check Пробовать исправлять каждую возможную строку из файла данных. Обычно при этом обнаруживается масса замусоренных строк. Использовать эту опцию следует только в самом крайнем случае, когда больше ничего не остается.
-f или --force Писать поверх старых временных файлов ('table_name.TMD") вместо аварийного прекращения.
-k # или keys-used=# Если используется ISAM , то данный параметр предписывает обработчику таблиц ISAM на необходимость обновить только первые # индексов. Если используется MyISAM , то определяет, какие ключи использовать, при этом каждый двоичный бит соответствует одному ключу (первый ключ - это бит 0). Может использоваться для ускорения вставок! Отключенные индексы можно снова активизировать с помощью myisamchk -r. keys .
-l или --no-symlinks Не рассматривать символические ссылки. Обычно myisamchk исправляет таблицы, на которые указывают символические ссылки. Данная опция отсутствует в MySQL 4.0, в связи с тем, что MySQL 4.0 не удаляет символические ссылки во время восстановления.
-r или --recover При указании этой опции можно исправить практически все, кроме уникальных ключей, в которых есть повторения (ошибка, вероятность которой мизерна для таблиц ISAM /MyISAM ). Если необходимо восстановить таблицу, то начинать надо с этой опции. Только если myisamchk сообщит, что таблица не может быть восстановлена с помощью -r , тогда следует пытаться применять -o (отметим, что в тех маловероятных случаях, когда -r не срабатывает, файл данных остается неизменным), В случае большого объема памяти следует увеличить размер sort_buffer_size !
-o или --safe-recover
Используется старый метод восстановления (читаются подряд все строки и обновляются все деревья индексов на основе найденных строк); такой алгоритм работает на порядок медленнее -r , но метод справляется с несколькими редкими случаями, непосильными для -r . При этом методе восстановления также используется значительно меньше дискового пространства, нежели в случае -r . Обычно всегда следует начинать с исправления посредством -r , и только если результат не будет достигнут, использовать -o . Для систем с большим объемом памяти следует увеличить размер key_buffer_size !
-n или --sort-recover
Заставляет myisamchk использовать сортировку при разрешении ключей, даже если это потребует временных файлов очень большого размера.
--character-sets-dir=...
Каталог, где хранятся кодировки.
--set-character-set=name
Изменить используемую для индекса кодировку
-t или --tmpdir=path
Путь для хранения временных файлов. Если не задан, myisamchk использует для пути переменную окружения TMPDIR .
-q или --quick
Быстрый ремонт без изменения файла данных. Можно добавить вторую -q , чтобы дать myisamchk санкцию на изменение исходного файла данных в случае дублирования ключей
-u или --unpack
Распаковать файл, упакованный в myisampack .
Другие опции для myisamchk
Кроме ремонта и проверки таблиц, myisamchk может выполнять другие операции:
-a или --analyze
Анализировать распределение ключей. Улучшает эффективность операции связывания за счет включения оптимизатора связей. Он обеспечивает лучший порядок связывания таблиц и определяет, какие ключи при этом следует использовать: myisamchk --describe --verbose table_name или посредством SHOW KEYS в MySQL.
-d или --description
Отображает некоторую информацию о таблице.
-A или --set-auto-increment[=value]
Предписывает, чтобы отсчет значений AUTO_INCREMENT начинался с value или большего значения. Если значение не указано, то в качестве следующего значения AUTO_INCREMENT берется наибольшее использованное значение для автоинкрементного ключа + 1.
-S или --sort-index
Сортировать блоки индексного дерева в порядке от больших к меньшим (high-low). Этим оптимизируются операции поиска и повышается скорость сканирования по ключу.
-R или --sort-records=#
Сортирует записи в соответствии с индексом. Это значительно повышает локализацию данных и может ускорить операции SELECT и ORDER BY , которые выполняются по индексу и выбирают данные по какому-либо интервалу. (Возможно, что первая сортировка будет выполняться очень медленно!) Чтобы узнать номера индексов таблицы, нужно использовать команду SHOW INDEX , показывающую индексы таблицы в том же порядке, в каком их видит myisamchk . Индексы нумеруются начиная с 1.
Использование памяти утилитой myisamchk
При работе 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 .
1 2 3 4 5 6 7
8 8 8
| |