Механизм блокировки базы данных MySQL

задняя часть MySQL

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

классификация замков

①, разделенные по операциям: блокировка DML, блокировка DDL
②, в зависимости от степени детализации блокировок: блокировки на уровне таблицы, блокировки на уровне строк, блокировки на уровне страниц
3. Разделенные по уровню блокировки: общая блокировка, эксклюзивная блокировка
④ В зависимости от метода блокировки: автоматическая блокировка, блокировка дисплея.
⑤, разделенное по использованию: оптимистичная блокировка, пессимистическая блокировка

оптимистическая блокировка и пессимистическая блокировка

Оптимистичный контроль параллелизма и пессимистический контроль параллелизма являются основными методами, используемыми для управления параллелизмом. Оптимистическая блокировка и пессимистическая блокировка применяются не только в реляционных базах данных, но также имеют связанные концепции в Hibernate, Memcache и т. д.

Пессимистическая блокировка: также известная как управление пессимистическим параллелизмом, Pessimistic Concurrency Controller, сокращенно PCC. Пессимистическая блокировка относится к сохранению данных в заблокированном состоянии во время обработки данных, что обычно реализуется с использованием механизма блокировки базы данных. Обратите внимание, чтобы использовать пессимистическую блокировку в MySQL, вы должны отключить автофиксацию MySQL, установив autocommit=0. MySQL использует режим автоматической фиксации по умолчанию, то есть, если вы выполняете операцию обновления, MySQL автоматически отправит результат.

//0.开始事务
begin;/begin work;/start transaction; (三者选一就可
//1.查询出商品信息
select status from t_goods where id=1 for update;
//2.根据商品信息生成订单
insert into t_orders (id,goods_id) values (null,1);
//3.修改商品status为2
update t_goods set status=2;
//4.提交事务
commit;/commit work;

В этом примере метод select...for update используется для блокировки данных, то есть монопольная блокировка включена.

Преимущества и недостатки пессимистичных блокировок: управление пессимистическим параллелизмом (пессимистические блокировки) использует консервативную стратегию «сначала взять блокировки, а затем разделить их», что обеспечивает надежную гарантию обработки данных. Однако с точки зрения эффективности механизм блокировки будет генерировать дополнительные накладные расходы и увеличивать вероятность взаимоблокировок.

Оптимистическая блокировка: по сравнению с пессимистической блокировкой оптимистическая блокировка реализуется путем записи версий данных. Добавьте идентификатор версии к данным. При чтении данных считывайте идентификатор версии вместе. Если данные не обновляются один раз, обновите идентификатор версии.

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

Механизм блокировки общего механизма хранения MySQL

BDB: поддерживает блокировки на уровне страницы и блокировки на уровне таблицы, по умолчанию используются блокировки на уровне страницы.
InnoDB: поддерживает блокировки на уровне строк и таблиц, по умолчанию используются блокировки на уровне строк.
MyISAM и память: оба механизма хранения используют блокировки на уровне таблицы.

Эксклюзивные блокировки и общие блокировки в MySQL

Эксклюзивная блокировка (эксклюзивная блокировка) Эксклюзивная блокировка также называется блокировкой записи.Если транзакция Т добавляет монопольную блокировку к А, никакая другая транзакция не может добавить блокировку любого типа к А. Транзакции, которым предоставлены монопольные блокировки, могут как читать, так и записывать данные.

Использование: ВЫБРАТЬ… ДЛЯ ОБНОВЛЕНИЯ

Совместно используемые блокировки (share locks) Совместно используемые блокировки также называются блокировками чтения.Если транзакция T добавляет разделяемую блокировку к A, другие транзакции могут добавлять разделяемые блокировки только к A, но не другие блокировки. Транзакции, которым предоставлены общие блокировки, могут только читать данные, но не записывать данные.

Использование: ВЫБРАТЬ… ЗАКРЕПИТЬ РЕЖИМ ОБМЕНА;

Блокировки на уровне строки, блокировки на уровне таблицы и блокировки на уровне страницы в MySQL

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

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

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

Вуху. Hollisbeds.com/archives/93…
Сестра crossover.top/2017/07/09/…