Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
Процедура выполняет на MS SQL Server 2000 последовательность обновлений: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. а)точно диагностировать точку DeadLockа, б) как-то довести процесс до конца, чтобы не вылетала программа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 08:32 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
1. Так Вы концов не найдете... и обработка ошибок вам здесь не поможет... Идите лучше на форум по MS SQL... Там мобть и посоветуют как найти пр-е место... и как следует бороться с мб 2. Ну... споймав эту ошибку попробуйте повторить операцию через задержку... можно сделать ограничение на кол-во таких попыток... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 12:14 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
StokКак написать грамотный блок обработки ошибки, чтобы: а)точно диагностировать точку DeadLockа, б) как-то довести процесс до конца, чтобы не вылетала программа.Начнем с пункта б) б) - я ниже привел очень простой пример обработчика ошибок, к-й по крайней мере позволит "как-то довести процесс до конца, чтобы не вылетала программа". Его можно дополнить помня о том, что в ADO ошибки, пришедшие с сервера хранятся в коллекции ActiveConnection.Errors, следовательно в обработчике ошибок можно анализировать ее на предмет соответствия определенному номеру ошибки. Можно воспользоваться недокументированной (кажется) функцией Erl, которая вернет номер стороки кода с ошибкой. Но строки должны быть пронумерованы. В MSDN обработка ошибок достаточно хорошо документирована. Почитайте Debugging Your Code and Handling Errors, Generating and Handling Errors in ActiveX Components а) теперь главное. Deadlock-и надо ловить серверными средствами,это быстрее и точнее. Спросите (а перед этим поищите) на главном форуме, но перед этим прочтите раздел BooksOnLine Troubleshooting Deadlocks Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 12:40 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
авторМожно воспользоваться недокументированной (кажется) функцией Erl, которая вернет номер стороки кода с ошибкой Эта функция вернет номер строки, только если эти номера предварительно проставлены :-)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 13:50 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
Желательно смотреть QA , какие транзакции лочатся, смотреть запросы. Во многих случая это дело можно оптимизировать. Также, в зависимости от важности транзакций, пересмотреть Isolation Level. Если явноых транзакций нет, то каждый статмент является транзакцией. Что то здесь не то. Код неполный, при текущем раскладе , такие вызовы не могут вызвать дедлок, максимум - должны отваливатся по таймауту, т.к. ресурсы уже залочены. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 15:23 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
Magnus23 такие вызовы не могут вызвать дедлок, максимум - должны отваливатся по таймауту Мы не знаем что происходит в процедуре My_SyncData. А там может происходить все, что угодно. П.э. я посоветовал диагностировать Deadlock на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 15:43 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinov Magnus23 такие вызовы не могут вызвать дедлок, максимум - должны отваливатся по таймауту Мы не знаем что происходит в процедуре My_SyncData. А там может происходить все, что угодно. П.э. я посоветовал диагностировать Deadlock на сервере. Хм, я на твой код смотрел и мне что то казалось будто у него локи на всех вызовах :). При таком раскладе, лочится действительно может только My_SyncData с каким то другим процессом, либо сама с собой из другого клиента. 2 автор Код My_SyncData можно глянуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 16:07 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
Magnus23При таком аскладе лочится действительно может только My_SyncData с каким то другим процессом, либо сама с собой из другого клиента. а если на каждой или какой-то из этих таблиц или View, над которыми происходят Delete, Insert, Update висит триггер, который делает неизвестно что ? :) Я не придираюсь, я просто еще раз говорю - что эту проблему лучше решать на сервере, следую рекомендациям BOL, чем гадать здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 16:15 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinov Magnus23При таком аскладе лочится действительно может только My_SyncData с каким то другим процессом, либо сама с собой из другого клиента. а если на каждой или какой-то из этих таблиц или View, над которыми происходят Delete, Insert, Update висит триггер, который делает неизвестно что ? :) Я не придираюсь, я просто еще раз говорю - что эту проблему лучше решать на сервере, следую рекомендациям BOL, чем гадать здесь. Судя по представленному коду, думаю триггеров там нет :), это все вообще надо делать в хранимке в пределах одной транзакции. Я ж про сервер и говорю, sp_lock ;) Эту проблему однозначно нужно решать на сервере. На клиенте можно только костыли подставлять :). 2 Stok Ну ты понял, телепаты в отпуске :), коды всего что есть в студию! Или он уже на ГФ убег? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 16:43 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
Большое спасибо, джентльмены, в первую очередь - Alexey Kudinov! То, что надо ковыряться на сервере - это было ясно с самого начала. Но, поскольку ошибка крайне нестационарная, надо было локализовать условия ее возникновения у клиента. Не имея под руками MSDN и не очень разбираясь в VB, я просто хотел узнать, как в обработчике представить объект ADO Error. Написал пока следующее: Код: 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. Смерть DeadLock-ам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 11:40 |
|
||
|
Обработка DeadLock-ов в ADO
|
|||
|---|---|---|---|
|
#18+
StokAdoError: On Error Resume Next i = 1 ' Ошибка VB StrTmp = StrTmp & vbCrLf & "VB Error # " & Str(Err.Number) StrTmp = StrTmp & vbCrLf & " Сгенерировано при " & Err.Source StrTmp = StrTmp & vbCrLf & " Смысл: " & Err.Description StrTmp = StrTmp & vbCrLf & " Строка SQL: " & CmdT.CommandText ' Ошибки ADO On error resume next сбрасывает ошибку в объекте Err. Следовательно строки, идущие после On Error Resume Next и касающиеся объекта Err бессмысленны. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Пошел ждать, что получится... Вам не ждать надо. Вернее ждать, но так. Надо прочитать раздел BOL Troubleshooting Deadlocks. Там написано как правильно "жать" Deadlock-а. BOLWith SQL Server 2000, you can determine the resources involved in a deadlock and troubleshoot locking by using SQL Profiler or Trace Flag 1204 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:04 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32728428&tid=2168787]: |
0ms |
get settings: |
12ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
95ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 258ms |
| total: | 479ms |

| 0 / 0 |
