Подробное объяснение: четыре характеристики ACID транзакций в MySQL.
Подробное объяснение: четыре характеристики ACID транзакций в MySQL.
Мой публичный аккаунт: Грузчик кирпичей на Гаитянской 2-й дороге
введение
В MySQL,Характеристики ACID (амарность, согласованность, изоляция, долговечность) являются четырьмя столпами обеспечения точности и надежности данных. Вместе эти принципы составляют краеугольный камень управления делами.,Это гарантирует, что наши данные не просто хранятся,Это безопасно, точно и надежно. В этой статье вы просто и подробно изучите принципы ACID в MySQL.,показать, как они работают вместе,Обеспечить работоспособную работу базы данных.
Введение в свойства ACID
атомарность
дела рассматриваются как неделимая наименьшая единица,он либо полностью выполняется,Или не делайте этого вообще.
Последовательность
последовательность Гарантированодела Выполнение базы данных из одного согласованного состояния в другое согласованное состояние.。
Изоляция
Изоляцияозначает, когда несколькодела При одновременной работе с базой данных,Каждое дело независимо,Работа одних дел не повлияет на другие дела.
Долговечность
Долговечность означает, что как только дело будет совершено,Его изменения в базе данных являются постоянными.,Даже если система выйдет из строя, она не будет потеряна.
Подробное объяснение атомарности
атомарность(Atomicity)Определение и значение
Атомарность, как одна из основных характеристик обработки транзакций, гарантирует, что все операции в транзакции либо завершены, либо не выполнены. В многошаговой транзакции, если какой-либо шаг завершается неудачей, вся транзакция откатывается к начальному состоянию, как если бы транзакция никогда не выполнялась.
Пример атомарности транзакции
Предположим, что в транзакции банковского перевода вам необходимо перевести средства со счета А на счет Б.
Эта транзакция состоит из двух шагов:
Шаг 1. Вычтите соответствующую сумму со счета А.
Шаг 2: Добавьте соответствующую сумму на счет Б.
Атомарность гарантирует, что обе операции либо завершатся успешно, либо потерпят неудачу одновременно. Если при добавлении суммы на счет Б после списания суммы произойдет ошибка, вся транзакция будет отменена, а сумма на счете А будет восстановлена.
MySQLреализовано вделаатомарностьмеханизм(Redo Log и Undo Log)
MySQL достигает атомарности транзакций за счет использования файлов журналов.
Очистка журнала
Когда транзакция начнется, InnoDB присвоит транзакции уникальный идентификатор и начнет записывать журналы повторов и журналы отката. По мере выполнения дела все изменения данных сначала будут записываться в буфер журнала повторов, а затем в соответствующее время эти изменения будут сброшены в файл повторов на диске. журналсередина. Если система выйдет из строя,Журнал повторов будет использоваться для повтора дел.,Убедитесь, что изменения дела применены к базе данных.
Redo Log
Если во время выполнения происходит ошибка или сбой системы, если изменения данных были записаны в буфер журнала повторов, эти изменения будут сброшены в буфер журнала повторов в соответствующее время (при восстановлении системы). журналасередина。
Undo Log
Если во время выполнения дела произошла ошибка или сбой системы,и не могу пройти**Redo Log** Гарантия целостности данных,MySQL будет использовать журнал для отката всех операций в делах,Убедитесь, что атомарность базы данных не нарушена.
Подробное объяснение консистенции
Конкретное значение последовательности
последовательностьв базе данныхделауправлятьсерединаотносится кдела Переместить базу данных из одного согласованного состояния в другое согласованное состояние.。это означаетдела Результаты выполнения должны соответствовать всем заранее заданным правилам.иограничение,Включает внутренние правила для базы данных.(Например, первичный ключ、ограничения внешнего ключа、ограничения уникальности и т. д.) и бизнес-правила уровня приложения.
последовательностьгарантировал, что данныеточныйсексиэффективныйсекс,Предотвращает конфликты данных и логические ошибки.
Пример согласованности
В случае банковского перевода,Предположим, что пользователь A и пользователь B изначально тратят по 100 долларов каждый.,Пользователю А необходимо перевести 100 долларов США пользователю Б.
Эта операция включает в себя два шага: списание 100 долларов США со счета пользователя А и добавление 100 долларов США на счет пользователя Б.
Последовательность гарантирует, что общая сумма на обоих счетах останется одинаковой на протяжении всей транзакции. Если транзакция не удалась на каком-либо этапе, система откатит транзакцию, чтобы гарантировать, что согласованность сумм на счете не будет нарушена.
Стратегия MySQL для обеспечения согласованности данных
MySQL обеспечивает согласованность данных с помощью нескольких механизмов:
Ограничения:MySQLпозволятьопределить различныеограничение(Например, первичный ключограничение、ограничения внешнего ключа、толькоограничениеждать),Эти ограничения действуют непосредственно на таблицу данных.,обеспечить данныечестностьипоследовательность。
Уровни изоляции транзакций:MySQLпредоставлять различныеделауровень изоляции,включать Читать незафиксированные、Чтение зафиксировано、Повторяемое чтениеи Сериализуемый。по разумному выборуделауровень изоляции,Может эффективно поддерживать данные в параллельной средепоследовательность。
Запирающие механизмы:MySQLИспользуйте механизмы блокировки для управления одновременным доступом к данным.,включатьблокировка уровня строки(Row-Level блокировки), блокировки уровня таблицы (Table замки) и т.д.,чтобы обеспечить параллелизмделасерединаданныепоследовательностьичестность。
атомарностьоперация (Atomic Operations):MySQLпроходитьатомарность Обеспечение эксплуатацииделасередина Все операции либо успешны,или все провалится,чтобы сохранить данныепоследовательность。
Подробное объяснение долговечности
Определение и значение настойчивости
Долговечность означает, что после фиксации транзакции ее изменения в базе данных должны быть постоянными, даже если произойдет сбой системы или другой сбой.
Долговечность обеспечивает надежность и стабильность данных.,Это одна из основных функций системы управления базами данных (СУБД). Для любого бизнеса критично,Сохранение данных имеет важное значение,Потому что это обеспечивает безопасность и согласованность данных.,Данные не теряются даже в случае сбоя в системе.
Технология обеспечения сохранности данных в MySQL
1. Файлы журналов
Журнал повтора:InnoDBМеханизм хранения использует журналы повторного выполнения, чтобы гарантироватьделадлительныйсекс。когдаделакогда отправлено,Все изменения, внесенные делами, будут зафиксированы в журнале повторов. Даже если база данных выйдет из строя,Журналы повторов также можно использовать для воспроизведения этих изменений после перезапуска.,Обеспечьте долговечность данных.
Двоичный журнал:MySQLСервер использует двоичные журналы для записи всех операций, изменяющих данные базы данных.,нравитьсяINSERT、UPDATE、DELETEждать。Двоичные журналы важны не только для восстановления данных.,Слишкомкопироватьиинкрементное резервное копированиеоснова。
2. Стратегия резервного копирования
Полное резервное копирование:Выполняйте регулярное полное резервное копирование всей базы данных.,Чтобы обеспечить долговечность и возможность восстановления данных.
инкрементное резервное копирование:Резервное копирование только тех данных, которые изменились с момента последнего резервного копирования.。и Полное резервное Использование в сочетании с копированием позволяет эффективно сократить время восстановления данных и требования к их хранению.
Восстановление на определенный момент времени (PITR):Реализовано с использованием двоичных журналов.,Возможность восстановить базу данных до ее состояния на определенный момент времени.,Идеально подходит для устранения ошибок в работе или повреждения данных.
Изоляция
Определение изоляции
Изоляция гарантирует, что одновременно выполняемые дела изолированы, то есть выполнение одних дел не будет мешать другим делам.
Эта функция реализована через уровень изоляции дела.,Различные уровни изоляции могут решить разные проблемы параллелизма.,Но в то же время это будет такжесексспособныйипоследовательностьпойти на компромисс между。
Роль и уровень изоляции
Основная роль изоляции заключается в контроле видимости между транзакциями, то есть влияния одной транзакции на другие транзакции. Стандарт SQL определяет четыре уровня изоляции:
Читать незафиксированные:самый низкийуровень изоляции,Позволяет делам считывать изменения, которые не были совершены другими делами. Это может привести к «грязному чтению».,То есть считываются данные, которые не были предоставлены другими делами.
Чтение зафиксировано:позволятьдела Читайте и читайте только то, что использовалось другимидела Зафиксировать изменения。Этого уровня можно избежатьгрязное читаю, но все же можно встретить "неповторяющееся чтение”вопрос,то есть в тех же делах,Чтение одного и того же набора данных несколько раз может дать разные результаты.
Повторяемое чтение:Убедитесь, что то же самоеделасередина При чтении одного и того же набора данных несколько раз,Результаты согласуются,избегалнеповторяющееся проблема с чтением. Однако он может столкнуться с «фантомным чтение”,т. е. когда другие дела вставляют или удаляют строку,Последующие запросы текущих дел «увидят» новые строки.
Сериализуемый:самый высокийуровень изоляции,Принуждая дела к серийному исполнению,Избежал проблем грязного чтения, неповторяющегося чтения, фантомного чтения. Это обеспечивает самую надежную гарантию согласованности,Но накладные расходы на производительность также являются самыми большими.
Реализация и применение уровня изоляции в MySQL
MySQL по умолчанию использует уровень изоляции «Повторяемое чтение», который отличается от стандарта SQL (уровень изоляции по умолчанию стандарта SQL — «фиксация чтения»). MySQL позволяет избежать проблемы фантомного чтения с помощью механизма управления многоверсионным параллелизмом (MVCC) на уровне «повторяемого чтения», что обычно возможно только на уровне «сериализации» в других системах баз данных.
В MySQL вы можете просмотреть или установить уровень изоляции транзакции с помощью следующих команд:
Язык кода:javascript
копировать
SHOW VARIABLES LIKE 'transaction_isolation';
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Как изоляция решает проблемы в параллельных транзакциях
грязное чтение:проходить“прочитать фиксацию”Избегайте уровней и выше,Потому что для других дел видны только совершенные изменения.
неповторяющееся чтение:проходить“повторяемое чтение”Избегайте уровней и выше,потому что Гарантированов том жедела При чтении одного и того же набора данных несколько раз в течениепоследовательность。
фантомное чтение:В большинстве систем баз данныхсередина,Избегается уровнем «сериализации»,Потому что дела выполняются поочередно,Проблем с параллелизмом нет. И в MySQL,Частичного фантомного чтения можно избежать с помощью механизма MVCC даже на уровне «повторяемого чтения».
уровень изоляции Выбор должен быть в данныхпоследовательностьнуждатьсяисистемасексспособныйпойти на компромисс между。вышеуровень изоляции Может предоставить более достоверные данныепоследовательностьгарантировать,Но это может снизить производительность параллелизма системы. поэтому,Выбор подходящего уровня изоляции должен определяться на основе конкретного сценария приложения и требований к производительности.