Size: a a a

2020 July 20

IZ

Ilia Zviagin in MySQL
Павел Г.
Приветствую, подскажите плиз по транзакциям. По изоляции reapeatable read. MariaDb
кейс (паралельные транзакции в разных терминалах):
tr1:begin
tr1: select email from users where id =1
tr2:begin
tr2:update users set email=newemail  where id=1
Разве при апдейте на этом уровне изоляции не должно быть лока?

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

Вики херню пишет?
Не дожно .
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Приветствую, подскажите плиз по транзакциям. По изоляции reapeatable read. MariaDb
кейс (паралельные транзакции в разных терминалах):
tr1:begin
tr1: select email from users where id =1
tr2:begin
tr2:update users set email=newemail  where id=1
Разве при апдейте на этом уровне изоляции не должно быть лока?

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

Вики херню пишет?
Вики пишет не херню.
источник

ПГ

Павел Г. in MySQL
Ilia Zviagin
Не дожно .
Тогда что значит "другая транзакция не может изменять данные?"
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Приветствую, подскажите плиз по транзакциям. По изоляции reapeatable read. MariaDb
кейс (паралельные транзакции в разных терминалах):
tr1:begin
tr1: select email from users where id =1
tr2:begin
tr2:update users set email=newemail  where id=1
Разве при апдейте на этом уровне изоляции не должно быть лока?

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

Вики херню пишет?
Но, кстати, и херню тоже пишет.

Уровень, при котором читающая транзакция «не видит» изменения данных, которые были ею ранее прочитаны.
Это ещё близко к правде.

При этом никакая другая транзакция не может изменять данные, читаемые текущей транзакцией, пока та не окончена.

А это -- да, полная херня
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Тогда что значит "другая транзакция не может изменять данные?"
Можешь дать ссылку на статью ?
источник

ПГ

Павел Г. in MySQL
Ilia Zviagin
Но, кстати, и херню тоже пишет.

Уровень, при котором читающая транзакция «не видит» изменения данных, которые были ею ранее прочитаны.
Это ещё близко к правде.

При этом никакая другая транзакция не может изменять данные, читаемые текущей транзакцией, пока та не окончена.

А это -- да, полная херня
Ок спасибо, про вервую часть понятно и смысл этого уровня. Я вот именно про вторую спрашивал.
источник

ПГ

Павел Г. in MySQL
Ilia Zviagin
Можешь дать ссылку на статью ?
Wikipedia
Уровень изолированности транзакций
Уровень изолированности транзакций — условное значение, определяющее, в какой мере в результате выполнения логически параллельных транзакций в СУБД допускается получение несогласованных данных. Шкала уровней изолированности транзакций содержит ряд значений, проранжированных от наинизшего до наивысшего; более высокий уровень изолированности соответствует лучшей согласованности данных, но его использование может снижать количество физически параллельно выполняемых транзакций. И наоборот, более низкий уровень изолированности позволяет выполнять больше параллельных транзакций, но снижает точность данных. Таким образом, выбирая используемый уровень изолированности транзакций, разработчик информационной системы в определённой мере обеспечивает выбор между скоростью работы и обеспечением гарантированной согласованности получаемых из системы данных.
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Ок спасибо, про вервую часть понятно и смысл этого уровня. Я вот именно про вторую спрашивал.
ну и на самом деле нет смысла это читать, лучше читать доку по самой СУБД.

Стандартные уровни изоляции не очень хорошо подходят под MySQL.

Мария на MVCC, наверное, если движок InnoDB, и там не RR, а Snapshot isolation.
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Wikipedia
Уровень изолированности транзакций
Уровень изолированности транзакций — условное значение, определяющее, в какой мере в результате выполнения логически параллельных транзакций в СУБД допускается получение несогласованных данных. Шкала уровней изолированности транзакций содержит ряд значений, проранжированных от наинизшего до наивысшего; более высокий уровень изолированности соответствует лучшей согласованности данных, но его использование может снижать количество физически параллельно выполняемых транзакций. И наоборот, более низкий уровень изолированности позволяет выполнять больше параллельных транзакций, но снижает точность данных. Таким образом, выбирая используемый уровень изолированности транзакций, разработчик информационной системы в определённой мере обеспечивает выбор между скоростью работы и обеспечением гарантированной согласованности получаемых из системы данных.
Мда...

Repeatable read (повторяемость чтения)

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

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


Статья -- полное говно.
источник

ПГ

Павел Г. in MySQL
Ilia Zviagin
ну и на самом деле нет смысла это читать, лучше читать доку по самой СУБД.

Стандартные уровни изоляции не очень хорошо подходят под MySQL.

Мария на MVCC, наверное, если движок InnoDB, и там не RR, а Snapshot isolation.
Спасибо! Будемс гуглить)
источник

ПГ

Павел Г. in MySQL
Ilia Zviagin
Мда...

Repeatable read (повторяемость чтения)

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

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


Статья -- полное говно.
Меня просто еще вот эта татья смутила, и тот же уровень.

https://habr.com/ru/post/469415/

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

ПГ

Павел Г. in MySQL
Хотя далее там все норм и по этому уровню объяснение.
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Спасибо! Будемс гуглить)
Если хочешь про ANSI ISOLATION нормально прочитать, вот статья, прочистит тебе мозг раз и навсегда.

http://citforum.ru/database/classics/SQL_critiques/
источник

ПГ

Павел Г. in MySQL
Ilia Zviagin
Если хочешь про ANSI ISOLATION нормально прочитать, вот статья, прочистит тебе мозг раз и навсегда.

http://citforum.ru/database/classics/SQL_critiques/
Спасибо, сейчас почитаю.
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Меня просто еще вот эта татья смутила, и тот же уровень.

https://habr.com/ru/post/469415/

Пишут лок на апдейт, но апдейт и лок вообще не про этот уровень, а скорее про локи на обновление данных.  Но подумал если тут пишут про лок, хоть и про другой,  в вики про лок тоже... видимо что-то я не понимаю.
Ты бы ещё Пикабу на эту тему почитал...
источник

ПГ

Павел Г. in MySQL
Ilia Zviagin
Ты бы ещё Пикабу на эту тему почитал...
Что гугл выводит, то и читаем, а там дальше фильтруем ))
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Меня просто еще вот эта татья смутила, и тот же уровень.

https://habr.com/ru/post/469415/

Пишут лок на апдейт, но апдейт и лок вообще не про этот уровень, а скорее про локи на обновление данных.  Но подумал если тут пишут про лок, хоть и про другой,  в вики про лок тоже... видимо что-то я не понимаю.
Стоит отметить, что самую высокую скорость выполнения и самую низкую согласованность имеет уровень read uncommitted. Самую низкую скорость выполнения и самую высокую согласованность — serializable.

Вот после этой фразы уже сразу можно не читать.
источник

ПГ

Павел Г. in MySQL
Ilia Zviagin
Стоит отметить, что самую высокую скорость выполнения и самую низкую согласованность имеет уровень read uncommitted. Самую низкую скорость выполнения и самую высокую согласованность — serializable.

Вот после этой фразы уже сразу можно не читать.
Почему это неверно?
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Почему это неверно?
Как бы вопрос не правомочен.
Ты можешь ответить на вопрос, почему неверно что Земля вращается вокруг Солнца?
источник

IZ

Ilia Zviagin in MySQL
Павел Г.
Почему это неверно?
Потому что просто неверно. К скорости уровни изоляции вообще не имеют отношения никакого.
источник