|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
Добрый день Sybase ASE 15.7 Кто нибудь может подсказать , где найти подробное описание механизма выбора жертвы при дедлоках. Как то накопились вопросы. То что смог найти в документации звучит так: Если дедлок обнаружен- то убивается процес , на который меньше потрачено процесорного времени. Практика вызывает подозрения что: 1. Если на прoцесс затрачено даже очень много времени то он всё равно убивается , если он сразу в двух и более цепочках. Т.е. убив этот запрос мы развязываем две дедлок-цепочки. Если по логике с большим процессорным временем - то надо было бы убить два других процесса, которые почти не затратили процессорное время. Логично , но подтверждения в доке не нашёл. 2. Есть ситуация , когда процесс -жертва дедлока не убивается , а только проходит ролбек для текущей транзакции и запускается следующая транзакция. (потому как chained mode ). Bug? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2015, 13:26 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
Сергей08Кто нибудь может подсказать , где найти подробное описание механизма выбора жертвы при дедлоках. Где найти -- я может не скажу, зато скажу, каков сам механизм. Откатывается та транзакция, которая на момент дедлока захватила меньше ресурсов (т.е. блокировок). Таким образом, более большая транзакция продолжается, а более маленькая -- откатывается. Сергей08Как то накопились вопросы. То что смог найти в документации звучит так: Если дедлок обнаружен- то убивается процес , на который меньше потрачено процесорного времени. Практика вызывает подозрения что: 1. Если на прoцесс затрачено даже очень много времени то он всё равно убивается , если он сразу в двух и более цепочках. Т.е. убив этот запрос мы развязываем две дедлок-цепочки. Если по логике с большим процессорным временем - то надо было бы убить два других процесса, которые почти не затратили процессорное время. Логично , но подтверждения в доке не нашёл. 2. Есть ситуация , когда процесс -жертва дедлока не убивается , а только проходит ролбек для текущей транзакции и запускается следующая транзакция. (потому как chained mode ). Bug? На сколько я помню, убивается всегда только один процесс из цепочки. Цепочка может состоять из двух или более транзакций. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2015, 23:20 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
Я говорю о ситуации когда в дедлоке 3 транзакции и 2 цепочки. Т.е. одна транзакция участвует в двух цепочках и если не ошибаюсь то использовала больше ресурсов перед тем как быть убитой. Скажу больше , что даже иногда пару часов перед дедлоком успела поработать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2015, 13:31 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
Сергей08Я говорю о ситуации когда в дедлоке 3 транзакции и 2 цепочки. Т.е. одна транзакция участвует в двух цепочках и если не ошибаюсь то использовала больше ресурсов перед тем как быть убитой. Скажу больше , что даже иногда пару часов перед дедлоком успела поработать. Дедлоки разбираются по одному, если их много, берётся "верхний" и разрешается, потом --- следующий. И так далее. Так что 3 транзакции в цепочке быть может, а двух цепочек -- нет. Всё на сколько я помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 18:45 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
Ещё раз давай попробуем ответить на твои вопросы: >Кто нибудь может подсказать , где найти подробное описание механизма выбора жертвы при дедлоках. Я не очень понимаю другое: какой бы он ни был, менять его всё равно нельзя. Как-то воздействовать на СУБД, чтобы она разрешала бы дедлоки по-другому -- нельзя. Поэтому зачем тебе это ? Просто чтобы знать ? Тогда ищи сам, в документации найти можно, при желании. Но, ещё раз, всё, что ты можешь сделать с дедлоками -- это уменьшить вероятность их возникновения. >Практика вызывает подозрения что: >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. Где написано, что должно разрываться соединение ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2015, 18:56 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
Выборка из '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. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 15:45 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
авторСитация выглядит сложно разрешимой. 57 процесс работает 2 часа и занимает море локов и море CPU . После двух часов работы ненадолго появлются два процесса (124 , 49) и как организовааная банда убивают 57. Повторяется с завидной периодичностью. Что делать? Как дать возможность процессу архивации закончить работу? Какие дать рекомендации програмерам апликухи. Есть конструктивные предлжения? Ну очень сложно представить, как такое может быть. Но если такое случается -- просто уходи от дедлоков, Настрой блокировки на уровне записей, переведи таблицы на DOL/DRL... блокируй записи в процессах (124 , 49) в другом порядке, например, сразу в начале транзакций всё, что нужно. Зачем для решения этой проблемы знать механизмы разрешения дедлоков -- не понятно совсем. Ещё раз, даже если это так, и даже если возможно это баг, то ты с этим ничего не сделаешь, лучшее, что получится -- это фикс бага через полгода-год. Тебя это устроит ? Думаю, нет. Так что просто разрешай дедлок. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 16:11 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
Далее: Сергей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-ой хотел эксклюзивную блокировку, т.е. менял данные, два других -- только читали . Как минимум ты либо что-то не так объясняешь, либо неправильно понимаешь диагностику. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 16:18 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
MasterZiv, 57-ой хотел эксклюзивную блокировку, т.е. менял данные, два других -- только читали . Т.е. это нормально, когда 57 менял, менял данные в течении нескольких часов , а потом два других(читающих) его убили? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2016, 16:07 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
Сергей08, Да, нормально. В ASE. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2016, 16:57 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2016, 06:42 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
И снова добрый день :) Я абсолютно согласен с Zhora, что Resolution mechanism could bre more powerfull. (хотя я и не понимаю как MVCC могло быть решено в MSSQL 2005). Вытаскиваю тему с надеждой , что кто то всё таки сможет помочь найти алгоритм 'Resolution mechanism '. Может ситуация с ' 2 deadlock chain(s) involved' не единственная , где не только ресурсозатраты решают кого оставить не убитым. Наверное таки соберусь напрячь SAP support помочь мне обрести понимание ... :) (?) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2016, 10:11 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
Сергей08 Вариантов уменьшить количество дедлоков на самом немного... 1. Если данные которые пользуют процессы - разные , можно уменьшить гранулярность блокировок , например перейти с постраничной схемы блокировок на построчную схему. (пройдет мгновенно) , но потребует больше ресурсов. также может помочь партиционирование таблицы. 2. Если процесс читающий , подумайте насчет грязного чтения. Ну и самое вкусное и наиболее правильное , - разбить процесс архивации на более маленькие транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2016, 11:19 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
This can help: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc00729.1500/html/errMessageAdvRes/BACFDJDJ.htm ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2016, 23:15 |
|
Deadlock механизм.
|
|||
---|---|---|---|
#18+
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 для более чем одного процесса в случае дедлока? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2016, 11:21 |
|
|
start [/forum/topic.php?fid=55&fpage=4&tid=2009702]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 166ms |
0 / 0 |