The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Базы данных, SQL" / Оглавление документа

7.1 Таблицы MyISAM

MyISAM представляет собой заданный по умолчанию тип таблицы в MySQL Version 3.23. Он основан на коде ISAM и имеет много полезных расширений.

Индекс сохранен в файле с расширением .MYI (MYIndex), а данные сохранены в файле с расширением .MYD (MYData). Вы можете проверять и ремонтировать таблицы MyISAM командой myisamchk. Подробности в разделе "4.4.6.7 Использование myisamchk для ремонта". Вы можете сжимать таблицы MyISAM с помощью команды myisampack.

Следующее является новшествами в MyISAM:

MyISAM также поддерживает следующие вещи, которые MySQL будет способен использовать в ближайшем будущем:

Обратите внимание, что индексные файлы обычно намного меньше у MyISAM, чем у ISAM. Это означает, что MyISAM обычно будет использовать меньшее количество ресурсов системы, чем ISAM, но будет нуждаться в большем времени CPU при вставке данных в сжатый индекс.

Следующие параметры mysqld могут использоваться, чтобы изменить поведение таблиц MyISAM. Подробности в разделе "4.5.5.4 Синтаксис SHOW VARIABLES ".

ОпцияЧто она делает
--myisam-recover=#Автоматически восстанавливаются поврежденные таблицы.
-O myisam_sort_buffer_size=#Буфер, используемый при восстановлении таблиц.
--delay-key-write-for-all-tablesНе сбрасывать буфер ключей на диск между записями для любой MyISAM таблицы.
-O myisam_max_extra_sort_file_size=# Используется, чтобы помочь MySQL решить, когда использовать медленный но безопасный метод создания индекса кэша ключей. ОБРАТИТЕ ВНИМАНИЕ , что этот параметр задан в мегабайтах!
-O myisam_max_sort_file_size=#Не использовать быстрый метод сортировки для созданного индекса, если временный файл больше, чем здесь указано. ОБРАТИТЕ ВНИМАНИЕ, что этот параметр задан в мегабайтах!

Автоматическое восстановление активизировано, если Вы запускаете mysqld с опцией --myisam-recover=#. Подробности в разделе "4.1.1 Параметры командной строки mysqld". При открытии таблица будет проверена, если она отмечена как поврежденная, или если счетчик открытий для нее не равен 0, и Вы работаете с опцией --skip-locking. Если хоть одно из этих условий выполнено, происходит следующее:

Если ремонт не смог восстановить все строки из предыдущей завершенной инструкции, и Вы не определяли FORCE как опцию для myisam-recover, автоматический ремонт прервется с сообщением об ошибках в файле:

Error: Couldn't repair table: test.g00pages

Если Вы в этом случае использовали опцию FORCE, Вы будете взамен иметь предупреждение в файле ошибки:

Warning: Found 344 of 354 rows when repairing ./test/g00pages

Обратите внимание, что если Вы выполняете автоматический ремонт с опцией BACKUP, Вы должны иметь скрипт в cron, который автоматически перемещает файлы с именами, подобными tablename-datetime.BAK, из каталогов баз данных.

7.1.1 Место для ключей

MySQL может поддерживать различные индексные типы, но нормальный тип ISAM или MyISAM. Они используют индекс B-дерева, и Вы можете грубо вычислять размер для индексного файла как (key_length+4)/0.67. Это для самого плохого случая, когда все ключи вставлены в сортируемом порядке, и мы не имеем сжатых ключей.

Индексы строк сжимаются. Если первая индексная часть представляет собой строку, она также будет префиксно сжата. Сжатие делает индексный файл меньше, чем вышеупомянутые объекты, если столбец строки имеет много конечных пробелов или столбец типа VARCHAR, который не всегда используется для данных полной длины. Префиксное сжатие используется на ключах, которые начинаются со строки. Префиксное сжатие хорошо помогает, если имеется много строк с идентичным префиксом.

В таблицах MyISAM Вы можете также сжимать числа, определяя PACK_KEYS=1, когда Вы создаете таблицу. Это помогает, когда Вы имеете много целочисленных ключей, которые имеют идентичный префикс, когда числа сохранены в формате со старшим байтом в начале.

7.1.2 Формат таблиц MyISAM

MyISAM поддерживает 3 различных типа таблиц. Два из них будут выбраны автоматически в зависимости от типа столбцов, которые Вы используете. Третий тип, сжатые таблицы, может быть создан только с помощью внешнего инструмента myisampack.

7.1.2.1 Таблицы статических (фиксированной длины) характеристик

Это заданный по умолчанию формат. Он используется, когда таблица не содержит столбцов типов VARCHAR, BLOB или TEXT.

Этот формат самый простой и наиболее безопасный. Он также самый быстрый из дисковых форматов. Быстродействие исходит из простого пути, которым данные могут быть найдены на диске. При поиске чего-либо с индексом и статическим форматом это очень просто. Только умножите номер строки на длину строки.

Также при просмотре таблицы очень просто читать постоянное число записей за каждую дисковую операцию чтения.

Кроме того, myisamchk обычно может исправлять все записи за исключением частично записанных. Обратите внимание, что в MySQL все индексы могут всегда восстанавливаться.

7.1.2.2 Характеристики динамических таблиц

Этот формат используется, если таблица содержит столбцы типов VARCHAR, BLOB или TEXT, или если таблица была создана с опцией ROW_FORMAT=dynamic.

Этот формат немного сложнее потому, что каждая строка должна иметь заголовок, указывающий ее длину. Одна запись может также заканчиваться не в одном месте, когда она удлиннилась при обновлении.

Вы можете использовать OPTIMIZE table или myisamchk для дефрагментации таблицы. Если Вы имеете статические данные, к которым часто обращаетесь или меняете их, неплохо бы переместить эти динамические столбцы (например, VARCHAR или BLOB) в другие таблицы, чтобы избежать фрагментации:

7.1.2.3 Характеристики сжатых таблиц

Этот тип таблиц предназначен только для чтения, он может быть сгенерирован инструментом myisampack (pack_isam для таблиц типа ISAM):

7.1.3 Проблемы с таблицами MyISAM.

Формат файла, который использует MySQL, чтобы хранить данные, был многократно тщательно проверен, но всегда найдутся обстоятельства, которые могут разрушить таблицы базы данных.

7.1.3.1 Поврежденные таблицы MyISAM

Несмотря на то, что формат таблиц MyISAM очень надежен (все изменения для таблицы будут записаны перед возвратами инструкций SQL), Вы можете получать разрушенные таблицы, если случаются некоторые из следующих вещей:

Типичные признаки для разрушенной таблицы:

Вы можете проверять, является ли таблица исправной, с помощью команды CHECK TABLE. Подробности в разделе "4.4.4 Синтаксис CHECK TABLE ".

Вы можете отремонтировать разрушенную таблицу с помощью команды REPAIR TABLE. Подробности в разделе "4.4.5 Синтаксис REPAIR TABLE ". Вы можете также отремонтировать таблицу, когда mysqld не запущен с помощью команды myisamchk.

В этом случае наиболее важная вещь, знать из-за чего таблица была повреждена. Проверить, не разрушался ли недавно mysqld легко: если в файле ошибок mysqld имеется недавняя строка перезапуска restarted mysqld, значит, разрушался и был перезапущен автоматически. Если это не имеет место, значит, что-то не так с сервером.

7.1.3.2 Клиентура использует или не закрыла таблицу правильно

Каждый MyISAM-файл .MYI имеет в заголовке счетчик, который может использоваться, чтобы проверить, была ли таблица закрыта правильно.

Если Вы получаете следующее предупреждение из CHECK TABLE или myisamchk:

# clients is using or hasn't closed the table properly

Это означает, что этот счетчик вышел из синхронизации. Это пока еще не означает, что таблица разрушена, но Вы должны по крайней мере сделать проверку таблицы, чтобы удостовериться, что она в порядке.

Счетчик работает следующим образом:

Другими словами, единственные пути, которыми он может выйти из синхронизации такие:




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру