Пример блокировок

Решаем проблемы с блокировками

Модератор: Дмитрий Юхтимовский

Пример блокировок

Сообщение Гилёв Вячеслав » 19 мар 2013, 22:35

Учебный пример
конфигурация 8.2 на управляемых блокировках

сервис https://skynet.gilev.ru/QueryTJ/
учетная запись Work
пароля нет

выберите базу first
Изображение

время начала запроса 20.03.2013 14:06:32

Чтобы увидеть контекст запроса 1С

Форма.Вызов : ВнешняяОбработка.УстановкаБлокировок.Форма.ФормаУправляемая.Модуль.ВыполнитьНаСервере
Форма.ФормаУправляемая.Форма : 63 : ТЗ = Запрос.Выполнить().Выгрузить();


выделите первую строку в верхней таблице,
а затем выделите первую строку в нижней таблице "Детали ранжирования" и откройте двойным щелчком

Изображение

запрос SQL

T2._Fld10068RRef,
'SELECT
T1._Q_000_F_000RRef,
T2._Fld10070RRef,
T2._Fld10071RRef,
T2._Fld10072
FROM #tt10 T1 WITH(NOLOCK)
LEFT OUTER JOIN _AccumRg10067 T2
ON (T1._Q_000_F_000RRef = T2._Fld10069RRef)'

Изображение

Чтобы посмотреть на участие в блокировках нашего запроса, закройте "детали запроса" и сделайте двойной щелчок на верхней таблице по первой строке

Изображение


Зайдите во второй сервис (показывает детали анализа блокировок)
сервис https://skynet.gilev.ru/latch/
учетная запись Work
пароля нет

выберите тот же самый интервал
Изображение

выберите в деталях блокировки ветку и сделайте двойной щелчок на первой строке вложения

Изображение

посмотрите на время виновника и уровень блокировки (неизвестно, это скорее всего вся таблица заблокирована)
Изображение

блокирующий запрос
Изображение

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

т.е. виновником стала "очистка регистра"
Гилёв Вячеслав
 
Сообщений: 2143
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Пример блокировок

Сообщение Гилёв Вячеслав » 19 мар 2013, 22:39

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

Посмотрим на запросы в 14.06.11

Изображение

план запроса

Изображение

верхний уровень
|--Nested Loops(Left Outer Join, WHERE:([tempdb].[dbo].[#tt10].[_Q_000_F_000RRef] as [T1].[_Q_000_F_000RRef]=[first].[dbo].[_AccumRg10067].[_Fld10069RRef] as [T2].[_Fld10069RRef]))

ветка 1
|--Index Scan(OBJECT:([tempdb].[dbo].[#tt10] AS [T1]))

ветка 2
|--Clustered Index Scan(OBJECT:([first].[dbo].[_AccumRg10067].[_Accum10067_ByPeriod_TRN] AS [T2]))
Гилёв Вячеслав
 
Сообщений: 2143
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Пример блокировок

Сообщение Гилёв Вячеслав » 19 мар 2013, 22:50

Запись в регистр в 14.06.11

Изображение

запрос к субд

Изображение

план запроса

Изображение

второй запрос (служебный, подсчет итогов при записи)
Изображение

план запроса для служебного запроса
Изображение

---------------------------------------------------------------------------------------------------------------------------

Затем мы добавили индекс в наш учебный регистр

и изменили интервал наблюдения

Изображение

в результате у нас появился новый интервал наблюдения

и о чудо, блокировок больше нет!

Изображение
Гилёв Вячеслав
 
Сообщений: 2143
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Пример блокировок

Сообщение Гилёв Вячеслав » 21 мар 2013, 13:31

После добавления давайте посмотрим на код
Изображение
И на запросы, которые последовательно выполняются согласно кода в 14.08.23


Запись в регистр
Изображение
Запрос SQL записи
Изображение
План записи
Изображение
Запрос в 65й строке после добавления индекса
Изображение
Давайте посмотрим снова на план запроса для 65й строки

Изображение

Таким образом, запрос

в терминах 1с

ВЫБРАТЬ
ВТ_Номенклатура.Номенклатура,
РегистрДляДемонстраций.Склад,
РегистрДляДемонстраций.Контрагент,
РегистрДляДемонстраций.Организация,
РегистрДляДемонстраций.Количество
ИЗ
ВТ_Номенклатура КАК ВТ_Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрДляДемонстраций КАК РегистрДляДемонстраций
ПО ВТ_Номенклатура.Номенклатура = РегистрДляДемонстраций.Номенклатура

в терминах субд

SELECT
T1._Q_000_F_000RRef,
T2._Fld10068RRef,
T2._Fld10070RRef,
T2._Fld10071RRef,
T2._Fld10072
FROM #tt1 T1 WITH(NOLOCK)
LEFT OUTER JOIN _AccumRg10067 T2
ON (T1._Q_000_F_000RRef = T2._Fld10069RRef)

стал выполняться с более рациональным планом запроса и меньше влиять на параллельность работы
Гилёв Вячеслав
 
Сообщений: 2143
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Пример блокировок

Сообщение Геннадий Новосибирский » 01 сен 2013, 10:00

Гилёв Вячеслав писал(а):Учебный пример
конфигурация 8.2 на управляемых блокировках

сервис https://skynet.gilev.ru/QueryTJ/
учетная запись Work
пароля нет

выберите базу first
Изображение

Здравствуйте,
В списке выбора не вижу ИБ с именем first

Вот, список при логине под Work
Изображение

и при логине под Work83
Изображение
Геннадий Новосибирский
 
Сообщений: 2
Зарегистрирован: 01 сен 2013, 08:07

Re: Пример блокировок

Сообщение Гилёв Вячеслав » 01 сен 2013, 23:36

Геннадий Новосибирский писал(а):
Гилёв Вячеслав писал(а):Учебный пример
конфигурация 8.2 на управляемых блокировках

сервис https://skynet.gilev.ru/QueryTJ/
учетная запись Work
пароля нет

выберите базу first
Изображение

Здравствуйте,
В списке выбора не вижу ИБ с именем first

Вот, список при логине под Work
Изображение

и при логине под Work83
Изображение


ввиду накопившегося объема данных мы начали делать обрезку данных http://www.gilev.info/2013/08/22-2013.html и часть данных пока будут недоступны,
нам потребуется время переделать движок базы, затем мы восстановим возможность смотреть старые периоды
сейчас пример доступен только в этой ветке
Гилёв Вячеслав
 
Сообщений: 2143
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва


Вернуться в Ожидания на блокировках

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron