Сегодня рассмотрим, как 1C может “залипнуть” вследствие эскалации блокировок.
Даже если у Вас всего 10-20 рабочих мест.
В итоге Вы будете знать:
- Что вообще такое “эскалация блокировок” и чем она страшна
- Как правильно разрабатывать код, чтобы избежать эскалации
- При каких условиях возникает эскалация на сервере 1С и сервере СУБД
- Отличия платформы 8.2 и 8.3 в части эскалации блокировок
- Инструменты диагностики эскалации.
Это отрывок из курса “Ускорение и Оптимизация систем на 1С”…
Многие воспринимают его как хитрую заумь, которая нужна только в компаниях, где 10 серверов и 500 рабочих мест.
Да, для таких он точно нужен. Но!
Есть огромное число нюансов и в простых проблемах.
Итак, 19 минут видео – и Вы будете знать об этой теме всё, что нужно :)
Видео 1. Вводная часть про блокировки
Небольшая матчасть про эскалации и транзакционные блокировки в платформе “1С:Предприятие 8”.
Здесь же даем рекомендации, как избежать эскалации блокировок.
Видео 2. Эскалация блокировок СУБД
В видео покажем, когда возникает эскалация блокировок на стороне СУБД.
Видео 3. Событие Lock:Escalation
Рассмотрим, как диагностировать эскалацию средствами MS SQL Server.
Видео 4. Эскалация блокировок 1С
В этом уроке разберем, когда происходит эскалация на сервере 1С.
Проведем диагностику блокировок и эскалации с помощью технологического журнала.
Знания уровня 1С:Эксперт ДОЛЖНЫ быть у каждого
Эти видео-уроки взяты из курса “Ускорение и оптимизация систем на 1С:Предприятие 8.3 + подготовка на 1С:Эксперт”.
К слову – самый дорогой курс. Именно по нему возникает больше всего сомнений – “стоит ли его вообще проходить?”.
Мы хотели показать сегодня, что это не курс для каких-то отдельных частных случаев (типа 500+ рабочих мест) – а курс общей подготовки, для всех, кто хочет по-настоящему знать, как работает 1С.
По сути – для любого ответственного разработчика и внедренца.
И да, курсов по оптимизации два – LITE и PROF.
PROF отличается тем, что готовит Вас к самой высшей Аттестации 1С – 1С:Эксперт по технологическим вопросам крупных внедрений.
Вы сможете сдать его буквально через 2 месяца.
У меня вот вопрос про эскалацию.
Вот на СУБД MS SQL скажем 5000 строк на одну таблицу
В 1С 8.3 100к строк.
У меня вопрос как мы можем вообще дойти до 100к строк, если при записи скажем 5050 (памяти допустим у нас хватает) записей в справочник в одной транзакции – мы получим эскалацию на уровне СУБД до таблицы.
Почему у 1С 100к порог эскалации управляемых блокировок? Или речь идёт о том что в больших базах где много строк в ТЧ допустим, то ставят запрет эскалации на таблицу, и мы можем только при 100к1 поймать эскалацию на управляемых блокировках?
Никита, здравствуйте.
Хороший вопрос, но вы сами же на него и ответили.
На СУБД можно отключить эскалацию, тогда и можно поймать эскалацию на блокировках 1С.
Кстати на 1С эскалацию отключить нельзя.
И есть еще второй момент, эскалация 1С срабатывает если на одно пространство в рамках одной транзакции накладывается более 100 тыс. блокировок, но не обязательно это блокировки будут установлены одномоментно.
Вы можете в одной транзакции 100 тыс. раз блокировать по 1 строке и у вас на 100001 раз будет эскалация, в СУБД же имеется ввиду наложение блокировки одним запросом.
Андрей, большое спасибо за пояснение
Подскажите, пожалуйста, нигде не смог найти ответа на свой вопрос. Может ли установка управляемых блокировок 1с повлиять на эскалацию блокировок СУБД? У меня при записи большого набора записей возникает эскалация блокировок СУБД. Существует мнение, что если установить по измерениям управляемую блокировку 1С, это поможет убрать эскалацию блокировок СУБД. У меня избавиться от эскалации таким образом не получилось и статью, в которой бы говорилось о такой взаимосвязи я тоже не нашел. Так можно ли избавится от эскалации блокировок СУБД с помощью управляемых блокировок 1С или нет?)
Здравствуйте!
Блокировки 1С и СУБД это два абсолютно разных, никак не зависящих друг от друга механизма. СУБД ничего не знает об управляемых блокировках 1С.
В обоих видах блокировок есть эскалация, но порог разный. У вас скорее будет эскалация на СУБД MS SQL т.к. там порог ниже (порядка 5000 эл-в на одну таблицу за раз), чем эскалация на 1С (100 тыс. эл-в).
> Существует мнение, что если установить по измерениям управляемую блокировку 1С, это поможет убрать эскалацию блокировок СУБД.
Это бред и вы это уже доказали своим опытом. Еще раз повторю это два разных независимых механизма. При желании вы можете отключить эскалацию на MS SQL для определенной таблицы или всего сервера, но отключить эскалацию на упр. блокировках 1С нельзя, по крайней мере на текущий момент времени.
Андрей, спасибо большое за ответ. Т.е. получается, что если требуется провести документ, который записывает в регистр большой набор записей (> 10 000 строк), то нет никакой возможности избежать эскалации блокировок СУБД, кроме как отключить эскалацию MS SQL для таблицы или для всего сервера?
Все верно, ну либо как то программно разбивать запись на порции. На практике обычно просто отключают эскалацию для таблицы. Самый простые решения обычно самые эффективные, только следите за память занимаемой MS SQL т.к. при отключении эскалации под блокировки естественно будет уходить больше памяти.
Большое спасибо за пояснение, Андрей. Вы мне очень помогли)
Обращайтесь :)
Ярослав, пришлите все же ссылку на эту статью, интересно посмотреть, что это за статья такая и кто её автор и где её опубликовали. У меня начальник (!!!) отдела разработки понатыкал управляемых блокировок перед записью набор записей регистра сведений, понимать буквально, перед строкой “НЗ.Записать()” использование “БлокировкаДанных = ….”. Когда я его спросил зачем это и сказал профита от этого никакого, он ответил, что в статье умной прочел ,что так надо делать, это избавляет от блокировок на SQL. Я тогда мягко говоря ох…..ох как удивился(((
Мне кажется вы читали одну статью)
Видимо пора цикл статей выпускать “Мифы и легенды мира 1С”.
Тут кстати может в статье и правильно написано, просто начальник ваш понял ее по своему.
В курсе, да и на просторах интернета есть моя обработка отображающая текущие заблокированные строки как на 1С так и на СУБД, можете с помощью нее показать начальнику что упр. блокировки 1С никак не избавляют от блокировок СУБД. Речь идет конечно об X блокировках.
Очень интересно и полезно. И наглядно.
Спасибо!
Одна инструкция Transact-SQL получает более 5 000 блокировок в одной несекционированной таблице или индексе.
Все верно.
Скиньте пожалуйста проедложения.
Предложения чего? :)
Может человек продолжение просит ?))
Ну, если продолжение – то их выложили давно, в Мастер-группе курса.
Но вдруг предложить еще что-то нужно :)