Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
27.02.2013, 23:44
|
|||
---|---|---|---|
|
|||
Дедлок при курсоре |
|||
#18+
Добрый вечер. Есть следующий кусок логики. Объявляем курсор: Код: plsql 1. 2. 3. 4. 5. 6. 7.
Потом открываем его и в цикле читаем строчка за строчкой: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
При этом вычитав строчку делаем там всякие проверки и модицикации с данными в переменных, после чего выполняем апдейт строки в той же таблице по которой ходит курсор, а именно той же строки, которую мы этим курсором только что вычитали: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Все бы хорошо, если бы периодически не происходил как я понимаю дедлок: -244 Could not do a physical-order read to fetch next row Кто-то может объяснить от чего? Если от того что обновляется строка, которую только что считал курсор, то почему дедлок случается лишь иногда с некоторыми строками. А если не от этого, то откуда дедлок? -- ВУЗы Украины ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.02.2013, 04:41
|
|||
---|---|---|---|
Дедлок при курсоре |
|||
#18+
MaximFomenko, для обновления строк, которые выбираются в цикле, обычно используется SELECT ... FOR UPDATE OF...., UPDATE ... WHERE CURRENT OF .... Или нужно таки разобраться откуда ноги ростут? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.02.2013, 08:19
|
|||
---|---|---|---|
|
|||
Дедлок при курсоре |
|||
#18+
MaximFomenko-244 Could not do a physical-order read to fetch next row откуда дедлок? Ошибка -244 не обязательно означает deadlock (взаимная блокировка). Надо смотреть сопутствующее ISAM-сообщение. Что бы сделать правильные выводы, для начала нужно глянуть на вывод onstat -u, onstat -g ses в момент появления ошибки. Возможно, что потребуется запустить oncheck на таблицу или индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.02.2013, 12:42
|
|||
---|---|---|---|
|
|||
Дедлок при курсоре |
|||
#18+
victor16MaximFomenko-244 Could not do a physical-order read to fetch next row откуда дедлок? Ошибка -244 не обязательно означает deadlock (взаимная блокировка). Надо смотреть сопутствующее ISAM-сообщение. Что бы сделать правильные выводы, для начала нужно глянуть на вывод onstat -u, onstat -g ses в момент появления ошибки. Возможно, что потребуется запустить oncheck на таблицу или индекс. Сопутствующее ISAM сообщение с кодом -143 - т.е. судя по описанию этого кода - таки дедлок. Выполнение onstat -u, onstat -g ses в момент ошибки затруднено, т.к. дело происходит на базе клиента, который пользует софт. А доступа к их системе у меня нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.02.2013, 12:43
|
|||
---|---|---|---|
|
|||
Дедлок при курсоре |
|||
#18+
АнатоЛойMaximFomenko, для обновления строк, которые выбираются в цикле, обычно используется SELECT ... FOR UPDATE OF...., UPDATE ... WHERE CURRENT OF .... Или нужно таки разобраться откуда ноги ростут? Ага, нашел примеры синтаксиса. Спасибо. Говорите это поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.02.2013, 13:31
|
|||
---|---|---|---|
|
|||
Дедлок при курсоре |
|||
#18+
MaximFomenkoАнатоЛой обычно используется SELECT ... FOR UPDATE OF...., UPDATE ... WHERE CURRENT OF .... ... Говорите это поможет? Можно добавить совет выставить уровень изоляции, возможно с опцией RETAIN UPDATE LOCKS. Подробнее можно посмотреть в блоге SELECT… FOR UPDATE , ну или в документации. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.02.2013, 15:09
|
|||
---|---|---|---|
|
|||
Дедлок при курсоре |
|||
#18+
если этот процесс может выполняться несколькими пользователями одновременно, то я бы добавил сортировку чтобы обрабатывать строки в одном и том же порядке. SELECT basedep_num, part_code, branch_code, .... order by basedep_num, part_code, branch_code, even_sum, dbtturn_even, crdturn_even; ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=44&tablet=1&tid=1607072]: |
0ms |
get settings: |
21ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
191ms |
get tp. blocked users: |
2ms |
others: | 334ms |
total: | 641ms |
0 / 0 |