Серия сотен вопросов Mysql: для чего используется журнал повторов?

MySQL

Серия сотен вопросов Mysql: для чего используется журнал повторов?

вопросисточник журнала повторовПочему информация журнала повторов не теряется при сбое?redo log bufferCheckpointСуммироватьсерия статей

вопрос

  • Зачем создавать журнал повторов?
  • Что такое буфер журнала повторов?
  • Что такое КПП?

источник журнала повторов

Внедрение буферного пула действительно повысило эффективность чтения и записи данных. Конечно, это также принесло проблемы.
Такие столбцы, как:
Баланс моего счета составляет 200 юаней, и компания перечислила 5000 юаней в день выплаты зарплаты.

update account set price = 5200 where id = 24

Мы знаем, что после выполнения обновления данные просто помещаются вBuffer Pool, старые данные все еще находятся в файле на диске. Но, к сожалению, в это время сервер был выключен, и данные в памяти внезапно исчезли. Это как сделать? Зарплаты нет.
Конечно, Mysql не допускает подобных вещей.持久化能力. Другими словами, для описанной выше ситуации Mysql должен гарантировать, что в случае успешного выполнения оператора обновления, последующего сбоя питания, сбоя и т. д. данные по-прежнему будут измененными данными после перезапуска сервера.
чтобы сделать этоredo logродившийся. Можно сказатьredo logПредоставляет постоянные возможности для InnoDB.
С журналом повторов описанный выше процесс обновления становится следующим:

  1. Измените информацию на соответствующей странице буферного пула. (Предполагая, что страница уже существует в буферном пуле)
  2. Добавить новую запись журнала повторов: изменить баланс аккаунта с id=24 на 5200. (Конечно, реальная ситуация может быть посложнее, типа записи индексов и прочих модификаций. Кстати, в Mysql 5.7.21 существует целых 53 типа журналов повторов)
  3. вернуть результат обновления

Таким образом, даже если данные в пуле буферов не сбрасываются на диск после завершения модификации, измененное содержимое все равно можно прочитать из журнала повторов при перезапуске базы данных.重新再做一遍同样的操作(redo). Гарантируется, что данные, потерянные в буферном пуле, могут быть восстановлены.

Почему информация журнала повторов не теряется при сбое?

Журнал повторов хранится на диске.

  • innodb_log_group_home_dir Указывает каталог, в котором хранятся файлы журнала повторов.
  • innodb_log_file_size указывает размер каждого файла журнала повторов.
  • innodb_log_files_in_group указывает количество журналов повторного выполнения.

Пространство, которое может хранить журнал повторов:innodb_log_file_size × innodb_log_files_in_group

Итак, возникает вопрос: мы знаем, что буферный пул повышает производительность за счет сокращения дисковых операций. Теперь, чтобы обеспечить долговечность, запись в журнал повторов по-прежнему требует операций с диском. Разве это не пустая трата усилий?
Журнал повторов неизбежно выполняет дисковые операции, но с буферным пулом磁盘随机写入По сравнению с дисковой операцией журнал повторов имеет несколько преимуществ:1. 引入redo log buffer,按组写入,不是一条条写。 2. 磁盘为顺序写入。
Конечно, также можно помнить, что производительность операций с диском журнала повторного выполнения намного лучше, чем у пула буферов.

redo log buffer

Копируя принцип буферного пула, журнал повторов не записывается напрямую на диск, журнал повторов сначала записывается в буфер журнала повторов, а затем записывается на диск. Тогда снова возникает проблема, как сделать так, чтобы информация в буфере журнала повторов не была потеряна при его сбое?
Время сброса буфера журнала повторов:

  • Когда места в буфере журнала повторов недостаточно.
  • когда транзакция фиксируется
  • Фоновая нить постоянно чистится
  • Когда служба нормально закрывается
  • checkpointкогда

(Вы можете сравнить время очистки буферного пула, чтобы увидеть, в чем разница между ними и что такое же)
С точки зрения времени очистки, время очистки буфера журнала повторного выполнения происходит чаще, особенно事务提交的时候Это гарантирует, что журнал повторов совершенных транзакций будет храниться на диске.
innodb_flush_log_at_trx_commit 取值范围 0,1,2
Эта переменная используется для управления сбросом буфера журнала повторов на диск при фиксации транзакции.
0: указывает, что фиксация транзакции не будет синхронизировать журнал повторов с диском.
1: значение по умолчанию, журнал повторов синхронизируется с диском каждый раз, когда транзакция фиксируется.
2: Журнал повторов записывается в буфер операционной системы каждый раз, когда транзакция фиксируется, но фактически не записывается на диск.
Все три подхода имеют свои плюсы и минусы:
0: Хотя按组批量顺序写入Диски повысили эффективность дисковых операций, но, в конце концов, небольшая потеря производительности все же есть.Если переменная установлена ​​в 0, дисковые операции полностью избегаются, когда транзакция фиксируется, а фоновый поток остается для обновления данных. диск. Это может повысить производительность в большом количестве часто изменяемых бизнес-сценариев, но также может привести к риску потери данных из-за сбоя сервера.
1: Производительность не так хороша, как 0, но данные зафиксированной транзакции не теряются.
2: Производительность находится в диапазоне от 0 до 1. Можно гарантировать, что если операционная система не зависнет и зависнет база данных, можно гарантировать устойчивость транзакции, но если операционная система тоже зависнет, данные будут потеряны.
(Выберите подходящий в соответствии с бизнес-сценарием и конфигурацией сервераinnodb_flush_log_at_trx_commitтакже улучшает производительность)

Checkpoint

Как упоминалось выше, пространство журнала повторов ограничено.Например, если мы определим размер каждого файла как 1G и количество файлов как 2, то журнал повторов может хранить до 2G содержимого. Так что будет ситуация: модификаций много, а продолжительность транзакции очень большая(所谓的大事务), это приведет к заполнению журнала повторов и невозможности записи.
Как вообще работает журнал повторов?
журнал повторов представляет собой кольцо, через擦除没用的信息Чтобы добиться повторного использования пространства. Конкретный процесс реализации относительно сложен. Здесь я представлю только основные идеи. Друзья, которые заинтересованы в конкретной реализации, могут прочитать掘金小册:MysSQL是怎么运行的 第22章
Что такое бесполезная информация?
Мы знаем, что журнал повторов предназначен для предотвращения потери грязных страниц в буферном пуле.Если грязные страницы буферного пула сбрасываются на диск во время работы системы, то записи, соответствующие журналу повторов, бесполезны. однаждыcheckpoint 的过程Это процесс сброса грязных страниц на диск, чтобы они стали чистыми, а затем пометка записей в журнале повторов, которые можно перезаписать.

Суммировать

  • Журнал повторов используется для обеспечения постоянства InnoDB.
  • журнал повторов сохраняется в файле на диске, но через按组,顺序写入способ повысить эффективность дискового ввода-вывода
  • Буфер журнала повторов сбрасывается на диск чаще. в состоянии пройтиinnodb_flush_log_at_trx_commitОпределяет, сбрасывается ли фиксация транзакции.
  • Из-за ограниченного пространства журнала повторов информация о пространстве, которое может быть охвачено, снова и снова помечается контрольной точкой.

серия статей

Mysql 100 Questions Series: Каковы методы работы Join?
Серия вопросов Mysql 100: что такое буферный пул?

Лайк, поддержка, прошу обратить внимание на номер паблика