База данных - процесс обновления SQL оператора

база данных

Это 30-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

Оператор обновления SQL

Весь процесс обновления SQL в основном такой же, как и в операторе запроса. Просто добавил две части журнала повторов [журнал повторов] и binlog [журнал архивов] на этапе исполнителя.

redo log

Зависит от движка InnoDB, используется для обеспечения возможности crash_safe. Используется технология WAL [write-Ahead Logging], то есть сначала пишется лог, а потом уже диск

Сходства и различия между журналом повторов и бинлогом заключаются в следующем:

redo log binlog
Специально для движка InnoDB Серверный уровень, каждый механизм хранения может использовать
Физический журнал — что делает эта страница данных Логический лог - исходная логика оператора
Циклическая запись, фиксированное пространство используется Добавить запись, данные не будут перезаписаны

конкретный процесс

No
Yes
строка, которая будет получена командой
Находится ли страница данных в памяти
читать с диска в память
возвращать данные строки
выполнять вычисления над строковыми данными
вызвать движок, чтобы вернуть новую строку
Новая строка обновляется в памяти
Новая строка сохраняется в журнале повторов, а состояние изменяется на «подготовить».
написать в бинлог
Зафиксируйте транзакцию, журнал повторов станет состоянием фиксации

двухэтапная фиксация

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

Если не двухфазный коммит

  1. После записи журнала повторов при записи бинлога происходит аварийный перезапуск. На данный момент журнал повторов уже содержит обновленное состояние, а журнал bin по-прежнему имеет исходное значение. Благодаря функции журнала повторного выполнения сбоя_безопасности данные можно восстановить. Но как только вы воспользуетесь binlog для восстановления временной библиотеки, вы обнаружите, что значение отличается от исходной библиотеки.
  2. После записи бинлога при записи журнала повторов происходит аварийный перезапуск. В настоящее время журнал bin является исходным значением и остается исходным значением после восстановления после сбоя. Однако в binlog есть новое значение, и после восстановления с помощью binlog появится еще одна транзакция, которая отличается от исходного значения базы данных.

Если двухэтапный коммит

После записи журнала повторов бинарный журнал аварийно перезапускается при записи. В это время журнал повторов находится в состоянии подготовки, а бинлог снова дает сбой, поэтому сама транзакция будет отброшена к исходному значению. Библиотека, восстановленная с помощью binlog, также является исходным значением, поэтому логика непротиворечива.

redo_log — для параметра innodb_flush_log_at_trx_commit установлено значение 1 — это означает, что журнал повторов транзакции сохраняется напрямую на диск

binlog — для параметра sync_binlog установлено значение 1 — это означает, что binlog каждой транзакции сохраняется на диск.

Оператор обновления SQL

Весь процесс обновления SQL в основном такой же, как и в операторе запроса. Просто добавил две части журнала повторов [журнал повторов] и binlog [журнал архивов] на этапе исполнителя.

redo log

Зависит от движка InnoDB, используется для обеспечения возможности crash_safe. Используется технология WAL [write-Ahead Logging], то есть сначала пишется лог, а потом уже диск

Сходства и различия между журналом повторов и бинлогом заключаются в следующем:

redo log binlog
Специально для движка InnoDB Серверный уровень, каждый механизм хранения может использовать
Физический журнал — что делает эта страница данных Логический лог - исходная логика оператора
Циклическая запись, исчерпан фиксированный объем памяти Добавить запись, данные не будут перезаписаны
### конкретный процесс
No
Yes
строка, которая будет получена командой
Находится ли страница данных в памяти
читать с диска в память
возвращать данные строки
выполнять вычисления над строковыми данными
вызвать движок, чтобы вернуть новую строку
Новая строка обновляется в памяти
Новая строка сохраняется в журнале повторов, а состояние изменяется на «подготовить».
написать в бинлог
Зафиксируйте транзакцию, журнал повторов станет состоянием фиксации

двухэтапная фиксация

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

Если не двухфазный коммит

  1. После записи журнала повторов при записи бинлога происходит аварийный перезапуск. На данный момент журнал повторов уже содержит обновленное состояние, а журнал bin по-прежнему имеет исходное значение. Благодаря функции журнала повторного выполнения сбоя_безопасности данные можно восстановить. Но как только вы воспользуетесь binlog для восстановления временной библиотеки, вы обнаружите, что значение отличается от исходной библиотеки.
  2. После записи бинлога при записи журнала повторов происходит аварийный перезапуск. В настоящее время журнал bin является исходным значением и остается исходным значением после восстановления после сбоя. Однако в binlog есть новое значение, и после восстановления с помощью binlog появится еще одна транзакция, которая отличается от исходного значения базы данных.

Если двухэтапный коммит

После записи журнала повторов бинарный журнал аварийно перезапускается при записи. В это время журнал повторов находится в состоянии подготовки, а бинлог снова дает сбой, поэтому сама транзакция будет отброшена к исходному значению. Библиотека, восстановленная с помощью binlog, также является исходным значением, поэтому логика непротиворечива.

redo_log — для параметра innodb_flush_log_at_trx_commit установлено значение 1 — это означает, что журнал повторов транзакции сохраняется напрямую на диск

binlog — для параметра sync_binlog установлено значение 1 — это означает, что binlog каждой транзакции сохраняется на диск.