Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Вниз

MS SQL deadlock   Найти похожие ветки 

 
ProstoTak ©   (2014-10-03 15:21) [0]

В программе, которая цепляется к MS SQL Server 2005 через ADO выдается:

Transaction was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

http://goo.gl/FZcqHk

В мониторе активности для данного процесса стоит: "exec MyProc 1, 0, 0, 0"

MyProc это простая процедура, которая делает SELECT с несколькими джойнами

PROCEDURE MyProc(@flag1 bit, @flag2 bit, @flag3 bit, @flag4 bit)
AS
BEGIN
   SELECT ...
   FROM tblClaim a
 INNER JOIN ...
  ON ...
 LEFT JOIN ...
  ON ...
 LEFT JOIN ...
  ON ...
WHERE (x.y = @flag1) ... AND ...
ORDER BY zzz DESC
END


Собственно, и все. Отчего может возникать дедлок?!

Возникает очень редко, но бывает. Причем если начинает возникать - то массово. А потом пропадет.


 
junglecat ©   (2014-10-03 15:30) [1]

а кто-то может параллельно обновлять участвующие таблицы? или читать с блокировкой?
попробуй
SELECT ...
FROM tblClaim a WITH (NOLOCK)

ну и в джойнах тоже добавь WITH (NOLOCK)


 
ProstoTak ©   (2014-10-03 15:31) [2]


> а кто-то может параллельно обновлять участвующие таблицы?

может. Но ведь программа должна зависнуть в ожидании окончания разблокировки.

Как select может выдать дедлок?


 
junglecat ©   (2014-10-03 15:44) [3]

> Как select может выдать дедлок?

если уровень изоляции read commited, то запросто

процесс А селект из таб А джойн Б - залочили страницу
процесс Х апдейт таблицы Б джойн А - вдруг по условию залочили ту же страницу, ждем А, а А в это время ждет Б.
Дед Лок пришел.


 
ProstoTak ©   (2014-10-03 16:30) [4]


> процесс Х апдейт таблицы Б джойн А

это как?


 
junglecat ©   (2014-10-03 17:22) [5]

http://technet.microsoft.com/ru-ru/library/ms178104(v=sql.105).aspx


 
ВладОшин ©   (2014-10-03 18:15) [6]

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


 
ProstoTak ©   (2014-10-03 18:31) [7]


> http://technet.microsoft.com/ru-ru/library/ms178104(v=sql.
> 105).aspx

я это читал. Я не понял как можно апдейтить с джойном.


> есть подозрение..

озвучь? Просто проблема крайне плавающая, быстро сама по себе исчезающая, поэтому сложно что-то анализировать :(


 
Кщд ©   (2014-10-03 18:32) [8]

>junglecat ©   (03.10.14 15:30) [1]
dirty reads - плохо-плохой совет


 
Кщд ©   (2014-10-03 18:36) [9]

>ProstoTak ©   (03.10.14 18:31) [7]
>я это читал. Я не понял как можно апдейтить с джойном.
просто:
1. определить запросы, вызывающие deadlock (трассировка);
2. скорректировать подход к работе с данными (почитать про блокировочники и best practice).


 
ВладОшин ©   (2014-10-03 18:40) [10]

да что озвучивать..
как только у MSSQL возникают проблемы с коннектом, начинаются такие ошибки

т.е. или сисадмин что-то должен выставить или надо принять как данность и
сидеть на стуле прямо, обрабатывая ошибки

вопрос или у меня так(как только у MSSQL возникают проблемы с коннектом, начинаются такие ошибки) или у всех


 
ВладОшин ©   (2014-10-03 18:42) [11]

причем в программе ничего не менялось, а ошибки то есть то нет
сплошь  рядом, есть такое, да
по наблиюдениям именно  от скорсоти ответа зависит.


 
Кщд ©   (2014-10-03 20:44) [12]

>ВладОшин ©   (03.10.14 18:42) [11]
зачем гадать?
трассируйте


 
ВладОшин ©   (2014-10-03 20:55) [13]


> Кщд ©   (03.10.14 20:44) [12]

да я бы рад, но сейчас нет таких проблем.

было два дня назад, ночью
спал тогда :)

там у меня execept.. end - и заново, если что (ну, что бы хоть что-то делалаось)
когда в след.раз будет - неизвестно.

прямо сейчас зарядить и ждать- нецелесообразно, имхо. Такое было последний раз в марте, вроде, не помню уже.. Ждать что ли пол-года, логируя каждый чих..


 
ВладОшин ©   (2014-10-03 21:01) [14]

тогда зачем написано

> сплошь  рядом, есть такое, да


неправильно тогда написано.
уточнение - Было пару раз, подозреваю пропорциональность ответу

в принципе, можно,завтра проэмулировать
через какой нить китайский, потом индийский, потом .. ский проксий прокси добиться ответа в 30-40 секунд и проверить..


Попробуем :)

спасибо :)


 
turbouser ©   (2014-10-03 22:58) [15]


> ВладОшин ©   (03.10.14 18:40) [10]
>
> да что озвучивать..
> как только у MSSQL возникают проблемы с коннектом, начинаются
> такие ошибки

Что-то в консерватории не так


 
ProstoTak ©   (2014-10-04 13:02) [16]


> просто

что просто? Камрад junglecat написал:


> процесс Х апдейт таблицы Б джойн А

у меня вопрос - как можно апдейтить с джойном.

А более крупный вопрос - как SELECT может вызывать deadlock.


 
junglecat ©   (2014-10-04 13:27) [17]

> как SELECT может вызывать deadlock.

сам по себе селект нет. Но он выбирается жертвой дедлока как наименее приоритетная транзакция, поскольку не обновляет данные


 
junglecat ©   (2014-10-04 13:58) [18]

https://www.simple-talk.com/sql/performance/sql-server-deadlocks-by-example/


 
turbouser ©   (2014-10-04 16:44) [19]


> junglecat ©   (04.10.14 13:27) [17]


> сам по себе селект нет. Но он выбирается жертвой

КО

> ProstoTak ©

а кто headblocker в таких ситуациях?


 
junglecat ©   (2014-10-04 17:29) [20]

> [0] ProstoTak ©   (03.10.14 15:21)

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


 
ProstoTak ©   (2014-10-04 22:58) [21]


> сам по себе селект нет. Но он выбирается жертвой дедлока
> как наименее приоритетная транзакция

ничего не понимаю. Если select наталкивается на блокировку - он просто будет ЖДАТЬ окончания модификации данных.

Каким образом он может привести к дедлоку?


 
junglecat ©   (2014-10-04 23:29) [22]

> Каким образом он может привести к дедлоку?

например, селекту нужны 2 индекса для покрытия запроса, и параллельному апдейту тоже нужны эти же 2 индекса. Здесь они и могут упереться рогом.
или вот
http://blogs.msdn.com/b/bartd/archive/2006/09/25/deadlock-troubleshooting-part-3.aspx


 
ВладОшин ©   (2014-10-04 23:39) [23]


> Каким образом он может привести к дедлоку?

  SELECT ...
  FROM tblClaim a
  INNER JOIN tblInfo

время t
процесс_X1 в рамках транзакции Т1 залочил под апдейт tblClaim

время t +1
процесс_Select в рамках транзакции Т2 встал в очередь лочить

время t +2
процесс_X1 в рамках транзакции Т1 захотел залочить tblInfo, но процесс_Select уже ее залочил и ждет освобождения

Т1 не может закончить транзакцию из-за процесс_Select
процесс_Select  не может начать из-за Т1

если  процесс_Select
>> если уровень изоляции read commited,

можно попробовать  дописать WITH (NOLOCK) за каждой таблой, если не важно гарантированность согласования
или установить соотв уровень через  set transaction

-------------
PS
а мое подозрение на долгий отклик походу ни при чем, не воспроизвелось
------

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

Спросите причастных, не добавили ли они что недавно. Админ что-то подкрутил, например, другой программер изменил свою какую процедуру по этим же таблам..



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.044 c
15-1412857366
Jeer
2014-10-09 16:22
2015.09.10
TIniFile in memory


15-1413896047
Ellisium
2014-10-21 16:54
2015.09.10
ado при execsql не выдает ошибку?


11-1259936563
Егорка
2009-12-04 17:22
2015.09.10
Сервисы + Win7


15-1417444886
Trylok
2014-12-01 17:41
2015.09.10
Перевести на английский


15-1414688410
Rouse_
2014-10-30 21:00
2015.09.10
Вах... вынос мозга :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский