72 похожих чатов

Тут написано, что: PostgreSQL will detect this situation and abort one

of the transactions.
но если в данном примере
после второго апдейта в сессии А (из примера по ссылке) больше ничего не делать ни в какой транзакции, то они так и будут висеть.
не противоречие ли это?

29 ответов

20 просмотров

Конечно, нет — deadlock-а то нет, а блокировки (по умолчанию) в любой СУБД могут удерживаться неограниченное время, я так слышал. ;) Если это не устраивает — настраивайте timeouts, что ж.

RAFIZ- Автор вопроса
Yaroslav Schekin
Конечно, нет — deadlock-а то нет, а блокировки (по...

1.ну типа почему так блокировка прямо на statement-e? а не уже на попытке сделать коммит, где и можно было бы выдать ошибку (даже в режиме Serializable, кстати, такая блокировка) 2. почему тогда раздел доки называется deadlock?

RAFIZ
1.ну типа почему так блокировка прямо на statement...

1. Потому что это обычная эксклюзивная блокировка на UPDATE — так это везде работает (кроме СУБД, где используется OCC, но я их вживую не видел, например). 2. Потому что он про deadlocks, и полный пример по приведённой Вами ссылке именно его и демонстрирует (и такой же воспроизведётся практически в любой RDBMS)? Наверное, я не понял вопроса. ;(

RAFIZ- Автор вопроса

2. я о том, что тут вы пишите что deadlockа нет, а сейчас, что пример про deadlock, значит он есть:) у меня диссонанс

RAFIZ
2. я о том, что тут вы пишите что deadlockа нет, а...

Так там я пишу в ответ вот на это: > после второго апдейта в сессии А (из примера по ссылке) больше ничего не делать ни в какой транзакции, то они так и будут висеть. Т.е. при этом deadlock-а ещё нет. > а сейчас, что пример про deadlock Потому что полный пример действительно про deadlock. ;)

RAFIZ- Автор вопроса
Yaroslav Schekin
Так там я пишу в ответ вот на это: > после второг...

ну deadlock в многопоточности это про ситуации когда оба потока висят как раз и ничего не происходит. в примере же такая история производит именно после того запроса, который я указал а если все запросы оттуда запустить хоть и в указанном порядке, возникнет ошибка но не подвисание прервётся

RAFIZ- Автор вопроса
Yaroslav Schekin
1. Потому что это обычная эксклюзивная блокировка ...

почему устроить не ожидание лока а просто падение при попытке коммита или прям на statement-e?

RAFIZ
ну deadlock в многопоточности это про ситуации ког...

> в примере же такая история производит именно после того запроса, который я указал Нет, не происходит же? После него в "process B" можно делать почти что угодно (главное, не трогать locks, наложенные A). Т.е. он совсем не "висит" — иначе бы последний запрос в нём выполнить было бы невозможно. > а если все запросы оттуда запустить хоть и в указанном порядке, возникнет ошибка Какая ошибка? Если deadlock, то это нормально (RDBMS обязаны их обнаруживать и разрешать, в общем-то). > почему устроить не ожидание лока а просто падение при попытке коммита или прям на statement-e? Хмм... на каком именно, в каком процесcе (я запутался уже)? ;)

RAFIZ- Автор вопроса
RAFIZ
короче вы тестили этом пример?

Если честно — нет. Но он же тривиальный, с виду?

RAFIZ- Автор вопроса
RAFIZ
вот потестите:)

Ну и протестировал — это самый тривиальный deadlock ("смотрите в каждом учебнике по RDBMS"!): ERROR: deadlock detected DETAIL: Process 13564 waits for ShareLock on transaction 11820689; blocked by process 16952. Process 16952 waits for ShareLock on transaction 11820690; blocked by process 13564. HINT: See server log for query details. CONTEXT: while updating tuple (0,1) in relation "users" Что смущает-то?

RAFIZ- Автор вопроса
RAFIZ
как я описал тестили? видимо, нет

Видимо, да. Процесс A "висит" (блокирован процессом B), а вот процесс B работает, и так и должно быть — попробуйте это в любой обычной RDBMS, и увидите точно такое же поведение (с точностью до сообщений об ошибках). Я так и не понял, что Вас смущает... :(

RAFIZ- Автор вопроса
Yaroslav Schekin
Видимо, да. Процесс A "висит" (блокирован процессо...

то что процесс А висит. и полностью зависит от процесса В если процесс В будет стоять и ничего не делать, то и А тоже.

RAFIZ
то что процесс А висит. и полностью зависит от про...

Да, и так работают вообще все СУБД, которые используют блокировки — прям открываете https://db-engines.com/en/ranking/relational+dbms и читаете по списку (пропуская те, которые non-ACID вообще (некоторые аналитические) и те, которые не многопользовательские), пока не дочитаете... до 131 позиции, если не вру. ;)

RAFIZ- Автор вопроса
RAFIZ
оптимистичные блокировки решили бы это?

Минуту. Вы про Optimistic Concurrency Control (хоть https://en.wikipedia.org/wiki/Optimistic_concurrency_control — так там просто транзакции откатывают по первому "чиху") или про https://www.ibm.com/docs/en/db2/11.5?topic=overview-optimistic-locking (совсем другая штука, хотя принцип похож... но я не совсем понимаю, как их тут использовать — если обновлять записи именно и только парой, то это всё равно транзакция и те же проблемы)?

RAFIZ- Автор вопроса
Yaroslav Schekin
Минуту. Вы про Optimistic Concurrency Control (хот...

ну:) почему по первому чиху? кто сделал коммит первый — тот выиграл. остальные в случае конфликтов откатываются. такого феномена как выше — когда А висит и ждёт чё там произойдёт в В — не было бы у вас другая инфа?

RAFIZ
ну:) почему по первому чиху? кто сделал коммит пер...

Ну так-то да, вроде (опять-таки, т.к. именно Relational DBMS, которые используют "чистый" OCC, в мире около одной, то я всё это помню очень смутно). ;) И то, что их так "много" — это жж неспроста (как говорят нам не только практики, но и теоретики — вон даже была книга кого-то из выдающихся, где он последовательно обосновывает примерно такое утверждение: "если DBMS с блокировками при высококонкурентной нагрузке проигрывает DBMS с OCC, это может значить только одно — у разработчиков первой кривые руки"). ;)

RAFIZ- Автор вопроса
RAFIZ
> т.к. именно Relational DBMS ну есть ещё NewSQL

Они-то чем не relational (большинство из них, по крайней мере)?

RAFIZ- Автор вопроса
Yaroslav Schekin
Они-то чем не relational (большинство из них, по к...

мне не могло быть известно, имеете вы их в виду или нет. вы там употребили слово «чистых» > в мире около одной вы о какой?

RAFIZ
мне не могло быть известно, имеете вы их в виду ил...

https://docs.mimer.com/MimerSqlManual/latest/Manuals/transactions_and_security/transactions_and_security.htm

RAFIZ- Автор вопроса
Yaroslav Schekin
Ну так-то да, вроде (опять-таки, т.к. именно Relat...

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

RAFIZ
возвращаясь к теме, кажется, такой подход (на прим...

Да, у меня другие данные — см. https://t.me/dba_ru/170096 Вас это не убеждает? Как то, что учёные (а не кто-нибудь) пишут с обоснованиями, что этот подход тупо хуже, так и то, что на практике таких СУБД где-то 1:200 (или даже более) остальных?

RAFIZ- Автор вопроса
Yaroslav Schekin
Да, у меня другие данные — см. https://t.me/dba_ru...

ну а как вы хотели? чтоб вы написали про каких-то учёных, а я сразу покланялся и поверил? вот мои учёные говорят, что второй подход лучше. давайте мериться ссылками:)

RAFIZ- Автор вопроса

и ещё раз: я просил фокус на примере из ссылки установить учёные там даже что-то если и говорят, то наверняка про общий перформанс двух подходов

RAFIZ
и ещё раз: я просил фокус на примере из ссылки уст...

Так практически всегда можно найти примеры, на которых один подход для решения какой-то задачи лучше другого — на этом основан весь современный research в CS что тут такого? > то наверняка про общий перформанс двух подходов Да, именно так. > у вас другие данные? Нет. Т.е. Проблема только в том, что у любого подхода должны быть последовательно применяемые общие принципы, чтобы получилась ACID-СУБД, а не "каша". Тут нельзя "надёргать" из разных методов только то, что больше нравится. ;)

Похожие вопросы

Обсуждают сегодня

Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Подскажите, пожалуйста, где в backende, или не в нем можно дату поправить? Логирует действия не в том часовом поясе
Лео
7
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
Есть магистры regex в чате? Задача: нужно написать regex который мэтчит полные (без сокращений по типу ::1/128) ipv6 адреса кроме 2001:0df7:cef7:29f7:52f7:adf7:2cf7:4ff7, при ...
Илья
5
Всем привет В общем надо на странице вакансии вывести вакансии с hh, но когда я пишу код в разделе Code ошибка Invalid URL format. The URL should start with the forward slash...
A da
1
В чем может быть причина такого поведения? Библиотека есть, версия совпадает, но не собирается. Скармливаешь в rebar.lock - работает (потом отваливается другая, и так, пока не...
Δημήτηρ
2
И подскажите ещё пожалуйста, чем можно автоформатнуть config?
Δημήτηρ
3
посыпаю голову пеплом =) https://docs.vapor.codes/advanced/files/?h=stream#files
Seryoga
10
Было открыто два проекта в Xcode. В одном делал билд, а в другом просто ковырялся. Проц разогрелся до 99 градусов, изображение на дисплее посыпалось и через 5 секунд комп выру...
Alexander Sherbakov
10
Карта сайта