powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Дедлоки с Intent Locks объектов
41 сообщений из 41, показаны все 2 страниц
Дедлоки с Intent Locks объектов
    #39749396
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Помогаю разработчикам с определением причин появления дедлоков. Изначально было похоже на классику: проблема с одной из таблиц, две страницы в ней, два запроса.
Первый запрос с Insert и Select блочит первую страницу и хочет вторую, а второй запрос заблочил вторую страницу и хочет первую. Стандартный дедлок, вопросов не было.

Эту часть переработали, но проблема осталась. Сейчас при дедлоке на этой же таблице блочат друг друга два селекта.

Данные собраны через Extended Events. Прикладываю схему.
По схеме блокировку первой страницы делает почему-то не S, а IX и SIX, что для выловленных запросов избыточно. Насколько я понимаю, для решения проблемы нужно понять, почему ставит блокировку не S, и по возможности изменить этот момент. Но пока причин не вижу.

Проблемная таблица "n_order_marketing_complex_service" - одна из трех таблиц участвующих в join.

Запрос жертва:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
(@P1 nvarchar(4000))
            SELECT
                1 flow_doctype,
                ote.order_num flow_id,
                ote.order_num order_num,
                IIF(omcs.service_id IS NULL, od.serv_id, omcs.service_id) AS serv_id,
                1 count,
                IIF(omcs.service_id IS NULL, od.price, omcs.price) AS price,
                1 flow_type,
                ote.DateReg flow_date,
                IIF(omcs.service_id IS NULL, od.total, omcs.total) AS total,
                od.bonuses,
                od.cito_factor,
                ote.OrderKontragentID sender_id,
                ote.OrderDiscount discount,
                IIF(omcs.service_id IS NULL, od.outlet_price, dbo.GetPrice(ote.reg_point, omcs.service_id, ote.DateIns)) outlet_price,
                IIF(omcs.service_id IS NULL, od.order_service_id, CONCAT(od.order_num, '/', omcs.service_id)) AS order_service_id,
                omcs.complex_id
            FROM n_OrderDetail od
                LEFT JOIN OrdersToExport ote ON ote.order_num = od.order_num
                LEFT JOIN n_order_marketing_complex_service omcs ON omcs.order_num = od.order_num AND omcs.complex_id = od.serv_id
            WHERE ote.order_num = @P1



Оставшийся запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
(@P1 nvarchar(8))
            SELECT
                1 flow_doctype,
                ote.order_num flow_id,
                ote.order_num order_num,
                IIF(omcs.service_id IS NULL, od.serv_id, omcs.service_id) AS serv_id,
                1 count,
                IIF(omcs.service_id IS NULL, od.price, omcs.price) AS price,
                1 flow_type,
                ote.DateReg flow_date,
                IIF(omcs.service_id IS NULL, od.total, omcs.total) AS total,
                od.bonuses,
                od.cito_factor,
                ote.OrderKontragentID sender_id,
                ote.OrderDiscount discount,
                IIF(omcs.service_id IS NULL, od.outlet_price, dbo.GetPrice(ote.reg_point, omcs.service_id, ote.DateIns)) outlet_price,
                IIF(omcs.service_id IS NULL, od.order_service_id, CONCAT(od.order_num, '/', omcs.service_id)) AS order_service_id,
                omcs.complex_id
            FROM n_OrderDetail od
                LEFT JOIN OrdersToExport ote ON ote.order_num = od.order_num
                LEFT JOIN n_order_marketing_complex_service omcs ON omcs.order_num = od.order_num AND omcs.complex_id = od.serv_id
            WHERE ote.order_num = @P1
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749401
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danion,

т.е. SELECT без видимых причин решил что ему нужен SIX? Граф дедлока в xml покажите
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749416
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Причина наверняка где-то есть.

План XML: (скрыл имя хоста, пользователя и базу)

Код: xml
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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
<deadlock>
 <victim-list>
  <victimProcess id="process42eef144e8" />
 </victim-list>
 <process-list>
  <process id="process42eef144e8" taskpriority="0" logused="12536" waitresource="PAGE: 9:1:116120662 " waittime="1049" ownerId="30254457035" transactionname="user_transaction" lasttranstarted="2018-12-18T10:48:41.147" XDES="0x4e382696c8" lockMode="S" schedulerid="1" kpid="11736" status="suspended" spid="3547" sbid="1" ecid="0" priority="0" trancount="1" lastbatchstarted="2018-12-18T10:48:41.283" lastbatchcompleted="2018-12-18T10:48:41.283" lastattention="1900-01-01T00:00:00.283" hostname=" скрыто " hostpid="0" loginname=" скрыто " isolationlevel="read committed (2)" xactid="30254457035" currentdb="9" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
   <executionStack>
    <frame procname="adhoc" line="2" stmtstart="66" stmtend="2428" sqlhandle="0x02000000b2230d0756002740d3d3ca09f315bfc98114fd7c0000000000000000000000000000000000000000">
unknown    </frame>
    <frame procname="unknown" line="1" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000">
unknown    </frame>
   </executionStack>
   <inputbuf>
(@P1 nvarchar(4000))
            SELECT
                1 flow_doctype,
                ote.order_num flow_id,
                ote.order_num order_num,
                IIF(omcs.service_id IS NULL, od.serv_id, omcs.service_id) AS serv_id,
                1 count,
                IIF(omcs.service_id IS NULL, od.price, omcs.price) AS price,
                1 flow_type,
                ote.DateReg flow_date,
                IIF(omcs.service_id IS NULL, od.total, omcs.total) AS total,
                od.bonuses,
                od.cito_factor,
                ote.OrderKontragentID sender_id,
                ote.OrderDiscount discount,
                IIF(omcs.service_id IS NULL, od.outlet_price, dbo.GetPrice(ote.reg_point, omcs.service_id, ote.DateIns)) outlet_price,
                IIF(omcs.service_id IS NULL, od.order_service_id, CONCAT(od.order_num, '/', omcs.service_id)) AS order_service_id,
                omcs.complex_id
            FROM n_OrderDetail od
                LEFT JOIN OrdersToExport ote ON ote.o   </inputbuf>
  </process>
  <process id="process65e4063c28" taskpriority="0" logused="28444" waitresource="PAGE: 9:1:116241658 " waittime="1250" ownerId="30254454272" transactionname="user_transaction" lasttranstarted="2018-12-18T10:48:40.977" XDES="0x58bcadb948" lockMode="S" schedulerid="10" kpid="10540" status="suspended" spid="3316" sbid="1" ecid="0" priority="0" trancount="1" lastbatchstarted="2018-12-18T10:48:41.077" lastbatchcompleted="2018-12-18T10:48:41.077" lastattention="1900-01-01T00:00:00.077" clientapp="Apache HTTP Server" hostname=" скрыто " hostpid="11796" loginname=" скрыто " isolationlevel="read committed (2)" xactid="30254454272" currentdb="9" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
   <executionStack>
    <frame procname="adhoc" line="2" stmtstart="62" stmtend="2464" sqlhandle="0x02000000115f650aea85b094ea93aa7fdedb9f1fbc4383670000000000000000000000000000000000000000">
unknown    </frame>
    <frame procname="unknown" line="1" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000">
unknown    </frame>
   </executionStack>
   <inputbuf>
(@P1 nvarchar(8))
            SELECT
                1 flow_doctype,
                ote.order_num flow_id,
                ote.order_num order_num,
                IIF(omcs.service_id IS NULL, od.serv_id, omcs.service_id) AS serv_id,
                1 count,
                IIF(omcs.service_id IS NULL, od.price, omcs.price) AS price,
                1 flow_type,
                ote.DateReg flow_date,
                IIF(omcs.service_id IS NULL, od.total, omcs.total) AS total,
                od.bonuses,
                od.cito_factor,
                ote.OrderKontragentID sender_id,
                ote.OrderDiscount discount,
                IIF(omcs.service_id IS NULL, od.outlet_price, dbo.GetPrice(ote.reg_point, omcs.service_id, ote.DateIns)) outlet_price,
                IIF(omcs.service_id IS NULL, od.order_service_id, CONCAT(od.order_num, '/', omcs.service_id)) AS order_service_id,
                omcs.complex_id
            FROM n_OrderDetail od
                LEFT JOIN OrdersToExp   </inputbuf>
  </process>
 </process-list>
 <resource-list>
  <pagelock fileid="1" pageid="116120662" dbid="9" subresource="FULL" objectname="скрыто.dbo.n_order_marketing_complex_service" id="lockca1cd1e500" mode="SIX" associatedObjectId="72057596708061184">
   <owner-list>
    <owner id="process65e4063c28" mode="SIX" />
   </owner-list>
   <waiter-list>
    <waiter id="process42eef144e8" mode="S" requestType="wait" />
   </waiter-list>
  </pagelock>
  <pagelock fileid="1" pageid="116241658" dbid="9" subresource="FULL" objectname=" скрыто.dbo.n_order_marketing_complex_service" id="lock50c07c2c00" mode="IX" associatedObjectId="72057596708061184">
   <owner-list>
    <owner id="process42eef144e8" mode="IX" />
   </owner-list>
   <waiter-list>
    <waiter id="process65e4063c28" mode="S" requestType="wait" />
   </waiter-list>
  </pagelock>
 </resource-list>
</deadlock>
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749432
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danion,

Смотрите транзакции целиком. inputbuf показывает совсем не всё
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749441
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваши селекты выполняются в транзакциях, в которых ранее были модификации "скрыто.dbo.n_order_marketing_complex_service". Об этом свидетельствует наличие IX.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749446
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

А можете подсказать где? Я выкладывал из xml_deadlock_report из extended events.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749449
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

То есть - я вижу часть транзакции с селектом и где вроде нет причин, а блокирует часть, что через Extended Events не поймал?
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749472
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DanionТо есть - я вижу часть транзакции с селектом и где вроде нет причин, а блокирует часть, что через Extended Events не поймал?Вы видите граф дедлока с конфликтующими инструкциями. Но это не означает, что ресурсы, за которые идет драка, заблокированы только этими инструкциями .
У вас именно этот случай.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749519
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Спасибо за ответ.

А я как-то могу получить полную видимость ситуации с этими блокировками?
Или это только через разработчиков можно, чтобы смотрели что полностью выполняется при этом запросе?
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749522
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danioninvm,

Спасибо за ответ.

А я как-то могу получить полную видимость ситуации с этими блокировками?
Или это только через разработчиков можно, чтобы смотрели что полностью выполняется при этом запросе?
Быстрее у разработчиков, судя по тому что у вас там одно и то же
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749532
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Хорошо, попробую через разработчиков. Стабильность по времени начала и конца массовых дедлоков присутствует.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749635
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danion,

Сорее всего, ваш селект сканирует таблицу n_order_marketing_complex_service.
Возможно создание правильного индекса уберет таковое и запросы из разных сессий перестанут пересекаться по данным. Заодно может снизится гранулярность блокировок.
Соответственно, данный дедлок исчезнет.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749656
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

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

В селекте из этой таблицы участвуют в join поля omcs.order_num и omcs.complex_id.

По таблице есть индексы и например этот не кластерный индекс включает данные поля:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE UNIQUE NONCLUSTERED INDEX [iu_n_order_marketing_complex_service$order_num$complex_id$service_id] ON [dbo].[n_order_marketing_complex_service]
(
	[order_num] ASC,
	[complex_id] ASC,
	[service_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749684
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DanionНе понял как добавление индекса поможет с блокировкамИндекс может убрать сканирование таблицы из плана выполнения. Соответственно, конкурирующие запросы перестанут пересекаться по читаемым данным.
Показанный индекс возможно малоприменим для данного запроса, т.к. за значениями столбцов omcs.price и omcs.total все равно придется лезть в таблицу.
План запроса смотрите - там все видно.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749714
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Вот план запроса, поиск по индексу составил 91%. Как-то много.
! знак ругается на большее количество преобразований типов данных в рамках плана запросов.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749719
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danioninvm,

Вот план запроса, поиск по индексу составил 91%. Как-то много.

это трактуется так: 91% всего времени выполнения происходил index seek (самое быстрое что может быть)

% - это величина относительная, а не абсолютная
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749723
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужен актуальный план выполнения
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749730
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

Просто там несколько сканирований индексов и 91% у одного удивило.

А чем этот план не актуальный? Данные из кеша. При дедлоке Extended Events похоже не собирает данные, попробую профайлером завтра, там вроде было.

Пытаюсь выяснить подробности у разрабов, пока выходит одна транзакция с кучей Select, update, delete, insert, один из кусков которой и есть с селектами. Тогда почему не падает всё остальное...
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749743
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danion,

"Правильный" для данного запроса индекс есть (правда не тот, который вы показали) и он задействован. Значит версия о полном сканировании таблицы отпадает.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749946
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Индекс этот применялся:

CREATE NONCLUSTERED INDEX [in_n_order_marketing_complex_service$complex_id$order_num$service_id$price$total] ON [dbo].[n_order_marketing_complex_service]
(
[complex_id] ASC
)
INCLUDE ( [order_num],
[service_id],
[price],
[total]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO


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

С таблицей по которой дедлоки происходит update, потом этом запрос с селектами, после в ней ничего не меняется.
Кроме варианта с грязным чтением (который может дать не соответствующие действительности данные) что-то можно сделать? Например как-то изменять уровень блокировки на S после update...
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749952
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DanionС таблицей по которой дедлоки происходит update, потом этом запрос с селектами, после в ней ничего не меняется.Покажите этот update.
Danionчто-то можно сделать?Радикально - включить RCSI.
Паллиативно, пока не выяснена причина дедлока - добавить хинт rowlock к таблице в селекте.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749956
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Вот:

Код: sql
1.
2.
3.
4.
5.
6.
7.
 UPDATE [dbo].[n_order_marketing_complex_service] SET [total]=:yp0, [bonuses]=:yp1 WHERE [dbo].[n_order_marketing_complex_service].[aid]=3028507
-----------------
 UPDATE [dbo].[n_order_marketing_complex_service] SET [total]=:yp0, [bonuses]=:yp1 WHERE [dbo].[n_order_marketing_complex_service].[aid]=3028504
-----------------
 UPDATE [dbo].[n_order_marketing_complex_service] SET [total]=:yp0, [bonuses]=:yp1 WHERE [dbo].[n_order_marketing_complex_service].[aid]=3028505
-----------------
 UPDATE [dbo].[n_order_marketing_complex_service] SET [total]=:yp0, [bonuses]=:yp1 WHERE [dbo].[n_order_marketing_complex_service].[aid]=3028506
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749966
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aid - это ПК?
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749969
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При включении RCSI нашел упоминание о проблемах с миррорингом в начале. Вроде не критично с данной проблемой блокировок, но база в AlwaysOn. Как-то может влиять? Вроде не должно.

invm,

Нет, похоже на номер заказа. По нему настроен первичный ключ таблицы.

ALTER TABLE [dbo].[n_order_marketing_complex_service] ADD PRIMARY KEY CLUSTERED
(
[aid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749974
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересные тут беседы у вас
invmaid - это ПК?
Danion Нет
...
Код: sql
1.
ALTER TABLE [dbo].[n_order_marketing_complex_service] ADD PRIMARY KEY CLUSTERED ([aid] ASC)
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749992
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,
а вот ещё:
авторПросто там несколько сканирований индексов и 91% у одного удивило.
А чем этот план не актуальный? Данные из кеша.

там ещё окажется на эти update триггер который шерстит всю таблицу. Просто так эти update не будут просить SIX
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749995
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danionбаза в AlwaysOn. Как-то может влиять?Может. С включением RCSI будут проблемы - http://www.sqlnuggets.com/blog/change-the-isolation-level-of-an-availability-group-database/
DanionПо нему настроен первичный ключ таблицы.ПК и есть первичный ключ.
Эта вереница update'ов одинаковая в каждой транзакции? Т.е. апдейтятся одни и те же строки?
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39749999
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и то верно.
актуальный кэш --> актуальный план.
не осетрина, понимаешь, "второй свежести"
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750001
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKПросто так эти update не будут просить SIXSIX просит select, а не update.
Потому что в момент запроса S на страницу уже имеется IX на этой странице.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750007
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmTaPaKПросто так эти update не будут просить SIXSIX просит select, а не update.
Потому что в момент запроса S на страницу уже имеется IX на этой странице.
это звучит как то странно
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750020
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
use tempdb;
go

create table dbo.t(id int primary key, v int);
insert into dbo.t values (1, 1);
go

begin tran;
update dbo.t set v = 2 where id = 1;
exec sp_lock @@spid;
select * from dbo.t with (paglock, repeatableread) where id = 1;
exec sp_lock @@spid;
commit;
go

drop table dbo.t;
go
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750025
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

не очень похоже на "простой" select, ну да ладно.
По схеме же six уже предоставлен до select?
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750031
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKне очень похоже на "простой" select, ну да ладно.Хинты добавлены исключительно для демонстрации эффекта, а не для "усложнения" select'а.
TaPaKПо схеме же six уже предоставлен до select?На основании чего такой вывод?
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750060
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmTaPaKне очень похоже на "простой" select, ну да ладно.Хинты добавлены исключительно для демонстрации эффекта, а не для "усложнения" select'а.
TaPaKПо схеме же six уже предоставлен до select?На основании чего такой вывод?
Как-то так, поправьте : sp 3316 уже удерхивает SIX на page ...662 и хочет S на page ... 658. Как получили SIX из всего предоставленного не видно
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750085
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKКак получили SIX из всего предоставленного не видноОчень даже видно.
SIX - не отдельная блокировка, а комбинация блокировок S и IX. Как она получается, см. пример выше.
Но это вообще не важно: в контексте данного дедлока ее можно интерпретировать просто как IX.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750089
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmTaPaKКак получили SIX из всего предоставленного не видноОчень даже видно.
SIX - не отдельная блокировка, а комбинация блокировок S и IX. Как она получается, см. пример выше.
Но это вообще не важно: в контексте данного дедлока ее можно интерпретировать просто как IX.
Ок, т.е. лечить теоретическии изысканиями?
Тогда да, RSCII и следующий
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750102
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
От меня ещё какая-то информация сейчас нужна?

А то пока разбираюсь на другом сервере с "бонусами" 1С. Хотя похоже там проблема с ОС.
Кстати, если кто встречал похожее:

Ночью были массовые изменения в базе 1С erp. Там авто прирост включен, стандартные 10% + ограничение в 2 097 152, по сути не ограничено. Лог базы нормально рос, а потом:
C:\SQL\erp_log.ldf: Operating system error 665(The requested operation could not be completed due to a file system limitation) encountered.
И пошли The transaction log for database 'erp' is full due to 'LOG_BACKUP'. до бекапа лога, после ожидаемо нормально.

На диске меньше 10% места не становилось. И это больше 10% от размера лога.

Попробовал увеличить файл руками на ГБ - MODIFY FILE encountered operating system error 665(The requested operation could not be completed due to a file system limitation) while attempting to expand the physical file 'C:\SQL\erp_log.ldf'.
На 1 МБ позволило. Почитал по ошибке, пишут, что одной из возможной причин является фрагментация диска, проверил - сейчас там 42% фрагментация.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750162
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DanionОт меня ещё какая-то информация сейчас нужна?Вопрос был тут - 21768041

Можете попробовать переписать как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            SELECT
             ...
            FROM
             (
              select top (cast(0x7fffffff as int))
               ...
              from
               n_OrderDetail od
               JOIN OrdersToExport ote ON ote.order_num = od.order_num
              WHERE
               ote.order_num = @P1
              order by
               od.serv_id
             ) ttt
             LEFT loop JOIN n_order_marketing_complex_service omcs ON omcs.order_num = ttt.order_num AND omcs.complex_id = ttt.serv_id
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750228
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЭта вереница update'ов одинаковая в каждой транзакции? Т.е. апдейтятся одни и те же строки?

Разрабы говорят, что действие одинаковое. SET [total]=:yp0, [bonuses]=:yp1 для какого-то aid
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750254
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DanionРазрабы говорят, что действие одинаковоеЯ имел в виду перечень aid'ов один и тот же в конкурирующих сессиях?
Ладно, не важно.

1. Индекс переделайте вот так:
Код: sql
1.
2.
3.
4.
5.
CREATE NONCLUSTERED INDEX [in_n_order_marketing_complex_service$complex_id$order_num$service_id$price$total] ON [dbo].[n_order_marketing_complex_service]
 ([complex_id], [order_num], [service_id])
INCLUDE
 ([price], [total])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, drop_existing = on) ON [PRIMARY]

Если сочетание (complex_id, order_num, service_id) уникально, то и индекс сделайте уникальным.
Если уникально (complex_id, order_num), то service_id оставьте в include и тоже индекс сделайте уникальным.

2. Перепишите эту пачку update'ов так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t as
(
 select top (cast(0x7fffffff as int))
 from
  [dbo].[n_order_marketing_complex_service]
 where
  aid in (3028507, 3028504, ..., 3028506)
 order by
  complex_id, order_num, aid
)
update t
 set
  [total] = :yp0, [bonuses] = :yp1;



3. Если п.2 неприменим, перепишите select как показано тут - 21768307 , добавив к сортировке order_num.

Вообще, с учетом увиденного и DanionТранзакция с кучей действий с разным таблицами, один из этапов которой в первом посте с селектами.Напрашивается RCSI, что бы не расставлять костыли на каждом шагу или приводить код в адекватный вид.
...
Рейтинг: 0 / 0
Дедлоки с Intent Locks объектов
    #39750310
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,
Спасибо за советы, посмотрим, что можно применить.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Дедлоки с Intent Locks объектов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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