Spec-Zone.ru › MariaDB

Группа коммитов Aria

С MariaDB 5.2 движок хранения Aria включает функцию группировки коммитов для ускорения конкурирующих потоков, выполняющих множество вставок в одни и те же или разные таблицы Aria.

По умолчанию группировка коммитов для Aria выключена. Она управляется системными переменными aria_group_commit и aria_group_commit_interval.

Информация о настройке переменных сервера доступна на странице Системные переменные сервера.

Терминология

  • Запись commit — это flush of logs, за которой следует синхронизация.
  • sent to disk означает запись на диск, но без синхронизации sync(),
  • flushed означает отправку на диск и синхронизацию sync().
  • LSN означает серийный номер журнала. Он относится к позиции в журнале транзакций.

Логика без группировки коммитов (aria_group_commit="none")

Поток, который первым начал commit, выполняет фактическую запись журналов. Другие потоки устанавливают новую цель (LSN) следующего прохода (если это максимум) и ожидают окончания прохода или просто ожидают окончания прохода.

Это означает, что запись (запись журналов + синхронизация) сохранит все данные для всех потоков/транзакций, которые ожидали с последней записи.

Если включена жёсткая группировка коммитов (aria_group_commit="hard")

Если жёсткий коммит и aria_group_commit_interval=0

Первый поток отправляет все изменённые буферы на диск. Это повторяется до тех пор, пока не появятся новые LSN. Этот процесс не может продолжаться вечно, так как у нас ограниченное количество потоков, и они будут ждать синхронизации данных.

Псевдокод:

do
   send changed buffers to disk
 while new_goal
sync

Если жёсткий коммит и aria_group_commit_interval > 0

Если прошло меньше microсекунд с момента последней синхронизации, то после отправки буферов на диск ожидается, пока не пройдёт заданное число microсекунд с момента последней синхронизации, выполняется sync() и возвращается значение. Это гарантирует, что если мы вызываем sync() нечасто, то не будет ожидания.

Если включена мягкая группировка коммитов (aria_group_commit="soft")

Обратите внимание, что мягкая группировка коммитов следует использовать только в том случае, если вы можете позволить себе потерять несколько строк, если ваш компьютер внезапно отключится (например, при отключении питания).

Работает так же, как в non group commit', но поток не выполняет реальной синхронизации sync(). Если aria_group_commit_interval не равно нулю, синхронизация sync() будет выполнена сервисным потоком с заданной скоростью при необходимости (появление новых LSN). Если aria_group_commit_interval равно нулю, вызовов sync() не будет.

Код

Код для этого можно найти в storage/maria/ma_loghandler.c::translog_flush()

Содержание, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержание не проходит предварительной проверки со стороны MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/aria-group-commit/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API