powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Deadlock механизм.
15 сообщений из 15, страница 1 из 1
Deadlock механизм.
    #39125803
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
Sybase ASE 15.7

Кто нибудь может подсказать , где найти подробное описание механизма выбора жертвы при дедлоках.
Как то накопились вопросы.
То что смог найти в документации звучит так: Если дедлок обнаружен- то убивается процес , на который меньше потрачено процесорного времени.
Практика вызывает подозрения что:

1. Если на прoцесс затрачено даже очень много времени то он всё равно убивается , если он сразу в двух и более цепочках.
Т.е. убив этот запрос мы развязываем две дедлок-цепочки. Если по логике с большим процессорным временем - то надо было бы убить два других процесса, которые почти не затратили процессорное время. Логично , но подтверждения в доке не нашёл.

2. Есть ситуация , когда процесс -жертва дедлока не убивается , а только проходит ролбек для текущей транзакции и запускается следующая транзакция. (потому как chained mode ). Bug?
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39126246
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08Кто нибудь может подсказать , где найти подробное описание механизма выбора жертвы при дедлоках.


Где найти -- я может не скажу, зато скажу, каков сам механизм.
Откатывается та транзакция, которая на момент дедлока захватила меньше ресурсов (т.е. блокировок).
Таким образом, более большая транзакция продолжается, а более маленькая -- откатывается.

Сергей08Как то накопились вопросы.
То что смог найти в документации звучит так: Если дедлок обнаружен- то убивается процес , на который меньше потрачено процесорного времени.
Практика вызывает подозрения что:

1. Если на прoцесс затрачено даже очень много времени то он всё равно убивается , если он сразу в двух и более цепочках.
Т.е. убив этот запрос мы развязываем две дедлок-цепочки. Если по логике с большим процессорным временем - то надо было бы убить два других процесса, которые почти не затратили процессорное время. Логично , но подтверждения в доке не нашёл.

2. Есть ситуация , когда процесс -жертва дедлока не убивается , а только проходит ролбек для текущей транзакции и запускается следующая транзакция. (потому как chained mode ). Bug?

На сколько я помню, убивается всегда только один процесс из цепочки.
Цепочка может состоять из двух или более транзакций.
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39126355
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я говорю о ситуации когда в дедлоке 3 транзакции и 2 цепочки.
Т.е. одна транзакция участвует в двух цепочках и если не ошибаюсь то использовала
больше ресурсов перед тем как быть убитой. Скажу больше , что даже иногда пару часов перед дедлоком успела поработать.
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39127689
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08Я говорю о ситуации когда в дедлоке 3 транзакции и 2 цепочки.
Т.е. одна транзакция участвует в двух цепочках и если не ошибаюсь то использовала
больше ресурсов перед тем как быть убитой. Скажу больше , что даже иногда пару часов перед дедлоком успела поработать.

Дедлоки разбираются по одному, если их много, берётся "верхний" и разрешается, потом --- следующий.
И так далее. Так что 3 транзакции в цепочке быть может, а двух цепочек -- нет.
Всё на сколько я помню.
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39127706
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё раз давай попробуем ответить на твои вопросы:

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

Я не очень понимаю другое: какой бы он ни был, менять его всё равно нельзя. Как-то воздействовать
на СУБД, чтобы она разрешала бы дедлоки по-другому -- нельзя. Поэтому зачем тебе это ?
Просто чтобы знать ? Тогда ищи сам, в документации найти можно, при желании.

Но, ещё раз, всё, что ты можешь сделать с дедлоками -- это уменьшить вероятность их возникновения.

>Практика вызывает подозрения что:
>1. Если на прoцесс затрачено даже очень много времени то он всё равно убивается , если он сразу в двух и более цепочках.

Поясни, что значит "в двух цепочках". Если один процец участвует "в двух цепочках" -- то это же уже ОДНА ЦЕПОЧКА, потому что у неё есть одна общая вершина. Это связный граф. Почему ты считаешь это за две цепочки ?

Я подозреваю, что ты неверно пользуешься средствами диагностики.


> 2. Есть ситуация , когда процесс -жертва дедлока не убивается , а только проходит ролбек для текущей транзакции и запускается > следующая транзакция. (потому как chained mode ). Bug?

Нет.

авторError 1205
Severity

13

Message text

Your server command (family id #%d, process id #%d) encountered a deadlock situation. Please re-run your command.

Explanation

This error occurs when a process tries to acquire a lock on an object that is locked by a second process when the second process is waiting for a lock on an object that has been locked by the first process. This situation is a deadlock, and can involve more than two processes.

Adaptive Server detects this situation, rolls back the transaction that has accumulated the least amount of CPU time, and notifies the application program of this action with error 1205. This allows other users’ processes to move forward.

Deadlocks are caused by a number of situations, including:

Transactions modify tables in different orders. There is a greater chance of deadlock between two transactions if one is processing in the sequence A–B–C while the other runs C–B–A.

Transactions access tables using a nonclustered index. If the optimizer chooses a different nonclustered index for the same table for two different queries, a nonclustered index is not in the physical data sequence and the two processes are acquiring page locks in a random order. Therefore, there is a greater chance that one process will lock a page that the other needs.

Transactions that use the keyword holdlock or use the set isolation level command to hold shared locks. When holdlock is appended to a select transaction it holds the shared lock for the remainder of the transaction. This increases the risk of deadlock.

Transactions that require a long time to run. The longer a transaction runs, the more likely it is that another user will require a resource held by the transaction.

Action

Restart the transaction that has been rolled back. To minimize future occurrences of deadlocks, use any of the following procedures that apply to your site.



Где написано, что должно разрываться соединение ?
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39129897
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выборка из 'print deadlock' for deadlock 271 обьяснит , ' что значит "в двух цепочках". '
2 deadlock chain(s) involved

MasterZiv, просто, что бы тебе знать, зачем мне знать.
Ситация выглядит сложно разрешимой. 57 процесс работает 2 часа и занимает море локов и море CPU .
После двух часов работы ненадолго появлются два процесса (124 , 49) и как организовааная банда убивают 57.
Повторяется с завидной периодичностью.
Что делать? Как дать возможность процессу архивации закончить работу? Какие дать рекомендации програмерам апликухи.
Есть конструктивные предлжения?

------------------
00:0004:00000:00057:2015/12/16 09:13:28.61 server Deadlock Id 271 detected
Deadlock Id 271 detected. 2 deadlock chain(s) involved.

Deadlock Id 271: Process (Familyid 0, Spid 57) was waiting for a 'exclusive page' lock on page 7363207 of table 'orders' , indid 8 in database 'BEL' but process (Familyid 0, Spid 124) already held a 'shared page' lock on it.
Deadlock Id 271: Process (Familyid 0, Spid 124) was waiting for a 'shared page' lock on page 7376230 of table 'orders' in database 'BEL' but process (Familyid 0, Spid 57) already held a 'exclusive page' lock on it.


Deadlock Id 271: Process (Familyid 0, Spid 57) was waiting for a 'exclusive page' lock on page 7363207 of table 'orders' , indid 8 in database 'BEL' but process (Familyid 0, Spid 49) already held a 'shared page' lock on it.
Deadlock Id 271: Process (Familyid 0, Spid 49) was waiting for a 'shared page' lock on page 7376230 of table 'orders' in database 'BEL' but process (Familyid 0, Spid 57) already held a 'exclusive page' lock on it.

Deadlock Id 271: Process (Familyid 0, Spid 57) encountered multiple deadlocks.
Deadlock Id 271: Process (Familyid 0, Spid 57) was chosen as the victim.
Victim process host = `', user = `xxx' program name = `' host processes = `4088' .

End of deadlock information.
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39129928
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСитация выглядит сложно разрешимой. 57 процесс работает 2 часа и занимает море локов и море CPU .
После двух часов работы ненадолго появлются два процесса (124 , 49) и как организовааная банда убивают 57.
Повторяется с завидной периодичностью.
Что делать? Как дать возможность процессу архивации закончить работу? Какие дать рекомендации програмерам апликухи.
Есть конструктивные предлжения?

Ну очень сложно представить, как такое может быть.
Но если такое случается -- просто уходи от дедлоков,
Настрой блокировки на уровне записей, переведи таблицы на DOL/DRL...
блокируй записи в процессах (124 , 49) в другом порядке, например, сразу в начале транзакций всё, что нужно.

Зачем для решения этой проблемы знать механизмы разрешения дедлоков -- не понятно совсем.
Ещё раз, даже если это так, и даже если возможно это баг, то ты с этим ничего не сделаешь,
лучшее, что получится -- это фикс бага через полгода-год. Тебя это устроит ? Думаю, нет.
Так что просто разрешай дедлок.
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39129938
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Далее:

Сергей08 57 процесс работает 2 часа и занимает море локов и море CPU .
После двух часов работы ненадолго появлются два процесса (124 , 49) и как организовааная банда убивают 57.
Что делать? Как дать возможность процессу архивации закончить работу? Какие дать рекомендации програмерам апликухи.
Есть конструктивные предлжения?


Т.е.
процесс 57 -- архивация

процесс 124 -- что-то делает (меняет)

процесс 49 -- что-то делает (меняет).

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

Смотрим в твою диагностику:

Сергей08------------------
00:0004:00000:00057:2015/12/16 09:13:28.61 server Deadlock Id 271 detected
Deadlock Id 271 detected. 2 deadlock chain(s) involved.

Deadlock Id 271: Process (Familyid 0, Spid 57 ) was waiting for a 'exclusive page' lock on page 7363207 of table 'orders' , indid 8 in database 'BEL' but process (Familyid 0, Spid 124) already held a 'shared page' lock on it.
Deadlock Id 271: Process (Familyid 0, Spid 124) was waiting for a 'shared page' lock on page 7376230 of table 'orders' in database 'BEL' but process (Familyid 0, Spid 57) already held a 'exclusive page' lock on it.


Deadlock Id 271: Process (Familyid 0, Spid 57) was waiting for a 'exclusive page' lock on page 7363207 of table 'orders' , indid 8 in database 'BEL' but process (Familyid 0, Spid 49) already held a 'shared page' lock on it.
Deadlock Id 271: Process (Familyid 0, Spid 49) was waiting for a 'shared page' lock on page 7376230 of table 'orders' in database 'BEL' but process (Familyid 0, Spid 57) already held a 'exclusive page' lock on it.

Deadlock Id 271: Process (Familyid 0, Spid 57) encountered multiple deadlocks.
Deadlock Id 271: Process (Familyid 0, Spid 57) was chosen as the victim.
Victim process host = `', user = `xxx' program name = `' host processes = `4088' .

End of deadlock information.

57-ой хотел эксклюзивную блокировку, т.е. менял данные, два других -- только читали .

Как минимум ты либо что-то не так объясняешь, либо неправильно понимаешь диагностику.
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39155748
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,
57-ой хотел эксклюзивную блокировку, т.е. менял данные, два других -- только читали .


Т.е. это нормально, когда 57 менял, менял данные в течении нескольких часов , а потом два других(читающих) его убили?
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39155818
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08,

Да, нормально.
В ASE.
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39175749
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
1. Most of deadlocks in Sybase ASe - result of still absence MVCC (Multiversion control system), i.e select locking update - update locking select. Oracle has that originally, MSSQL - 2005, DB2 - 2008, i.e this is pure Sybase ASe problem, even Sybase IQ has it.
We see it in trading system every day. Almost impossible to prevent/fix.
2. Resolution mechanism could be more powerful - Sybase Ase could do it itself, i.e after rollbacking trying to repeat, instead of putting it on client program.
3. Or at least allowing to process error 1205 in sp itself, like many other errors, instead of crashing sp.
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39275057
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И снова добрый день :)
Я абсолютно согласен с Zhora, что Resolution mechanism could bre more powerfull.
(хотя я и не понимаю как MVCC могло быть решено в MSSQL 2005).

Вытаскиваю тему с надеждой , что кто то всё таки сможет помочь найти
алгоритм 'Resolution mechanism '.
Может ситуация с ' 2 deadlock chain(s) involved' не единственная , где не только ресурсозатраты решают кого оставить не убитым.
Наверное таки соберусь напрячь SAP support помочь мне обрести понимание ... :) (?)
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39275481
fin3544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08

Вариантов уменьшить количество дедлоков на самом немного...

1. Если данные которые пользуют процессы - разные , можно уменьшить гранулярность блокировок , например перейти с постраничной схемы блокировок на построчную схему. (пройдет мгновенно) , но потребует больше ресурсов. также может помочь партиционирование таблицы.

2. Если процесс читающий , подумайте насчет грязного чтения.

Ну и самое вкусное и наиболее правильное , - разбить процесс архивации на более маленькие транзакции.
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39279061
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Deadlock механизм.
    #39279106
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zhora,
Читал это
Но фраза ниже, по моему мнению, не ссответсвует действительности.
----------
Adaptive Server detects this situation, rolls back the transaction that has accumulated the least amount of CPU time
---------
В моём случае убивается процесс that has accumulated the MOST amount of CPU time и потому (?)
что, убив его дедлок разрешается убитием только 1-го процесса! По фразе выше нужно было убить 2 процесса из 3-х вовлечённых в дедлок из двух цепочек.
И ещё;
can involve more than two processes

Кто то помнит ситуацию из своего опыта когда было killed для более чем одного процесса в случае дедлока?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Deadlock механизм.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]