powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 как ase разбирается с deadlock
24 сообщений из 24, страница 1 из 1
ASE 12.5 как ase разбирается с deadlock
    #35491203
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть процесс DEADLOCK TUNE который следит за DEADLOCKами, если он находит DEADLOCK, что он делает? От просто отрубает одну транзакцию и выдает ошибку или он успешно закрывает обе транзакции?

Заранее Спасибо!
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35491265
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, не DEATHLOCK, а DEADLOCK!

Модератор: Всё нормально, я исправил.
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35492391
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenЕсть процесс DEATHLOCK TUNE который следит за DEATHLOCKами, если он находит DEATHLOCK, что он делает? От просто отрубает одну транзакцию и выдает ошибку или он успешно закрывает обе транзакции?

Заранее Спасибо!
откатывает самую "легкую" транзакцию, давая тем самым ход второй
опционально пишет в лог инфу о дедлоке и его жертве
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35492895
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А после отработки второй транзакции, транзакцию-жертву от не как не использует? Ну и накотывал бы транзакцию-жертву после отработки второй транзакции! Или это противоречет чему-то?
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493139
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда ASE убивает "жертву", то клиенту возвращается код -3. Правильно написанное клиентское приложение должно по этому коду повторить транзакцию. ASE самостоятельно не будет сам проводить "жертву"
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493255
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
morisКогда ASE убивает "жертву", то клиенту возвращается код -3. Правильно написанное клиентское приложение, должно по этому коду повторить транзакцию. ASE самостоятельно не будет сам проводить "жертву"

А это обусловленно какими-то постулатоми РСУБД или просто реализация такая? Почему несделать чтоб ASE сам бы заботился о "жертве"?
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493509
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что так и должно было бы быть если бы все было "по уму", т.е.
СУБД должна была бы сама заботиться о повторе victim transaction, а не
возлагать еще и это на плечи бедного application, тем более что
код ошибки (@@error) = 1205, который возвращается servero-m невозможно проверить ни в sp, ни в ODBC (по крайней мере в старых версиях), только через Open Client (а если у вас только cвязка VB/CRW/ODBC -> sp, что делать ?).

Насчет return status (code) = -3 не пробовал проверить, может и можно,
хотя сомеваюсь, т.к. "проверялка" сама должна быть в коде скажем этой же
sp a она сразу отрубается как процесс сервером.
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493517
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den morisКогда ASE убивает "жертву", то клиенту возвращается код -3. Правильно написанное клиентское приложение, должно по этому коду повторить транзакцию. ASE самостоятельно не будет сам проводить "жертву"

А это обусловленно какими-то постулатоми РСУБД или просто реализация такая? Почему несделать чтоб ASE сам бы заботился о "жертве"?

Это просто невозможно в принципе.
Сервер знает о том, какие операции произошли в транзакции до момента
дедлока, но не знает ничего о тех операциях, которые ещё должны были бы выполниться ПОСЛЕ дедлока,
просто потому, что они ещё не успели выполниться.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
begin tran
select .... from
update ....
insert ...
-- здесь происходит дедлок, в процессе выполнения insert.
-- Последующие операторы не выполняются. Сервер о них ничего не знает.
delete ...
select ...
insert ...
commit -- а может был бы и rollback ?


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

Ну и наверное не надо говорить о том, что транзакция может как утверждаться (commit) , так и откатываться,
также в зависимости от данных, иначе вообще зачем транзакции нужны ...
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493533
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhora wrote:

> Я думаю что так и должно было бы быть если бы все было "по уму", т.е.
> СУБД должна была бы сама заботиться о повторе victim transaction, а не
> возлагать еще и это на плечи бедного application,

Ну, Zhora, от вас я такого не ожидал, вы же вроде бы грамотный
специалист ... А если подумать немного ? В общем, читайте,
что я

тем более что
> код ошибки (@@error) = 1205, который возвращается servero-m невозможно
> проверить ни в sp,

Да, вы правы, невозможно, потому что выполнение SP прерывается.
Выполнение потока управления многооператорного батча, посланного
на сервер, тоже. Поэтому средствами TSQL это вообще никак не
обнаружить, просто потому, что TSQL в этом случае УЖЕ НЕ БУДЕТ
ВЫПОЛНЯТЬСЯ.

ни в ODBC (по крайней мере в старых версиях), только
> через Open Client (а если у вас только cвязка VB/CRW/ODBC -> sp, что
> делать ?).

Ну, возможно это драйвер кривоват был для ASE. Для MS SQLServer 6.0
я помню точно эта ошибка обнаруживалась, и я её обрабатывал
именно на ODBC.

Кстати, как ни странно, я с ASE через ODBC практически вообще
никогда не работал - только OpenClient

> Насчет return status (code) = -3 не пробовал проверить, может и можно,
> хотя сомеваюсь, т.к. "проверялка" сама должна быть в коде скажем этой же
> sp a она сразу отрубается как процесс сервером.

Никакого кода не будет, возможно, при вызове процедуры с клиента
будет сэмулирован какой-то плохой код, как это делается в случае
с вызовом несуществующей процедуры.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493565
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zhoraотрубается как процесс сервером.

Так не просто транзакция откатывается, а весь процесс киляется? Что-то я запутался!!!
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493592
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den wrote:
> Так не просто транзакция откатывается, а весь процесс киляется? Что-то я
> запутался!!!

На сколько я помню, соединение не разрывается.
Процесс прекращается, т.е. останавливается выполнение
всех посланных комманд (и текущей выполняемой также).
Транзакция откатывается. Соединение переводится в состояние,
когда оно может принимать последующие запросы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493742
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv cherrex_Den morisКогда ASE убивает "жертву", то клиенту возвращается код -3. Правильно написанное клиентское приложение, должно по этому коду повторить транзакцию. ASE самостоятельно не будет сам проводить "жертву"

А это обусловленно какими-то постулатоми РСУБД или просто реализация такая? Почему несделать чтоб ASE сам бы заботился о "жертве"?

Это просто невозможно в принципе.
Сервер знает о том, какие операции произошли в транзакции до момента
дедлока, но не знает ничего о тех операциях, которые ещё должны были бы выполниться ПОСЛЕ дедлока,
просто потому, что они ещё не успели выполниться.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
begin tran
select .... from
update ....
insert ...
-- здесь происходит дедлок, в процессе выполнения insert.
-- Последующие операторы не выполняются. Сервер о них ничего не знает.
delete ...
select ...
insert ...
commit -- а может был бы и rollback ?


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

Ну и наверное не надо говорить о том, что транзакция может как утверждаться (commit) , так и откатываться,
также в зависимости от данных, иначе вообще зачем транзакции нужны ...

А можно по подробней! Я выполняю какую-то транзакцию, в середине попадаю в дэдлок, транзакция откатываеться. Что мешает еше раз выполнить этот скрипт который был перед дэдлоком? Догатка у меня только одна, что некое "третье лицо" во время пока сервер разбирался с дедлоком, произвел изменение данных и согласованность уже нарушилась.
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493750
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернее в чем отличие между тем что транзакцию повторит клиент(приложение) или сервер(сам ASE)?
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493765
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже так думаю, по крайней мере я использую некий стандарт где все транзакции начинаются и
заканчиваются (begin tran,commit tran, rollback tran, savepoint) внутри sps, a не где-то в "стороне" (в application),
так что server "ситаксически" осведомлен о них "эаранее",
а не только в момент выполнения и мог бы "проследить" за ними.
Вот поискал и отрыл , мне кажется одно подтверждение: "lexical transactions" с автоматическим рестартом сервером
после deadlock situation в ObjectStore (Progress.com/IBM ?),
хотя может и притянуто за уши (мной):
http://progress.atgnow.com/esprogress/resultDisplay.do?gotoLink=6229&docType=1000&contextId=24269%3A6229.6388%2C1812.1944%2C515.572&clusterName=CombinedCluster&contentId=e9050c2a-1036-445f-b700-4e5d82f9bdb2&responseId=d8dc9fa1fa15699a%3A1b1fbf4%3A11bd6f5e3f9%3A-523b&groupId=1&answerGroup=2&score=985&page=https%3A%2F%2Fprogress.atgnow.com%2Fesprogress%2Fdocs%2FProgress%2Fesupport.progress.com%2FEDocHTML%2FObjectStore%2Fostore_7%2Fostore_user1%2Fostore_user1-08-1.html&result=3&excerpt=Using+Lexical+Transactions+To+demarcate+a+lexical+transaction%2C+use+the+following+macros%3A+OS_BEGIN_TXN%28+identifier+%2C+exception+**%2C+transaction-type++%29+%7B&resultType=5000#Goto6229
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35493992
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den wrote:

> А можно по подробней! Я выполняю какую-то транзакцию, в середине попадаю
> в дэдлок, транзакция откатываеться. Что мешает еше раз выполнить этот
> скрипт который был перед дэдлоком?

Ничего, это выполнить можно.
Вопрос в другом - что делать дальше, чтобы завершить транзакцию.

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

И это, кстати, тоже.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35494008
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhora wrote:

> Я тоже так думаю, по крайней мере я использую некий стандарт где все
> транзакции начинаются и
> заканчиваются (begin tran,commit tran, rollback tran, savepoint) внутри
> sps, a не где-то в "стороне" (в application),
> так что server "ситаксически" осведомлен о них "эаранее",
> а не только в момент выполнения и мог бы "проследить" за ними.

Это - только один из возможных подходов. А сервер расчитан на ВСЕ.
Но даже в случае, если мы имеем хранимую процедуру со всем кодом,
и дедлок произошёл в процессе её выполнения, невозможно автоматически
перевыполнить её, поскольку далее (после дэдлока) в процедуре может быть
какой-то код, который осуществляет ветвление на основе прочитанных
данных и в таком случае сервер просто не будет знать, по какой ветке
идти. Для этого надо было бы прочитать данные еще раз, т.е. "накатывать"
процедуру не с использованием лога записанных операторов и изменённых
ими данных, а просто перезапуская процедуру. А это уже будет в другой
транзакции. Этого сервер не имеет право делать.

> Вот поискал и отрыл , мне кажется одно подтверждение: "lexical
> transactions" с автоматическим рестартом сервером
> после deadlock situation в ObjectStore (Progress.com/IBM ?),
> хотя может и притянуто за уши (мной):

Да, наверное. Дело в том, что под словом "транзакция" скрывается
реально очень много терминов, совершенно разных. Т.е. транзакции
бывают разные. В той модели транзакций видимо специально оговорено
такое поведение. В ACID -транзакциях из ANSI SQL такого нет.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35494036
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhora wrote:

> после deadlock situation в ObjectStore (Progress.com/IBM ?),
> хотя может и притянуто за уши (мной):
> http://progress.atgnow.com

почему-то не удалось мне прочитать страницу эту. Там
в центре - пустое поле и всё. Сама страница загружается.
Там на флешах что ли всё ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35495882
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, но я теперь тоже не могу прочитать, хотя вчера мог. Что касается транзакций - это самые обычные "ACID транзакции". Ну я думаю серверу даже в случае "application transaction" (moe), для повтора после deadlock достаточно опять дойти до точки deadlock-a используя как-то свой trlog (a может и vce rollback-ать to необязательно было бы ?), короче используя свои внутренние механизмы, а затем опять "отдаться" приложению, тогда ему (серверу) совсем не нужна будет информация о том что там будет "дальше", уже опять будет продолжать "рулить" application, сделать это прозрачным для application воoбще (или пoлупрозрачным как в этом ObjectStore где можно задать лимит повторов после deadlock-a) безо всяких error типа 1205.

Sybase "любит" деадлочить пусть сам и разбирается с этим до конца ("саночки возит"), а не "проливает кровь безвинных жертв/victims", да еще под лозунгом "спасение утопающих-дело рук самих утопающих".

Вообще по части перекладывания ответственности на developer/DBA Sybase ASE явно "впереди планеты всей", чего стоит одно dump trlog, без которого СУБД просто остановится, а за который почему-то отвечает DBA со своими доморощенными скриптами. Hy сделайте наконец-то что-то типа archivelog mode как в Oracle.

Ну, тема "ответственности" в software industry - отдельный большой разговор и теме этой явно уделяется мало внимания ...
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35495939
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhora wrote:

> Не знаю, но я теперь тоже не могу прочитать, хотя вчера мог. Что
> касается транзакций - это самые обычные "ACID транзакции". Ну я думаю
> серверу даже в случае "application transaction" (moe), для повтора после
> deadlock достаточно опять дойти до точки deadlock-a используя как-то
> свой trlog (a может и vce rollback-ать to необязательно было бы ?),
> короче используя свои внутренние механизмы, а затем опять "отдаться"
> приложению, тогда ему (серверу) совсем не нужна будет информация о том
> что там будет "дальше", уже опять будет продолжать "рулить" application,

Вот когда придумаешь API для этого действа, тогда и поговорим.
О сложности такого мероприятия я уже и не говорю, начать хотя бы
с того, что клиент должен стать и сервером тоже, чтобы АСИНХРОННО
принимать запросы на "продолжение выполнения чего-то там".

> сделать это прозрачным для application воoбще (или пoлупрозрачным как в
> этом ObjectStore где можно задать лимит повторов после deadlock-a) безо
> всяких error типа 1205.


>
> Sybase "любит" деадлочить пусть сам и разбирается с этим до конца
> ("саночки возит"), а не "проливает кровь безвинных жертв/victims", да
> еще под лозунгом "спасение утопающих-дело рук самих утопающих".

Sybase тут далеко не одинок, все СУБД делают аналогичным образом.
Не у всех есть deadlock tune и вообще обнаружение дедлоков - большинство
СУБД попроще ограничиваются просто тайм-аутами на ожидание, т.е. что
это именно deadlock вообще не определяется. Не получил блокировку вовремя-
всё, иди на фиг со своей транзакцией.

> Вообще по части перекладывания ответственности на developer/DBA Sybase
> ASE явно "впереди планеты всей", чего стоит одно dump trlog, без
> которого СУБД просто остановится, а за который почему-то отвечает DBA со
> своими доморощенными скриптами. Hy сделайте наконец-то что-то типа
> archivelog mode как в Oracle.

Так, разагитировался
В общем, это не соответствует действительности. Впереди планеты всей,
как известно, по этому показателю именно оракл. (хотя я не в общем
лишь передаю общеозвученное мнение, ну, давайте будем считать, что
они одинаковы, но вот что ASE сильно как-то хуже, я не думаю).
А на счёт логов, так уж наверное ты знаешь , как законфигурить
ASE, чтобы она автоматом лог в базе обрезала. И знаешь, зачем сделана
возможность, чтобы лог НЕ обрезался автоматом. Так зачем всё это ?
(вопрос риторический).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35525992
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А есть способ искуственно создать deadlock, чтоб отладить клиентское приложение(код-3)?
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35526069
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den wrote:

> А есть способ искуственно создать deadlock, чтоб отладить клиентское
> приложение(код-3)?

Конечно.
Имитирующий скрипт пишется легко.
Только надо это делать в двух коннекциях.
Одна из них должна быть коннекцией тестируемого приложения.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35526187
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
cherrex_Den wrote:

> А есть способ искуственно создать deadlock, чтоб отладить клиентское
> приложение(код-3)?

Конечно.
Имитирующий скрипт пишется легко.
Только надо это делать в двух коннекциях.
Одна из них должна быть коннекцией тестируемого приложения.
Posted via ActualForum NNTP Server 1.4

А примерчек можно? И ли "наводку"! Подскажите глупому!
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35527379
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den wrote:

> > А есть способ искуственно создать deadlock, чтоб отладить клиентское
> > приложение(код-3)?

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
create tableA ( id numeric( 10 ) not null ) lock allpages
go

create tableB ( id numeric( 10 ) not null ) lock allpages
go

create procedure deadLock
--;; Автор: Андрей Шадрухин.
--;; Лицензия: Используйте как хотите, на свой страх и риск.
--;; Никакой гарантии или ответсвенности не предполагается.
--;;
as
begin tran
   lock table tableA in exclusive mode nowait
   if @@error =  12207 
   Begin
     lock table tableB in exclusive mode nowait
     if @@error <>  0 
     Begin

       goto OK
     End
     waitfor delay '00:00:30'
     update tableA
     set id = id +  1 
     goto OK
   End
   else if @@error <>  0 
   Begin

     goto OK
   End
   waitfor delay '00:00:30'
   update tableB
   set id = id +  1 
OK:
commit tran
return
 

go

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 как ase разбирается с deadlock
    #35529778
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Процедура работает! ODBC возвращает:
Код: plaintext
ERROR [ 40001 ] [DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]Your server command (family id # 0 , process id # 62 ) encountered a deadlock situation. Please re-run your command.

Правда я "-3" не нашел в ODBC, скорее это код OpenClient, но по "ERROR [40001]" все можно отловить!!!
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 как ase разбирается с deadlock
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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