Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Так у ТС блокировка из-за параллелизма или нет?

Если да, спасает ли максдоп 1?
9 ноя 17, 16:50    [20940761]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Yasha123
Member

Откуда:
Сообщений: 1973
Cammomile
Так у ТС блокировка из-за параллелизма или нет?

Если да, спасает ли максдоп 1?

какой еще параллелизм, вы видите какие-то ResType:ExchangeId?

вы читаете ли обычный текст или только жирненьким?

invm
Andy_OLAP
Ведь есть же ситуации, когда TABLOCKX использовать можно и нужно. Почему не в данной конкретной ситуации?
Может быть уважаемый эксперт пояснит, каким образом этот хинт поможет в данном конкретном случае, когда конфликтующие ресурсы это ключ и transaction mutex?


<resource-list>
<keylock hobtid="72057594056081408" dbid="31" objectname="orwellv4_10.dbo.tbCompositions" indexname="PK_Composition" id="lock39430bd00" mode="U" associatedObjectId="72057594056081408">
<owner-list>
<owner id="process3bf302ca8" mode="S"/>
</owner-list>
<waiter-list>
<waiter id="process3d6f644e8" mode="X" requestType="convert"/>
</waiter-list>
</keylock>
<TransactionMutex>
<TransactionInfo Workspace="16686586896"/>
<owner-list>
<owner id="process3d6f644e8"/>
</owner-list>
<waiter-list>
<waiter id="process3bf302ca8"/>
</waiter-list>
</TransactionMutex>
</resource-list>
9 ноя 17, 17:10    [20940848]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Молодой,

Ладно, раз никто не хочет.

У Вас -на мой взгляд - классическая FOREIGN KEY DEADLOCKS.
Вы начинаете update, на строку ложится блокировка, далее из-за триггера Вы входите в эксклюзивную блокировку, потому что update еще и на поле, которое содержит внешний ключ. И всё.

Вот у Вас FOREIGN KEY.
ALTER TABLE [dbo].[tbCompositions] WITH CHECK ADD CONSTRAINT [FK_Composition_Servers]
FOREIGN KEY([ServerGUID]) REFERENCES [dbo].[tbServers] ([ServerGUID])
А вот у Вас внутри триггера
UPDATE c SET c.ServerGUID = srv.ServerGUID
FROM [dbo].[tbCompositions] c
9 ноя 17, 17:52    [20940991]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Andy_OLAP,

а лечить это TABLOCKX 20939816?
Вы вообще читаете о чём спрашивают и открываете то что советуете?
9 ноя 17, 18:11    [20941036]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
Andy_OLAP
У Вас -на мой взгляд - классическая FOREIGN KEY DEADLOCKS.
Вы начинаете update, на строку ложится блокировка, далее из-за триггера Вы входите в эксклюзивную блокировку, потому что update еще и на поле, которое содержит внешний ключ. И всё.
"Эксперт", вы хоть в граф дедлока заглянули? Или только на картинку ориентируетесь? И даже картинка подозрений не вызвала?

Рекомендую таки заглянуть. А потом, до полного просветления в голове, изучать статью SQL Server Transaction Locking and Row Versioning Guide, раздел "Deadlocking", подраздел "Resources That Can Deadlock", последний пункт "Multiple Active Result Sets (MARS) resources"
9 ноя 17, 18:22    [20941057]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1909
Andy_OLAP,

брызгать слюной не буду, даже если не смотреть граф Ваше предположение ошибочно.
просто посмотрите внимательней на триггер и поймите что он тут не причем.
9 ноя 17, 18:27    [20941068]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
TaPaK
Andy_OLAP,

а лечить это TABLOCKX 20939816?
Вы вообще читаете о чём спрашивают и открываете то что советуете?

Я читаю не только то, о чем спрашивают сразу, но и то, о чем спросят потом.
А автор темы уже принял решение "Пока попробуем триггер в тестах удалить" - давайте дождемся результатов.
+

Вы тоже из тех, кто молодых свысока размазывали по стенке, придавливая их козлиными прозвищами? Не нужно нервничать, не нужно советовать прибивать serialize, все под контролем, работаем по периметру.
9 ноя 17, 18:30    [20941073]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
invm
потом, до полного просветления в голове последний пункт "Multiple Active Result Sets (MARS) resources"

Недавно был тут коллега, изучал проблему со своим приложением и работой MARS. Я вот не помню, чтобы Вы в первых рядах рвались ему помочь. Но ведь если такой вопрос еще возникнет - Вам будет нетрудно эту самую ссылку кинуть вопрошающему? Я Вас таки очень прошу. Спасибо.
9 ноя 17, 18:33    [20941078]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Молодой,

Коллега, вот Вам хорошая статья про дедлоки от Ашока Кумара.
9 ноя 17, 18:39    [20941096]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Yasha123
Member

Откуда:
Сообщений: 1973
Andy_OLAP
Я читаю не только то, о чем спрашивают сразу, но и то, о чем спросят потом.

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

в конце концов, сколько же можно опровергать фигню,
если каждое опровержение только провоцирует выплеск очередных фантазий с удвоенной силой?
9 ноя 17, 18:40    [20941102]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Yasha123
Молодой
Кроме написания писем в MS, есть еще какието направления как можно попытаться решить эту проблему?

такое даже не гуглится.

Коллега, я хочу подсказать Вам, как искать в гугле подобные ошибки. Вбиваете в поиске "TransactionMutex MARS foreign key". И получаете второй ссылкой по очереди хорошую статью.
9 ноя 17, 18:53    [20941128]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1909
Andy_OLAP,

Да только это первая ссылка по гуглозапросу transaction mutex и в этой статье нет ни одного упоминания о foreign key :)

а так можете гуглить дальше, глядишь и TF666 отыщите
9 ноя 17, 18:56    [20941136]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
felix_ff
Andy_OLAP,
Да только это первая ссылка по гуглозапросу transaction mutex и в этой статье нет ни одного упоминания о foreign key :)
а так можете гуглить дальше, глядишь и TF666 отыщите

+

Оффтоп он.
Вот видите, Вы уже открыли и внимательно прочитали. Я считаю, что это успех. Возможно, кто-нибудь вот так вот будет спрашивать гугл - и наткнется на номер сборки MSSQL, в которой был использован TF666. А я пока жду ответа от Рохана.
Оффтоп офф.
9 ноя 17, 19:01    [20941148]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1909
Andy_OLAP,

+

Открою Вам секрет, я читал эту статью еще довольно давно - это раз

Зато видимо Вы не изъявляете желания ознакамливаться с постами других пользователей, ибо товарищ TaPaK давал ссылку на эту же статью еще раньше, это два
9 ноя 17, 19:07    [20941162]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
Andy_OLAP
Недавно был тут коллега, изучал проблему со своим приложением и работой MARS. Я вот не помню, чтобы Вы в первых рядах рвались ему помочь.
А должен был? Или с вами без этого не полагается дискутировать?
Andy_OLAP
Коллега, вот Вам хорошая статья про дедлоки от Ашока Кумара.
Т.е. вы даже предложенную мной статью не открывали? Иначе бы увидели, что этот самый Ашока Кумар занимается копипастой документации.
9 ноя 17, 19:17    [20941187]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1909
+

раз уж тема скатилась в некоторый оффтоп, выскажу свое имхо:

AndyOLAP,
Вы же не глупый человек. Из-за постоянного подчеркивания пресловутого "экспертного мнения", игнорирования доводов других пользователей, может явно, а может нет выставляете себя в глазах других посетителей форума в каждой бочке затычкой.

При этом в большинстве тех рекомендаций которые Вы приводите лично я с Вами не согласен.

К сожалению уже сложилось мнение что Вы пытаетесь жирно троллить. Не очень приятно это видеть на техническом форуме.
9 ноя 17, 19:56    [20941278]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Yasha123
Member

Откуда:
Сообщений: 1973
felix_ff
+

AndyOLAP,
Вы же не глупый человек

+

правда что ли?
неужели же неглупый человек ни разу не усомнится в своей компетентности?
до такой степени, что ни одну предложенную ссылку даже ради интереса не откроет?

зато поучать горазд, ага.
научил, оказывается, в гугле искать.
привел тучу ссылок, но ни в одной из них нет дедлока вида key + mutex.
аааа, наверное он всех по себе мерит, и думал, что и ТС, и я, все ищем-не найдем, что же такое mutex?
нет, дарагуля, хочешь блеснуть умением искать, найди-ка нам дедлок указанного вида

сомневаюсь, правда, что он сейчас меня слышит.
это же особый глухарь -- токующий.
абсолютно не воспринимает, что ему говорят.
главная задача глухаря -- побольше надуться и подольше поорать
9 ноя 17, 22:05    [20941557]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
Извините, что временно пропал - нагрузочные тесты можем пускать только в ночь,
а выстреливает этот дидлок раз в несколько часов.
натестили пока немного по времени и с двумя таблетками сразу:

1)
USE DB  
GO   
EXEC sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE WITH OVERRIDE;  
GO  
EXEC sp_configure 'max degree of parallelism', 1;  
GO  
RECONFIGURE WITH OVERRIDE;  
GO  


2) Удалили триггер

Пока Deadlock не словили - оставим тесты на выходные,
если Deadlock не выстрелит - будем уже определять какая из таблеток помогла.
10 ноя 17, 16:38    [20944326]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
В итоге:
Отключение параллельного выполнения и полное удаление триггера - не помогло.
Тот же дидлок словили в выходные - во вложении.

Будем как то переписывать запрос.

К сообщению приложен файл (Deadlock_3_SP2.xdl - 6Kb) cкачать
13 ноя 17, 12:02    [20948738]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
Тут еще одна "мелочь" всплыла ))
Включен аудит изменения таблицы...
Попробуем:
ALTER TABLE [dbo].[tbCompositions] DISABLE CHANGE_TRACKING  
13 ноя 17, 12:33    [20948874]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Yasha123
Member

Откуда:
Сообщений: 1973
неожиданно, да?
зато параллельность на сервер прибили, это славно.
---
кстати, следующими предложениями от Andy_OLAP будут убитие FK
+ включение всех флагов подряд.
---
вам этот MARS точно нужен?
13 ноя 17, 12:36    [20948887]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Yasha123
Member

Откуда:
Сообщений: 1973
Молодой
Тут еще одна "мелочь" всплыла ))
Включен аудит изменения таблицы...
Попробуем:
ALTER TABLE [dbo].[tbCompositions] DISABLE CHANGE_TRACKING  

о, да вы достойный последователь нашего писателя-эксперта.
не буду вам мешать в дальнейшей деятельность по отключению всего, что под руку попадет
13 ноя 17, 12:38    [20948895]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Молодой
Andy_OLAP,


Скрипт таблицы

CREATE TABLE [dbo].[tbCompositions](
	[CompositionID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
	[ServerID] [int] NOT NULL,
	[CompositionType] [int] NOT NULL,
	[CompositionName] [nvarchar](128) NOT NULL,
	[CompositionConf] [xml](CONTENT [dbo].[CompositionCompositionConf]) NULL,
	[CompositionGUID] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
	[ServerGUID] [uniqueidentifier] NOT NULL,
 CONSTRAINT [PK_Composition] PRIMARY KEY CLUSTERED 
([CompositionGUID] DESC) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


ALTER TABLE [dbo].[tbCompositions] ADD  DEFAULT (newsequentialid()) FOR [CompositionGUID]

ALTER TABLE [dbo].[tbCompositions]  WITH CHECK ADD  CONSTRAINT [FK_Composition_Servers] 
FOREIGN KEY([ServerGUID]) REFERENCES [dbo].[tbServers] ([ServerGUID])

ALTER TABLE [dbo].[tbCompositions] CHECK CONSTRAINT [FK_Composition_Servers]

ALTER TABLE [dbo].[tbCompositions] ADD  CONSTRAINT [PK_Composition] PRIMARY KEY CLUSTERED ([CompositionGUID] DESC)



Могу лишь посоветовать прочитать ссылку про то, что Microsoft ответила на прямой вопрос, что не гарантирует насчет condition, если столбец Identity есть (CompositionID), но он не PRIMARY KEY, а PRIMARY KEY другой столбец (CompositionGUID).
13 ноя 17, 12:42    [20948911]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Молодой,

Коллега, я вот не видел ни разу в своей практике, чтобы столбец Identity(1,1) при этом не был явно PRIMARY KEY. Вам точно нужно на другой столбец такое?
13 ноя 17, 12:45    [20948931]     Ответить | Цитировать Сообщить модератору
 Re: Процесс создал Deadlock сам на себя. Как дальше жить?  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
Yasha123
неожиданно, да?
зато параллельность на сервер прибили, это славно.
---
кстати, следующими предложениями от Andy_OLAP будут убитие FK
+ включение всех флагов подряд.
---
вам этот MARS точно нужен?



Все проверяем на тестовом SQL сервере.
Параллельность прибили - ни кто не пострадал.
Клиент же не шлет никаких криминальных запросов.
C MARS просто более долгая история, с тем как исправления вносить и разбираться на сколько он нужен на клиентской части.
Поэкспериментируем пока на SQL что можем, потом с клиентом будем разбираться.
13 ноя 17, 12:46    [20948940]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить