Эскалация блокировок при удалении движений по регистратору или других DELETE #761365


#0 by floody
Уважаемые эксперты, нужна ваша подсказка. Конфигурация упп1.3 на упр.блокировках. Наблюдаю событие эскалации блокировок до уровня таблицы при данном запросе: DELETE FROM T1 FROM _AccumRg21611 T1 WHERE T1._RecorderTRef = AND T1._RecorderRRef = @P2 Насколько я понимаю, совсем не обязательно блокировать всю таблицу для удаления движений по одному регистратору. Аналогичные запросы еще встречаются, вот пример: DELETE FROM T4 FROM _Document417_VT10391 T4 WHERE _Document417_IDRRef = Вопрос: в чем может быть проблема?
#1 by Господин ПЖ
блокировка на уровне скуля? таблица слишком маленькая по объему - оптимизатору лень париться с записью
#2 by floody
Спросить у пользователя - не предлагать)
#3 by floody
Таблица _AccumRg21611 - самая большая в базе. 47млн записей и более 30 гигабайт на диске.
#4 by Господин ПЖ
не попадает в индекс слишком много блокировок - оптимизатор задалбался рулить блокировками
#5 by floody
индекс "Регистратор + НомерСтроки" всегда существует про слишком много блокировок - это понятно, но не понятно, почему их много?
#6 by Господин ПЖ
а кто сказал что он всегда используется? вполне "безобидный" запрос может давать table/index scan смотри план выполнения
#7 by H A D G E H O G s
Эскалация блокировок может быть не связана с планом. Ну тоесть, у него может быть православный indexseek и блокирована вся таблица.
#8 by Господин ПЖ
хуже от того что он посмотрит реальный план не станет. доп. информация не повредит
#9 by Apokalipsec
флаг трассировки 1224
#10 by floody
ушел смотреть план
#11 by vhl
При большом количестве записей в одной транзацкии - эскалируется.
#12 by floody
хорошо, например удаляются движения документа Требование-накладная (пускай из 1000 строк). в итоге блокируем 47млн записей?
#13 by senior
эскалацией можно управлять
#14 by Apokalipsec
Скуль сам считает блокировки, и то что 1к строк не значит что это 1к блокировок, есть некий range на котором происходит эскалация блокировок на уровне субд. Ещё есть блокировки по памяти. Поставьте флаг трассировки 1224, не будет эскалации по количеству блокировок, есть ещё флаг отвечающий за эскалацию по памяти, но им баловаться не рекомендую.
#15 by floody
Зачем баловаться флагами и пытаться управлять эскалацией? Я ведь не говорю, что скуль - дурачок и не нужно эскалировать блокировку. Однозначно эскалация - это добро. Иначе можно все ресурсы сервера положить на разруливание блокировок. А вот причина эскалации - это зло. Меня интересует - почему безобидная казалось бы операция по удалению движений одного документа приводит к блокировке таблицы в 30 гб. Посмотрел план. Действительно - сканируется индекс по регистратору. В предикате: CONVERT_IMPLICIT(varchar,[database].[dbo].[_AccumRg21611].[_RecorderTRef] as [T1].[_RecorderTRef],0)='0x00000134' AND CONVERT_IMPLICIT(varchar,[database].[dbo].[_AccumRg21611].[_RecorderRRef] as [T1].[_RecorderRRef],0)='0x90160025904DA97E11E4D31107D43E91' Что это? По этой информации можно понять, почему вместо поиска по индексу - сканирование?
#16 by H A D G E H O G s
А P1 чему равен?
#17 by floody
P1 - тип регистратора, ну допустим ТН. Р2 - сама ссылка.
#18 by H A D G E H O G s
да я в курсе. Значение его какое. чему он равен?
#19 by Господин ПЖ
>По этой информации можно понять, почему вместо поиска по индексу - сканирование? может статистика плохая
#20 by floody
вот в этом запросе выше видно, что = 0x00000134 статистика обновляется еженочно с фулл сканом
#21 by vhl
Ну наверное в данном случае SQL выгоднее заблокировать одну таблицу чем наложить 1000 блокировок.
#22 by vhl
вон у Гилева почитай:
#23 by floody
есть вариант конечно, что нужно чаще обновлять.. например массовые перепроведения какие-то.
#24 by Господин ПЖ
с какой-то версии скуля при обновлении 20 000 записей стата сама рефрешится по таблице
#25 by floody
с какой-то версии введен более интеллектуальный алгоритм определения порога автообновления.. с 2012 вроде. по % количеству от объема таблицы.
#26 by alexlap
А тип параметров varbinary или varchar? N'@P1 varbinary,@P2 varbinary' В запросе так параметры заданы?
#27 by floody
Это запрос, формируемый платформой при распроведении документа. (@P1 varbinary,@P2 varbinary) вот так
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С