MyISAM: подсистема хранения базы данных MySQL

MyISAM - система хранения таблиц в СУБД MySQLБудучи подсистемой хранения по умолчанию в MySQL 5.1 и более ранних верси­ях, MyISAM предоставляет большой список функций, таких как полнотекстовое индексирование, сжатие и пространственные функции (для геоинформационных систем, ГИС). MyISAM не поддерживает транзакции или построчные блокировки. Ее самым слабым местом, несомненно, является то, что она не имеет даже удаленного механизма защиты от сбоев. Из-за подсистемы MyISAM MySQL до сих пор имеет репутацию СУБД без транзакций, хотя позволяет использовать транзакции уже более десяти лет! Тем не менее MyISAM не так уж плоха для нетранзакционной, не отказоустойчивой подсистемы хранения. Если вам нужны данные только для чтения или если ваши таблицы невелики и их восстановление не будет чересчур сложным, то не должно возникнуть вопросов по использованию MyISAM. (Но, пожалуйста, не применяйте ее по умолчанию. Вместо этого задействуйте InnoDB).


Оглавление статьи[Показать]


 

Хранение

MyISAM обычно хранит каждую таблицу в двух файлах — в файле данных и ин­дексном файле. Эти файлы имеют расширения .MYD и .MYI соответственно. Таблицы типа MyISAM могут содержать как динамические, так и статические строки (строки фиксированной длины). MySQL решает, какой формат использовать, основываясь на определении таблицы. Количество строк в таблице типа MyISAM ограничено в первую очередь доступным дисковым пространством на сервере базы данных и мак­симальным размером файла, допустимым в операционной системе.

Таблицы MyISAM со строками переменной длины, создаваемые в версии MySQL 5.0, по умолчанию настроены на поддержку 256 Тбайт данных с использованием шести­байтных указателей на записи с данными. В более ранних версиях MySQL указатели по умолчанию были четырехбайтными с максимальным объемом данных 4 Гбайт. Все версии MySQL могут поддерживать размер указателя до 8 байт. Чтобы изме­нить размер указателя в таблице MyISAM (уменьшить или увеличить), вы должны изменить таблицу и задать новые значения параметров MAX_ROWS и AVG_ROW_LENGTH, которые дают приблизительную оценку необходимого пространства. Это приведет к перезаписи таблицы и всех ее индексов, что может занять много времени.

 

Особенности MyISAM

Как одна из самых старых подсистем хранения MySQL, MyISAM может выполнять много функций, которые за годы использования СУБД были разработаны для решения различных задач.

  • Блокирование и конкурентный доступ. MyISAM может блокировать только таблицы целиком, не построчно. Запросы на чтение получают разделяемые (на чтение) блокировки всех таблиц, которые им нужно прочитать. Запросы на за­пись получают монопольные (на запись) блокировки. Однако вы можете встав­лять новые строки в таблицу в то время, когда исполняются запросы на выборку данных из таблицы (конкурентные вставки).
  • Исправление данных. MySQL поддерживает ручные и автоматические проверку и исправление таблиц типа MyISAM, но не стоит путать эти функции с транзак­циями или аварийным восстановлением. После исправления таблицы вы, скорее всего, обнаружите, что некоторые данные просто исчезли. К тому же исправление работает очень медленно. Вы можете применять команды CHECK TABLE mytable и REPAIR TABLE mytable для проверки таблицы на предмет наличия ошибок и их устранения. А также использовать командную утилиту myisamchk для проверки и исправления таблиц, когда сервер находится в автономном (offline) режиме.
  • Особенности индексирования. Вы можете создавать индексы по первым 500 сим­волам столбцов типа BLOB и TEXT в таблицах MyISAM. MyISAM поддерживает полнотекстовые индексы, которые индексируют отдельные слова для сложных операций поиска. 
  • Отложенная запись ключей. Таблицы MyISAM, созданные с пометкой DELAY_KEY_ WRITE, не записывают измененные индексы на диск в конце запроса. Вместо этого MyISAM сохраняет изменения в буфере памяти для ключей. Сброс индексных блоков на диск происходит при переполнении буфера или закрытии таблицы. Это позволяет увеличить производительность, но в случае сбоя сервера или системы индексы наверняка будут повреждены и потребуют восстановления. Вы можете на­строить отложенную запись ключей как для всей базы, так и для отдельных таблиц.

 

Сжатые таблицы MyISAM

Некоторые таблицы после создания и заполнения данными никогда больше не из­меняются. Такие таблицы хорошо подходят для сжатия средствами MyISAM.

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

Издержки на распаковку данных для чтения незначительны для большинства при­ложений, установленных на современном оборудовании, а значительная экономия достигается из-за сокращения операций ввода/вывода. Строки сжимаются по от­дельности, поэтому для получения одной строки MySQL не нужно распаковывать всю таблицу (или даже страницу).

 

Производительность MyISAM

Благодаря компактному хранению данных и невысоким издержкам, обусловленным простотой архитектуры, MyISAM в некоторых случаях может обеспечить хорошую производительность. У нее есть серьезные ограничения по масштабируемости, включая мьютексы, установленные на ключевых кэшах. MariaDB предлагает сег­ментированный кэш-ключ, который позволяет избежать этой проблемы. Однако наиболее распространенной проблемой MyISAM, мешающей добиться высокой про­изводительности, является блокировка таблиц. Если запросы застревают в статусе «Заблокировано», вы страдаете от блокировки на уровне таблицы.

Вас заинтересует / Intresting for you:

Оператор SELECT в MySQL 8: пол...
Оператор SELECT в MySQL 8: пол... 4048 просмотров Дэйзи ак-Макарова Sat, 07 Aug 2021, 10:47:45
InnoDB: подсистема хранения ба...
InnoDB: подсистема хранения ба... 3929 просмотров Ирина Светлова Mon, 07 Jan 2019, 06:34:07
Использование MySQL в качестве...
Использование MySQL в качестве... 1931 просмотров Андрей Волков Tue, 01 Oct 2019, 05:41:51
Новые возможности базы данных ...
Новые возможности базы данных ... 827 просмотров Дэйзи ак-Макарова Wed, 04 Aug 2021, 04:13:52
Войдите чтобы комментировать

Обсудить эту статью

INFO: Вы отправляете сообщение как 'Гость'


admin аватар
admin ответил в теме #10346 9 мес. 3 дн. назад
Отличное описание MyISAM! +1
apv аватар
apv ответил в теме #10106 1 год 1 мес. назад
Ljcnfnjxyj подробно описали MyISAM. Хотя движок уже не используется в новых версиях, но действующих продуктов с ним всё еще очень много.
iVoron аватар
iVoron ответил в теме #9361 3 года 7 мес. назад
Хорошо сказали про все + и - MyISAM. Подписываюсь на Вас)