Двигатель хранения Aria
Двигатель хранения Aria по умолчанию компилируется из MariaDB 5.1 и должен быть активен при запуске MariaDB.
Начиная с MariaDB 10.4, все системные таблицы используют Aria.
Кроме того, внутренние таблицы на диске используют формат таблиц Aria вместо формата MyISAM. Это должно ускорить некоторые запросы GROUP BY и DISTINCT, так как Aria имеет лучшую кэширование, чем MyISAM.
Примечание: Двигатель хранения Aria ранее назывался Maria (см. Название Aria для получения подробностей о переименовании), и в предыдущих версиях MariaDB он по-прежнему назывался Maria.
Следующие параметры таблицы применяются к таблицам Aria в CREATE TABLE и ALTER TABLE:
-
TRANSACTIONAL= 0: Если параметр таблицы|1TRANSACTIONALустановлен для таблицы Aria, то таблица будет безопасной при сбоях. Это реализуется путём логирования всех изменений в таблице в журнал транзакций Aria и синхронизации этих записей в конце оператора. Это незначительно замедлит запись и обновление. Однако преимущество состоит в том, что если сервер выйдет из строя до завершения оператора, все недолговечные изменения будут отменены до состояния в начале оператора. Это также требует до 6 байт больше для каждой строки и ключа для хранения идентификатора транзакции (чтобы разрешить одновременные операции вставки и выбора).-
TRANSACTIONAL=1не поддерживается для разграниченных таблиц. - Значение параметра таблицы
TRANSACTIONALпо умолчанию для таблицы Aria зависит от значения параметра таблицыROW_FORMAT. Подробности см. ниже. - Если параметр таблицы
TRANSACTIONALустановлен для таблицы Aria, то таблица фактически не поддерживает транзакции. См. MDEV-21364 для получения дополнительной информации. В этом контексте транзакционный означает просто безопасный при сбоях.
-
-
PAGE_CHECKSUM= 0: Если для индексов и данных должны быть использованы контрольные суммы страниц для дополнительной безопасности.|1 -
TABLE_CHECKSUM= 0: То же, что и|1CHECKSUMв MySQL 5.1 -
ROW_FORMAT=PAGE: Формат строк таблицы.|FIXED|DYNAMIC- Значение по умолчанию —
PAGE. - Для эмуляции MyISAM установите
ROW_FORMAT=FIXEDилиROW_FORMAT=DYNAMIC
- Значение по умолчанию —
Параметры таблицы TRANSACTIONAL и ROW_FORMAT взаимодействуют следующим образом:
- Если
TRANSACTIONAL=1установлен, то единственный поддерживаемый формат строк —PAGE. ЕслиROW_FORMATустановлен на другое значение, Aria выводит предупреждение, но все равно принудительно устанавливает формат строк вPAGE. - Если
TRANSACTIONAL=0установлен, таблица не будет безопасной при сбоях, и поддерживается любой формат строк. - Если
TRANSACTIONALне установлен, то поддерживается любой формат строк. ЕслиROW_FORMATустановлен, таблица будет использовать этот формат строк. В противном случае таблица будет использовать формат строк по умолчаниюPAGE. В этом случае, если таблица использует формат строкPAGE, она будет безопасной при сбоях. Если она использует другой формат строк, то она не будет безопасной при сбоях.
Другие усовершенствования:
-
CHECKSUM TABLE теперь игнорирует значения в полях NULL. Это ускоряет
CHECKSUM TABLEи исправляет некоторые случаи, когда одно и то же определение таблицы могло давать разные значения контрольной суммы в зависимости от формата строк. Недостатком является то, что значение теперь отличается от других установок MySQL. Новый вычисление контрольной суммы исправлено для всех движков таблиц, которые используют стандартный способ вычисления и MyISAM, который выполняет вычисления внутри. Примечание: старые таблицы MyISAM с внутренней контрольной суммой будут возвращать ту же контрольную сумму, что и раньше. Чтобы исправить их, чтобы они рассчитывали в соответствии с новыми правилами, вам нужно выполнитьALTER TABLE. Вы можете использовать старые способы вычисления контрольных сумм, используя параметр--oldдля mariadbdmysqld или установить системную переменную '@@old' в1при выполненииCHECKSUM TABLE ... EXTENDED; - При запуске Aria проверяет журналы Aria и автоматически восстанавливает таблицы с последней точки сохранения, если сервер был неправильно остановлен. См. Журналы Aria
Параметры запуска для Aria
Полный список см. в Переменные сервера Aria.
В обычной работе нужно учитывать только следующие переменные:
-
aria-pagecache-buffer-size
- Здесь кэшируются все страницы индексов и данных. Чем больше это значение, тем быстрее будет работать Aria.
-
aria-block-size
- Значение по умолчанию 8192, должно подойти для большинства случаев. Единственная проблема с большим значением заключается в том, что поиск упакованного ключа в блоке занимает больше времени, так как нужно примерно 8192/2 поиска для каждого ключа. Мы планируем исправить это, добавив словарь в конце страницы, чтобы иметь возможность выполнять бинарный поиск в блоке перед запуском сканирования. Пока это не будет сделано, и поиск ключей займёт слишком много времени, даже если вы не попадаете на диск, следует рассмотреть возможность уменьшения этого значения.
- Возможные значения для проб:
2048,4096или8192 - Обратите внимание, что вы не можете изменить это без создания дампов, удаления старых таблиц и удаления всех файлов журналов, а затем восстановления ваших таблиц Aria. (Это единственный вариант, который требует дампов и загрузки)
-
aria-log-purge-type
- Установите это значение в "
at_flush", если вы хотите сохранить копию журналов транзакций (хорошо как дополнительная резервная копия). Журналы останутся до тех пор, пока вы не выполните FLUSH ENGINE LOGS.
- Установите это значение в "
Файлы журналов Aria
Файл aria_log_control — это очень короткий файл журнала (52 байта), который содержит текущее состояние всех таблиц Aria, связанных с протоколированием и контрольными точками. В частности, он содержит следующую информацию:
Aria file version: 1 Block size: 8192 maria_uuid: ee948482-6cb7-11ed-accb-3c7c3ff16468 last_checkpoint_lsn: (1,0x235a) last_log_number: 1 trid: 28 recovery_failures: 0
uuid— уникальный идентификатор для каждой системы. Все файлы Aria, созданные, будут содержать копию этого в своих заголовках .MAI. Это в основном используется для проверки, не скопировал ли кто-нибудь файл Aria между серверами MariaDB.-
last_checkpoint_lsnиlast_log_number— информация о текущих файлах aria_log. -
trid— наибольший номер транзакции, встреченный до сих пор. Используется при восстановлении.
Файлы aria_log.* содержат журнал всех операций, изменяющих файлы Aria (включая создание таблиц, удаление таблиц, вставки и т. д.). Это обычный WAL (журнал предзаписи), похожий на файл журнала InnoDB, за исключением того, что aria_log содержат как операции redo, так и undo. Старые файлы aria_log автоматически удаляются, когда они больше не нужны (ни последняя контрольная точка, ни какая-либо выполняющаяся транзакция не нуждаются больше в старых данных).
Отсутствует допустимый идентификатор
Ошибка Missing valid id at start of file. File is not a valid aria control file означает, что что-то перезаписало по крайней мере первые 4 байта в файле. Это может произойти из-за проблемы с файловой системой (аппаратное или программное обеспечение) или ошибки, в которой поток внутри MariaDB записал в неправильный дескриптор файла (в этом случае следует сообщить об ошибке, прикрепив копию файла управления для помощи).
В случае повреждения файла журнала, при остановленном сервере, можно исправить это, удалив все файлы aria_log. Если файл control_file поврежден, то необходимо удалить файл aria_control_file и все файлы aria_log.*. Это означает, что при открытии таблицы Aria сервер будет считать, что она перемещена с другой системы, и выполнит автоматическую проверку и ремонт. Если проблем не было, таблица откроется и может использоваться как обычно. См. также Когда безопасно удалить старые файлы журнала.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/aria-storage-engine/