Aria FAQ
В данном FAQ содержится информация о хранилище Aria.
Хранилище Aria ранее было известно как Maria (см. Имя Aria). В текущих выпусках MariaDB вы можете использовать название Maria или Aria. Поскольку это может измениться в будущих выпусках, пожалуйста, обновите ссылки в своих скриптах и автоматизации, чтобы использовать правильное название.
Что такое Aria?
Aria — это хранилище для MySQL® и MariaDB. Оно было разработано с целью стать по умолчанию транзакционным и нетранзакционным хранилищем для MariaDB и MySQL.
Разработка ведется с 2007 года, и впервые оно было анонсировано на блоге Монти здесь. Те же инженеры MySQL, которые разрабатывали сервер MySQL и хранилища MyISAM, MERGE и MEMORY, работают и над Aria.
Почему хранилище называется Aria?
Изначально хранилище называлось Maria, в честь младшей дочери Монти. MySQL был назван Монти в честь своего первенца, My, а второму ребёнку, Max, было дано имя MaxDB и дистрибутива MySQL-Max.
На практике, использование схожих имён для сервера базы данных MariaDB и хранилища Maria вызывало путаницу. Чтобы устранить эту проблему, было принято решение изменить имя. В первой половине 2010 года был проведен конкурс по переименованию Maria, и имена поступали со всего мира. Монти выбрал имя Aria из короткого списка финалистов. Крис Тули, предложивший это имя, получил в качестве приза Linux-powered System 76 Meerkat NetTop от Монти.
Дополнительную информацию можно найти в статье Имя Aria.
Цель текущей версии?
Текущая версия Aria — 1.5. Цель этого релиза — разработка отказоустойчивой альтернативы MyISAM. То есть, при перезапуске MariaDB после сбоя Aria восстанавливает все таблицы до состояния на момент начала выполнения оператора или до начала последнего LOCK TABLES оператора.
В настоящее время основная цель — поддерживать стабильность кода и исправлять все ошибки.
Цель следующей версии?
Следующая версия Aria — 2.0. Цель этого релиза — разработка полностью транзакционного хранилища с, по крайней мере, всеми основными функциями InnoDB.
В настоящее время разработка Aria 2.0 приостановлена, поскольку разработчики сосредоточены на улучшении MariaDB. Тем не менее, они заинтересованы в сотрудничестве с заинтересованными клиентами и партнёрами для добавления новых функций в Aria и, в конечном итоге, выпуске 2.0.
Вот некоторые из целей Aria 2.0:
- Соответствие ACID
- Поддержка операций подтверждения/отката
- Одновременные обновления/удаления
- Блокировка строк
- Групповая фиксация (уже в MariaDB 5.2)
- Ускоренный поиск в страницах индексов (каталог страниц)
Начиная с Aria 2.5, планируется сосредоточиться на повышении производительности.
Какова конечная цель Aria?
В долгосрочной перспективе у нас есть следующие цели для Aria:
- Разработка нового транзакционного хранилища, совместимого с ACID и Multi-Version Concurrency Control (MVCC), которое может работать как по умолчанию нетранзакционное, так и транзакционное хранилище для MariaDB и MySQL®.
- Замена MyISAM. Это возможно, так как Aria может работать и в нетранзакционном режиме, поддерживает те же форматы строк, что и MyISAM, и поддерживает или будет поддерживать все основные функции MyISAM.
- Стать по умолчанию нетранзакционным хранилищем в MariaDB (вместо MyISAM).
Цели проектирования в Aria
- Хранилище Multi-Version Concurrency Control (MVCC) и ACID.
- Необязательные нетранзакционные таблицы, которые должны быть «так же быстрыми и компактными», как таблицы MyISAM.
- Использование Aria для внутренних временных таблиц в MariaDB (вместо MyISAM).
- Все индексы должны иметь одинаковую скорость (кластеризованный индекс не входит в наши текущие планы для Aria. Если вам нужен кластеризованный индекс, используйте XtraDB).
- Работа с транзакциями «любой» длины (длинные транзакции приведут к большему объёму использования журнала).
- Поддержка отправки журналов; то есть, вы можете выполнять инкрементные резервные копии таблиц Aria, просто скопировав журналы Aria.
- Возможность копирования таблиц Aria между различными серверами Aria (при определённых ограничениях).
- Улучшенная обработка BLOB (по сравнению с MyISAM).
- Отсутствие копирования памяти или дополнительной памяти, используемой для BLOB при вставке/обновлении.
- BLOB размещаются в больших последовательных блоках — снижение фрагментации со временем.
- BLOB хранятся таким образом, что в будущем Aria может легко получить доступ к любой части BLOB с помощью одного запроса.
- Эффективное хранение на диске (то есть, низкая нагрузка на данные строк, низкая нагрузка на данные страниц и малое потерянное пространство на страницах). Примечание: для достижения этой цели всё ещё требуется дополнительная работа. Формат хранения на диске хорош, но нам нужны дополнительные кэши в памяти, чтобы обеспечить более высокий коэффициент заполнения страниц.
- Небольшой объём памяти, чтобы MariaDB + Aria подходили для настольных и встраиваемых приложений.
- Гибкое выделение памяти и масштабируемые алгоритмы для эффективного использования больших объёмов памяти, когда они доступны.
Где найти документацию и помощь по Aria?
Документация доступна на странице Aria и связанных темах. Проект поддерживается на GitHub.
Если вы хотите узнать, что происходит или принять участие в разработке Aria, вы можете подписаться на рассылку разработчиков, документации или обсуждений.
Для отчёта и проверки ошибок в Aria см. Отчёт об ошибках.
Вы обычно можете найти некоторых разработчиков Maria на нашем сервере Zulip по адресу https://mariadb.zulipchat.com или на канале IRC #maria на https://libera.chat/.
Кто разрабатывает Aria?
Команда разработчиков Aria:
Руководитель технического отдела
- Майкл «Монти» Видений — создатель MySQL и MyISAM
Основные разработчики (в алфавитном порядке)
- Гийом Бишо — эксперт по репликации, резервному копированию MyISAM и т. д.
- Кристиан Нильсен — инструменты сборки MySQL, NDB, сервер MySQL
- Олександр Белкин — кэш запросов, подзапросы, представления.
- Сергей Голубчик — архитектор сервера, полное текстовое поиск, ключи MyISAM-Merge, архитектура плагинов и т. д.
Все, кроме Гийома Бишо, работают в компании MariaDB Corporation Ab.
Политика/график выпусков Aria
Aria следует тем же критериям выпуска, что и MariaDB. Некоторые пояснения, уникальные для хранилища Aria:
- Форматы файлов индексов и данных Aria должны быть обратно совместимы, чтобы обеспечить лёгкие обновления и откат версий.
- Формат файла журнала также должен быть совместимым, но мы пока не даём никаких гарантий. В некоторых случаях при обновлении вам необходимо удалить старые файлы
aria_log.%иmaria_log.%перед перезапуском MariaDB. (До сих пор это происходило только при обновлении с MariaDB 5.1 и MariaDB 5.2).
Расширенные обязательства для Beta 1.5
- Aria теперь завершён по спецификации.
Как Aria 1.5 сравнивается с MyISAM?
Aria 1.0 был по существу отказоустойчивой нетранзакционной версией MyISAM. Aria 1.5 добавила больше одновременности (множественные вставщики) и некоторые оптимизации.
Aria поддерживает все аспекты MyISAM, за исключением отмеченных ниже. Это включает внешнюю и внутреннюю проверку/восстановление/сжатие строк, различные форматы строк, различные форматы сжатия индексов, aria_chk и т. д. После нормального завершения работы вы можете копировать файлы Aria между серверами.
Преимущества Aria по сравнению с MyISAM
- Данные и индексы отказоустойчивы.
- В случае сбоя изменения будут отменены до состояния на момент начала оператора или последнего
LOCK TABLESоператора. - Aria может воспроизвести почти всё из журнала. (Включая
CREATE,DROP,RENAME,TRUNCATEтаблиц). Поэтому резервную копию Aria можно сделать, просто скопировав журнал. Операции, которые пока не могут быть воспроизведены (ещё):- Партия
INSERTв пустую таблицу (Это включаетLOAD DATA INFILE,SELECT... INSERTиINSERT(много строк)). -
ALTER TABLE. Обратите внимание, что таблицы.frmНЕ воссоздаются!
- Партия
-
LOAD INDEXможет пропускать блоки индексов для ненужных индексов. - Поддерживает все форматы MyISAM
ROWи новыйPAGEформат, где данные хранятся в страницах (размер по умолчанию 8 КБ). - Поддержка нескольких одновременных вставщиков в одну и ту же таблицу.
- При использовании формата
PAGE(по умолчанию) данные строк кэшируются кэшем страниц. - Aria имеет модульные тесты большинства частей.
- Поддержка как отказоустойчивых (скоро транзакционных) и нетранзакционных таблиц. (Нетранзакционные таблицы не регистрируются и строки используют меньше места):
CREATE TABLE foo (...) TRANSACTIONAL=0|1 ENGINE=Aria. -
PAGE— единственный отказоустойчивый/транзакционный формат строк. -
PAGEформат должен обеспечить заметное улучшение скорости на системах с плохой кэшированием данных (например, Windows). - Начиная с MariaDB 10.5, максимальная длина ключа составляет 2000 байт по сравнению с 1000 байтами в MyISAM.
Отличия между Aria и MyISAM
- Aria использует большие (по умолчанию 1 ГБ) файлы логов.
- У Aria есть файл управления логами (
aria_log_control) и файлы логов (aria_log.%). Файлы логов могут быть автоматически очищены, когда они больше не нужны, или очищены по запросу (после резервного копирования). - Aria по умолчанию использует страницы размером 8К (MyISAM использует 1К). Это делает Aria немного быстрее при использовании ключей фиксированного размера, но медленнее при использовании ключей переменной длины (до тех пор, пока мы не добавим директорию для индексации страниц).
Недостатки Aria по сравнению с MyISAM
- Aria не поддерживает
INSERT DELAYED. - Aria не поддерживает кэширование нескольких ключей.
- Хранение очень маленьких строк (< 25 байт) неэффективно для формата
PAGE. -
Таблицы формата
MERGEне поддерживают Aria (их добавление должно быть довольно простым). - Страницы данных Aria в блочном формате имеют издержки 10 байт/страницу и 5 байт/строку. Поддержка транзакций и нескольких конкурирующих писателей потребует дополнительных издержек в 7 байт для новых строк, 14 байт для удаленных строк и 0 байт для старых сжатых строк.
- Нет внешней блокировки (MyISAM имеет внешнюю блокировку, но эта функция используется редко).
- Aria использует один размер страницы для индексов и данных (определяется при первом использовании Aria). MyISAM поддерживает разные размеры страниц для каждого индекса.
- Небольшие издержки (15 байт) на страницу индекса.
- Aria не поддерживает индексы по виртуальным полям.
Различия между MariaDB 5.1 выпуском и обычным выпуском MySQL-5.1?
См.:
Почему вы используете ключевое слово TRANSACTIONAL сейчас, когда Aria ещё не транзакционная?
На текущей стадии разработки таблицы Aria, созданные с помощью TRANSACTIONAL=1, обладают отказоустойчивостью и атомарностью, но не транзакционностью, так как изменения в таблицах Aria не могут быть отменены с помощью команды ROLLBACK. Поскольку мы планировали сделать таблицы Aria полностью транзакционными, мы решили с самого начала использовать ключевое слово TRANSACTIONAL, чтобы приложениям не пришлось их изменять впоследствии.
Какие известные проблемы есть у MySQL-5.1-Maria выпуска?
- См.
KNOWN_BUGS.txtдля открытых/проектировочных ошибок. - См. jira.mariadb.org для вновь обнаруженных ошибок. Пожалуйста, сообщите о любых ошибках, которые вы не найдёте здесь!
- Если в коде восстановления Aria или в коде, генерирующем логи, есть ошибка, или если логи повреждены, mysqld может не запуститься, так как Aria не может выполнить логи при запуске.
- Кэш запросов и одновременные вставки, использующие формат строк страниц, имеют ошибку, пожалуйста, отключите кэш запросов при использовании формата страниц строк и MDEV-6817 не завершено
Если Aria не запускается или у вас есть невосстановимая таблица (не должно происходить):
- Удалите файлы
aria_log.%из каталога данных. - Перезапустите
mysqldи выполните CHECK TABLE, REPAIR TABLE или mariadb-check для ваших таблиц Aria.
В качестве альтернативы,
- Удалите логи и выполните aria_chk для ваших файлов
*.MAI.
Что изменится в последующих основных выпусках Aria?
Выражение LOCK TABLES не будет запускать отказоустойчивый сегмент. Используйте BEGIN и COMMIT вместо этого.
Для обеспечения будущей безопасности, вы можете сделать так:
BEGIN; LOCK TABLES .... UNLOCK TABLES; COMMIT;
И позже вы можете просто удалить выражения LOCK TABLES и UNLOCK TABLES.
Как создать таблицу Aria, похожую на MyISAM (нетранзакционную)?
Пример:
CREATE TABLE t1 (a int) ROW_FORMAT=FIXED TRANSACTIONAL=0 PAGE_CHECKSUM=0; CREATE TABLE t2 (a int) ROW_FORMAT=DYNAMIC TRANSACTIONAL=0 PAGE_CHECKSUM=0; SHOW CREATE TABLE t1; SHOW CREATE TABLE t2;
Обратите внимание, что строки не кэшируются в кэше страниц для форматов FIXED или DYNAMIC. Если вы хотите, чтобы данные кэшировались (чего MyISAM не поддерживает), используйте ROW_FORMAT=PAGE:
CREATE TABLE t3 (a int) ROW_FORMAT=PAGE TRANSACTIONAL=0 PAGE_CHECKSUM=0; SHOW CREATE TABLE t3;
Вы также можете использовать PAGE_CHECKSUM=1 для нетранзакционных таблиц; это добавляет контрольные суммы страниц ко всем страницам индексов. Также добавляет контрольную сумму к страницам данных, если вы используете ROW_FORMAT=PAGE.
Возможны различия в скорости между MyISAM и Aria из-за разных размеров страниц. Вы можете изменить размер страницы для MariaDB с помощью --aria-block-size=\, где \# равно 1024, 2048, 4096, 8192, 16384 или 32768.
Обратите внимание, что при изменении размера страницы необходимо сохранить все старые таблицы в текстовом формате (с помощью mariadb-dump) и удалить старые логи и файлы Aria:
# rm datadir/aria_log*
Каковы преимущества/недостатки нового формата PAGE по сравнению со старыми форматами строк MyISAM (DYNAMIC и FIXED)
Форматы MyISAM DYNAMIC и FIXED чрезвычайно простые и имеют очень небольшой объем занимаемого места, поэтому они трудно превзойти в случае простого сканирования неизменённых данных. Однако формат DYNAMIC становится значительно хуже со временем, если вы часто обновляете строку таким образом, что увеличивает её размер.
Преимущества формата PAGE (по сравнению с DYNAMIC или FIXED) для нетранзакционных таблиц:
- Он кэшируется в кэше страниц, что обеспечивает лучшую производительность при случайных операциях (так как используется меньше системных вызовов).
- Он не фрагментируется так легко, как формат
DYNAMICво время выполнения инструкцийUPDATE. Максимальное количество фрагментов очень низкое. - Код легко расширить для чтения только необходимых столбцов (например, для пропуска чтения BLOB).
- Более быстрые обновления (по сравнению с
DYNAMIC).
Недостатки:
- Незначительные издержки на хранение (должны быть заметны только для очень маленьких строк).
- Более медленное сканирование всей таблицы.
- При использовании
row_format=PAGE, (по умолчанию), Aria сначала записывает строку, затем ключи, в этот момент происходит проверка на дублирование ключей. Это делает форматPAGEмедленнее, чемDYNAMIC(или MyISAM), если есть много дублирующихся ключей из-за издержек на запись и удаление строки. Если это проблема, вы можете использоватьrow_format=DYNAMICдля получения такого же поведения, как у MyISAM.
Как правильно скопировать таблицу Aria из одного места в другое?
Таблица Aria состоит из 3 файлов:
XXX.frm : The definition for the table, used by MySQL. XXX.MYI : Aria internal information about the structure of the data and index and data for all indexes. XXX.MAD : The data.
Безопасно копировать все файлы Aria в другой каталог или экземпляр MariaDB, если выполняется хотя бы одно из следующих условий:
- Если вы корректно завершили работу сервера MariaDB с помощью mariadb-admin shutdown, так что Aria ничего не нужно восстанавливать при запуске.
или
- Если вы выполнили инструкцию FLUSH TABLES и не обращались к таблице через SQL с этого момента до копирования таблиц.
Кроме того, для транзакционных таблиц необходимо соблюдать следующее правило:
Вы не можете скопировать таблицу в местоположение внутри того же сервера MariaDB, если новая таблица существовала ранее и новая таблица всё ещё активна в журнале восстановления Aria (то есть, Aria может потребоваться получить доступ к старым данным во время восстановления). Если вы не уверены, существовала ли старая таблица с таким именем, запустите aria_chk --zerofill для таблицы перед использованием.
После копирования транзакционной таблицы и перед использованием таблицы рекомендуется выполнить следующую команду:
$ aria_chk --zerofill table_name
Это перезапишет все ссылки на логи (LSN), все транзакционные ссылки (TRN) и все неиспользуемое пространство нулями. Также помечает таблицу как «перемещаемую». Дополнительное преимущество zerofill заключается в том, что файлы Aria будут сжиматься лучше. Никакие реальные данные никогда не удаляются в ходе zerofill.
Aria автоматически обнаружит, если вы скопировали таблицу из другой системы, и выполнит «zerofill» при первом доступе к таблице, если она не была помечена как «перемещаемая». Причина использования aria_chk --zerofill заключается в том, что вы избегаете задержки на сервере MariaDB при первом доступе к таблице.
Обратите внимание, что это автоматическое обнаружение не работает при копировании таблиц внутри одного и того же сервера MariaDB!
Когда безопасно удалить старые файлы логов?
Если вы хотите удалить файлы логов Aria (aria_log.%) с помощью rm или удалить их, сначала необходимо корректно выключить MariaDB (например, с помощью mariadb-admin shutdown) перед удалением старых файлов.
Те же правила применяются при обновлении MariaDB; при обновлении сначала необходимо корректно выключить MariaDB, а затем выполнить обновление. Это позволит удалить старые файлы логов, если между выпусками есть несовместимые проблемы.
Не удаляйте файл aria_log_control! Это не файл логов, а файл, содержащий информацию о настройке Aria (текущий идентификатор транзакции, уникальный идентификатор, номер следующего файла журнала и т. д.).
Если вы это сделаете, Aria сгенерирует новый файл aria_log_control при запуске и посчитает все старые файлы Aria как файлы, перемещённые из другой системы. Это означает, что они должны быть «zerofilled» перед использованием. Это произойдёт автоматически при следующем доступе к файлам Aria, что может занять некоторое время, если файлы большие.
В этом случае в файле mysqld.err вы увидите что-то вроде этого:
[Note] Zerofilling moved table: '.\database\xxxx'
В ходе zerofilling никакие важные данные не удаляются.
Как решить ошибку Missing valid id?
См. Файлы журналов 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-faq/