Как найти причину Deadlock в MS SQL

User avatar
VladDod
Уже с Приветом
Posts: 56205
Joined: 06 May 2001 09:01

Re: Как найти причину Deadlock в MS SQL

Post by VladDod »

Dmitry67 wrote: 20 Oct 2017 06:09 Поясню
Вы приходите в реальный проект. Там проблемы с дедлоками. Вы начинаете разбираеться. Там 1000000 строк кода на .net который что-то делает в нескольких продуктах, причем некоторые легаси а некоторые даже третьих фирм.

Разумеется, правильным порядком в транзакцию там и не пахнет- кто в лес, а кто по дрова. Что посоветуете? Переписать ВСЕ? Это похоже на совет мышам стать ежиками, как в известном анекдоте
я в такой ситуации дополнительный синхронизатор между базой и клиентами вставлял. Другими словами: заменил вызов sql в системе на свой, который сперва по полочкам все разложил, а потом уже выполнял реальный вызов.
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
iDesperado
Уже с Приветом
Posts: 1349
Joined: 28 Nov 2008 17:50

Re: Как найти причину Deadlock в MS SQL

Post by iDesperado »

ALV00 wrote: 20 Oct 2017 02:13 А если 20 индексов на таблице, они все блокируются? Это же может тормозить сильно.
при чтении с индекса ты можешь положить 1 range lock, вместо мульенов локов на таблицу. уже обалденный выигрыш. плюс у мскл я помню полно оптимизаций на эту тему. там можно считать значение с индекса в тот момент когда строка залочена эксклюзивно и меняются значения полей, не входящие в индекс.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Как найти причину Deadlock в MS SQL

Post by Dmitry67 »

zVlad wrote: 19 Oct 2017 14:05 Ну вы, ребята, даете. Читать сообщения на нормальном английском языке разучились со своими xml и графами.
Кстати, хотел вернуться к этой вкусной теме
Мейнфреймовцы имеют какой то особый стиль писать сообщения
Они ни фига не похожи на нормальный английский язык

Допустим я хотел бы сделать user friendly сообщение о check engine в автомобиле
У обычного программиста это выглядело бы так:
Check Engine on Odometer reading=34555mi
Error code: 108 (Spark damaged or other problems)
Cylinder 3.
У мейнфреймовца это выглядело бы так:

Code: Select all

-----
ERRCND=108 
SENSR 0x22 SENSRNAME=ODOMTR VALUE=34555 VALUE.UNIT=MI
CYL 0x0=STATUS OK CYL 0x1=STATUS OK 
CYL 0x2=ERR REASON 0x347373 REASNTYP=45
CYL 0x3=STATUS OK
DIAG MGR *****
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Как найти причину Deadlock в MS SQL

Post by Dmitry67 »

Для тех, кто хочет писать также, нехитрые советы
1. ONLY UPPERCASE !!!
2. Больше сокращений, не ERROR TYPE а ERRTYP
3. Выкидывайте больше гласных, REASON можно сократить до RSN. Если не будете сокращать, то кончатся все 80 позиций на перфокарте!
4. Больше умничания, больше hex, непонятных слов и сокращений. Главное - самая важная информация должна потонуть в этом месиве!
5. Выводите только код проблемы, и НИ В КОЕМ СЛУЧАЕ ее описание. Ничего, найдут в документации по коду.
6. Напоследок - шлифанте результат ascii art - немножно ----, *** итд по вкусу.
Et voila!
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
ALV00
Уже с Приветом
Posts: 1494
Joined: 08 Mar 2002 10:01
Location: NJ

Re: Как найти причину Deadlock в MS SQL

Post by ALV00 »

Dmitry67 wrote: 20 Oct 2017 08:56 У мейнфреймовца это выглядело бы так:
LOL. А на XML было бы так:

Code: Select all

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE HTML PUBLIC "-//VAZ MOTORS//DTD HTML 4.0 Transitional//EN" "http://www.blahlbah.org/dadidadah/govno/govno/%81%AB%EF%A4%EC%20%F1%A1%20%E2%A2%AE%EE%20%AC%A0%E2%EC.dtd" >
<?xml-stylesheet type="text/xsl" href="http://www.blahlbah.org/dadidadah/govno/govno/%8F%A8%A7%A4%A5%E6%20%8F%A8%A7%A4%A5%E6.xsl"?>
<vaz:document xmlns:vaz = "http://www.blahlbah.org/dadidadah/govno/govno/%8F%A8%A7%A4%A5%E6%20%8F%A8%A7%A4%A5%E6.xhtml">
<!-- here_we_go_to_the_f_cking_business_at_last  -->
<vaz:the_message>Check Engine</vaz:the_message>
<vaz:odometer>
<vaz:reading measure = "mi">34555</vaz:reading>
</vaz:odometer>
<vaz:error>
<vaz:code>108</vaz:code>
<vaz:error_message>Spark damaged or other problems</vaz:error_message>
<vaz:location type = "cylinder">3</vaz:location>
</vaz:error>
</vaz:document>
iDesperado
Уже с Приветом
Posts: 1349
Joined: 28 Nov 2008 17:50

Re: Как найти причину Deadlock в MS SQL

Post by iDesperado »

да, но xml рендерится в сексуальные картинки, читать то xml никто не просит
alex_127
Уже с Приветом
Posts: 7723
Joined: 29 Mar 2000 10:01
Location: Kirkland,WA

Re: Как найти причину Deadlock в MS SQL

Post by alex_127 »

Я автор большого куска этого xml. Сам придумывал, никто пальцем не указывал - так что плюхи мне если что. Xml был введен в 2002 году, тогда слово json не слышали. С предыдушим текстовым было много проблем - тяжело натравливать тулзы на него было.
Кстати, ничего дополнительно включать не надо для сбора таких событий - https://blog.sqlauthority.com/2017/01/0 ... ed-events/

А что касается как с ними бороться - это трудно. Highest cost support cases in average...
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Как найти причину Deadlock в MS SQL

Post by Сабина »

zVlad wrote: 18 Oct 2017 19:22 Причина у deadlock одна, и устраняется она переписыванием программ.
:lol:

У MSSQL servera это проблема настолько чаще встречается, что в данном случае наверное только переписыванием самого движка. Что безусловно тоже программа :roll:
https://www.youtube.com/watch?v=wOwblaKmyVw
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Re: Как найти причину Deadlock в MS SQL

Post by zVlad »

Сабина wrote: 01 Nov 2017 17:30
zVlad wrote: 18 Oct 2017 19:22 Причина у deadlock одна, и устраняется она переписыванием программ.
:lol:

У MSSQL servera это проблема настолько чаще встречается, что в данном случае наверное только переписыванием самого движка. Что безусловно тоже программа :roll:
Движок переписать можно было бы конечно, но причину deadlock переписыванием движка не изменишь. Только переписывание прикладных програм, или лучше написание их сразу с учетом многопользовательской среды выполнения.

Зная Ваш оракловский бэкграунд сразу скажу что версионник только создает иллюзию оптимального движка с точки зрения разделения доступа к ресурсам.
mskmel
Уже с Приветом
Posts: 946
Joined: 24 Sep 2013 05:58
Location: US\GA

Re: Как найти причину Deadlock в MS SQL

Post by mskmel »

Lazy444 wrote: 02 Nov 2017 16:49Любопытства ради : А как в MSSQL можно отловить тот комп, с которого происходит login with incorrect password, и пользователь locked ?
Первая ссылка: https://www.google.com/search?q=ms+sql+ ... tdit+login
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Как найти причину Deadlock в MS SQL

Post by Dmitry67 »

Lazy444 wrote: 02 Nov 2017 16:49 Любопытства ради : А как в MSSQL можно отловить тот комп, с которого происходит login with incorrect password, и пользователь locked ?

Знаю как это делается в Оракле, но не знаю, как это делается в MS SQL.
Если используется Windows Login, то сиквелу пароль не передается, а передается токен уже зарегистрированного пользователя. Если пароль неправильный, то до логина к сиквелу даже не дойдет.

Если же используется SQL login, то неправильный пароль его никогда не лочит

Failed logins по умолчанию логгируются в логе, там же указан IP
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
ie
Уже с Приветом
Posts: 11019
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: Как найти причину Deadlock в MS SQL

Post by ie »

zVlad wrote: 01 Nov 2017 19:33
Сабина wrote: 01 Nov 2017 17:30
zVlad wrote: 18 Oct 2017 19:22 Причина у deadlock одна, и устраняется она переписыванием программ.
в данном случае наверное только переписыванием самого движка.
Движок переписать можно было бы конечно
да! и чтоб два раза ни вставать перепишите виндовс тоже. :wink:
alex_127
Уже с Приветом
Posts: 7723
Joined: 29 Mar 2000 10:01
Location: Kirkland,WA

Re: Как найти причину Deadlock в MS SQL

Post by alex_127 »

эй, MSSQL - он на линухе теперь работает - может kernel сразу стоит тоже кардинально украсивить?
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Re: Как найти причину Deadlock в MS SQL

Post by zVlad »

ie wrote: 02 Nov 2017 18:23
zVlad wrote: 01 Nov 2017 19:33
Сабина wrote: 01 Nov 2017 17:30
zVlad wrote: 18 Oct 2017 19:22 Причина у deadlock одна, и устраняется она переписыванием программ.
в данном случае наверное только переписыванием самого движка.
Движок переписать можно было бы конечно
да! и чтоб два раза ни вставать перепишите виндовс тоже. :wink:
По мне так причин переписать Windows гораздо больше чем причин переписать MS SQL. Из того моего сообщение явно видно что я не сторонник переписывать MS SQL (движок), но Вы обрезали мое сообщения и тем самых исказили смысл до наоборот. Молодец! Способный фальсификатор получился бы.
User avatar
ie
Уже с Приветом
Posts: 11019
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: Как найти причину Deadlock в MS SQL

Post by ie »

zVlad wrote: 02 Nov 2017 19:14
ie wrote: 02 Nov 2017 18:23
zVlad wrote: 01 Nov 2017 19:33
Сабина wrote: 01 Nov 2017 17:30
zVlad wrote: 18 Oct 2017 19:22 Причина у deadlock одна, и устраняется она переписыванием программ.
в данном случае наверное только переписыванием самого движка.
Движок переписать можно было бы конечно
да! и чтоб два раза ни вставать перепишите виндовс тоже. :wink:
По мне так причин переписать Windows гораздо больше чем причин переписать MS SQL. Из того моего сообщение явно видно что я не сторонник переписывать MS SQL (движок), но Вы обрезали мое сообщения и тем самых исказили смысл до наоборот. Молодец! Способный фальсификатор получился бы.
конешно, нас програмистов-экстраординари медом не корми, дай порассуждать о том как все можно переписать.
и все будет правильно и надежно. :wink:

Return to “Вопросы и новости IT”