|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Это баг или фича? Оракл и постгре в этом случае сразу ругаются, что нарушен primary key constraint, что на мой взгляд более логично. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2021, 23:04 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
MySql 8.0.25 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2021, 23:06 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Псевдомизантроп, А вдруг первая сессия захочет удалить эту запись? Транзакция не закрыта, что произойдет с записью id = 1 - неизвестно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2021, 01:43 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
miksoft Псевдомизантроп, А вдруг первая сессия захочет удалить эту запись? Транзакция не закрыта, что произойдет с записью id = 1 - неизвестно. Вот когда первая сессия удалит эту запись, тогда ожидание будет вполне логично - кстати, именно так работает в оракле. А если запись не удалена и нода всё ещё присутствует в индексе - чего висеть то? Почему нельзя сразу отдать dupliacte entry - я же не зря выставляю read committed. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2021, 02:13 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Так она ещё не committed. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2021, 13:45 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Так она ещё не committed. Что значит не committed? в первой сессии после инсерта идёт коммит. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2021, 13:57 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Псевдомизантроп в первой сессии после инсерта идёт коммит. А после select for update - нет. Никто же не в состоянии предугадать этот твой последующий update, который может поменять 1 на 2, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2021, 13:58 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Псевдомизантроп в первой сессии после инсерта идёт коммит. А после select for update - нет. Никто же не в состоянии предугадать этот твой последующий update, который может поменять 1 на 2, например. А зачем что-то предугадывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2021, 14:39 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Псевдомизантроп, Код: sql 1. 2. 3.
не баг и не фича, все строго док-ции ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2021, 20:19 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Alex_Ustinov Псевдомизантроп, Код: sql 1. 2. 3.
не баг и не фича, все строго док-ции insert в другой сессии ни физически, ни теоретически не может тронуть эту запись. Ещё раз, оракл (и постгре) в этой ситуации действуют ровно настолько, насколько требуется в данный конкретный момент времени, безо всяких гаданий и предсказаний, а именно: 1) select for update в первой сессии не блокирует попытку инсерта во второй. У нас есть первичный ключ, который в данный момент уже содержит значение, и это значение никто пока даже ещё не попытался удалить или изменить. Вторая сессия получит primary key violation сразу, безо всяких ожиданий; 2) а вот если в первой сессии последует удаление, или изменение первичного ключа (причём не важно, был ли вообще перед этим select for update), тогда, конечно, попытка инсерта будет заблокирована до окочания транзакции в первой сессии - чтобы не нарушить primary key constraint. Мой вопрос был насчёт п. 1 - MySql зачем-то накладывает блокировку там, где она не нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2021, 21:20 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Псевдомизантроп MySql зачем-то накладывает блокировку там, где она не нужна. уточнение - блокировка нужна, но она не должна блокировать заведомо невалидный инсерт ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2021, 21:41 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
авторМой вопрос был насчёт п. 1 - MySql зачем-то накладывает блокировку там, где она не нужна. а почему вы уверены что это блокировка именно данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 12:10 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
ScareCrow авторМой вопрос был насчёт п. 1 - MySql зачем-то накладывает блокировку там, где она не нужна. а почему вы уверены что это блокировка именно данных? Я не в курсе природы этой блокировки, так как с MySql никогда не работал и с внутренностями не знаком. Мне понадобилось перенести одну функциональность с оракла, обнаружил разницу в поведении. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 13:37 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Псевдомизантроп она не должна блокировать заведомо невалидный инсерт Может быть. Но твой-то insert совсем не "заведомо невалидный". Измени id существующей записи и опаньки, он пройдёт как по маслу. Именно из-за read committed. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 13:57 |
|
Вставка дубликакта зависает на блокировке вместо Duplicate entry exception (READ COMMITTED
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Псевдомизантроп она не должна блокировать заведомо невалидный инсерт Может быть. Но твой-то insert совсем не "заведомо невалидный". Измени id существующей записи и опаньки, он пройдёт как по маслу. Именно из-за read committed. После изменения id он не должен пройти как по маслу. В этом случае он должен подвиснуть в ожидании окончания транзакции, с этим сценарием вопросов нет. А вот до изменения id смысла висеть нету - логичнее сразу отдать primary key violation. Оракл и постгре умеют отличать эти два состояния, а My Sql видимо нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 14:49 |
|
|
start [/forum/topic.php?fid=47&fpage=7&tid=1827999]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 179ms |
0 / 0 |