Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 24

Транзакции и блокировки

14.11.2016, 14:49. Показов 1085. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Есть две транзакции:

T1 (запускается первой) всегда REPEATABLE READ
1) Обновление table_1
2) Запуск T2
2) Обновление table_2

T2
1) Создание темп. таблицы на основе table_1 и table_2 (JOIN)

Если T2:
1) READ UNCOMMITTED - дедлока не происходит.
2) REPATABLE READ - дедлок (T1 удерживает блокировку X на table_1, T2 удерживает блокировку S на table_2 и не дает T1 установить X блокировку на table_2)


Вопрос:
Почему в первом случае дедлока не происходит, а во втором происходит, ведь T1 удерживает блокировку X на table_1 в обоих случаях (не должна давать T2 создать темповую таблицу)?
Ведь известно, что X блокировка не дает возможности установить другие блокировки (ни S ни X).
С одной стороны, ответ на этот вопрос очевиден - READ UNCOMMITED позволяет читать не зафиксированные изменения, но с другой, как X блокировка это позволяет сделать?

В общем, в моей голове конфликтуют две темы, "транзакции" и "блокировки". Прочел массу материала, но исчерпывающей информации так и не нашел. Что я упускаю из всего этого?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2016, 14:49
Ответы с готовыми решениями:

Транзакции и блокировки
При вставке записи в родительскую таблицу необходимо в триггере INSERT вставить записи в две дочерние. Код триггера примерно такой: ...

Firebird транзакции и блокировки записей
Есть база данных и клиентское приложение. В БД есть таблица Заказы. Пользователь редактирует заказы через форму редактирования, может...

Транзакции
Нужно ли создавать транзакцию для вызова процедуры базы, если в процедуре уже создается транзакция ? Добавлено через 4 минуты И еще...

3
25 / 25 / 7
Регистрация: 27.02.2013
Сообщений: 113
15.11.2016, 06:36
1. насколько я знаю, MySQL вложенные транзакции не поддерживает. А у Вас транзакция T2 вложена в транз. T1.
2. REPEATABLE READ - это повторное чтение, т. е. при повторном чтении транзакция видит те же данные. И еще пока Т1 не закончится, блокировки не снимутся.
3. READ UNCOMMITTED - это фактически отсутствие всяких блокировок.
0
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 24
15.11.2016, 09:24  [ТС]
А у Вас транзакция T2 вложена в транз. T1.
Нет. Имеется в виду, что в этот момент запускается T2 другим процессом.

READ UNCOMMITTED - это фактически отсутствие всяких блокировок.
Но в соседнем потоке блокировка (X) установлена. Соответственно, даже несмотря на этот уровень изоляции, он не должен мочь прочесть данные.
0
25 / 25 / 7
Регистрация: 27.02.2013
Сообщений: 113
15.11.2016, 12:17
Почему в первом случае дедлока не происходит, а во втором происходит, ведь T1 удерживает блокировку X на table_1 в обоих случаях (не должна давать T2 создать темповую таблицу)?


Но транзакция T2 только читает данные, делает выборку, она не обновляет данные. Поэтому:

Если T2 имеет уровень изоляции READ UNCOMMITTED, то она может прочитать т. table_1 (по чтению эта таблица доступна, она не доступна по записи) и соединить ее с т. table_2, которая тоже доступна по чтению.

Если T2 имеет уровень изоляции REPEATABLE READ, то транз T2 пытается установить блокировки на таблицы table_1 и table_2, но они уже заблокированы транзакцией T1. Вот и происходит deadlock.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2016, 12:17
Помогаю со студенческими работами здесь

транзакции
5я. Могут ли на сервере выполняться одновременно две транзакции из разных приложений, работающих с одной и той же БД? 10я. Можно ли...

Транзакции
create or replace procedure actuarialnewversion(id in number) is idd_ number; begin eprlogin_second; ...

Транзакции
Нигде толком не нашел информации, решил у вас спросить. Вот допустим есть какой-то класс с набором всяческих данных и методов. Этот класс в...

Транзакции
есть таблица, из двух полей (id - уникальный ключ, идентификатор пользователя и summ - количество денег) Подскажите как правильно...

Транзакции
Приведите пожалуйста пример создания своей транзакции в коде, но не так, чтобы она с бд работала а просто допустим с функцией в коде


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru