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

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

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

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

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

Насчет return status (code) = -3 не пробовал проверить, может и можно,
хотя сомеваюсь, т.к. "проверялка" сама должна быть в коде скажем этой же
sp a она сразу отрубается как процесс сервером.
...
Рейтинг: 0 / 0
18.08.2008, 19:37
    #35493517
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
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
18.08.2008, 19:47
    #35493533
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
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
18.08.2008, 20:19
    #35493565
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
Zhoraотрубается как процесс сервером.

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

На сколько я помню, соединение не разрывается.
Процесс прекращается, т.е. останавливается выполнение
всех посланных комманд (и текущей выполняемой также).
Транзакция откатывается. Соединение переводится в состояние,
когда оно может принимать последующие запросы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
18.08.2008, 23:20
    #35493742
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
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
18.08.2008, 23:28
    #35493750
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
Вернее в чем отличие между тем что транзакцию повторит клиент(приложение) или сервер(сам ASE)?
...
Рейтинг: 0 / 0
19.08.2008, 00:03
    #35493765
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
Я тоже так думаю, по крайней мере я использую некий стандарт где все транзакции начинаются и
заканчиваются (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
19.08.2008, 09:57
    #35493992
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
cherrex_Den wrote:

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

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

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

И это, кстати, тоже.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.08.2008, 10:04
    #35494008
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
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
19.08.2008, 10:16
    #35494036
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
Zhora wrote:

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

почему-то не удалось мне прочитать страницу эту. Там
в центре - пустое поле и всё. Сама страница загружается.
Там на флешах что ли всё ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.08.2008, 22:16
    #35495882
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
Не знаю, но я теперь тоже не могу прочитать, хотя вчера мог. Что касается транзакций - это самые обычные "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
19.08.2008, 23:53
    #35495939
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
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
06.09.2008, 16:48
    #35525992
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
А есть способ искуственно создать deadlock, чтоб отладить клиентское приложение(код-3)?
...
Рейтинг: 0 / 0
06.09.2008, 19:03
    #35526069
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
cherrex_Den wrote:

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

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

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

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

А примерчек можно? И ли "наводку"! Подскажите глупому!
...
Рейтинг: 0 / 0
08.09.2008, 11:46
    #35527379
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
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
09.09.2008, 14:09
    #35529778
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как ase разбирается с deadlock
Спасибо! Процедура работает! 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
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 как ase разбирается с deadlock / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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