Блокировки и оптимизация

Petro Bazeliuk —  Май 29, 2017 — 1 комментарий

Хочу рассмотреть вопросы и подготовку к сертификации. Учить правильные ответы плохой путь, а вот понимать ответы и применять их, вы тем самым становитесь на путь к уровню «1С:Эксперт». По сути это цикл записей с расширенными ответами на несколько вопросов из тестов.

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


В простых случаях, чтобы найти виновника таймаута или взаимной блокировки на управляемых блокировках, достаточно найти какую именно управляемую блокировку, несовместимую с блокировкой-жертвой, установило соединение, указанное в WaitConnections.
Источники:
• ИТС: Мониторинг на продукционных серверах


Эскалация (укрупнение) блокировок это повышение гранулярности блокировки (lock granularity, в некоторых источниках — lock level, «уровень блокируемых данных»). Это процесс преобразования многих мелкогранулированных блокировок в меньшее число крупногранулированных блокировок при вероятном увеличении конкуренции параллелизма.
Эскалации бывают на СУБД и в менеджере управляемых блокировок. Их поведение различно. Различие состоит в том, что если в момент попытки эскалации на СУБД MS SQL кто-то другой будет держать блокировку, то эскалации не произойдет, но при этом транзакция дальше продолжит свое выполнение. Если в «1С:Предприятие» кто-то другой будет держать блокировку, то «эскалирующаяся» транзакция попадет в ожидание от всех, кто еще держит блокировки на этом ресурсе. Если в «1С:Предприятие» не получится проэскалироваться в течение N (по умолчанию 20) секунд, то транзакция получит таймаут.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 58-60.


Объектная блокировка — предназначена для того, чтобы запретить изменение данных определенного объекта другими сеансами или данным сеансом до тех пор, пока блокировка не будет снята этим объектом встроенного языка. Эскалация объектной блокировки невозможна.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 48-49.


Для регистра сведений, подчиненного регистратору, пространства блокировок «DIMS» и «RECORDER» не конфликтуют.


Эскалацию управляемых блокировок запретить нельзя.


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


Чтение наборов записей регистров через объектную модель приводит к наложению управляемой блокировки.
Получение прикладного объекта через ПолучитьОбъект() всегда происходит с использованием объектной блокировки.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 50.


Если метод Заблокировать() коллекции БлокировкаДанных выполняется вне транзакции блокировки установлены не будут.


Чтобы определить время, которое управляемая блокировка ожидала освобождения ресурса необходимо смотреть на свойства события Lock:Aсquired в профайлере.


Блокирующее чтение остатков в начале транзакции
1.1. В ряде случаев необходимо выполнять блокирующее чтение итогов. Примером такой задачи является контроль остатков при проведении документа. Если в результате проведения документа остатки станут отрицательными, то транзакция должна быть отменена (проводить такой документ нельзя).
1.2. Операция чтения остатков должна быть блокирующей, то есть необходимо запретить двум пользователям одновременно читать один и тот же остаток за период, счет и значение измерения.
Если чтение будет неблокирующим, то возможна ситуация, при которой два пользователя одновременно прочитают один и тот же остаток (например 10 единиц) и примут решение о возможности списания части этого остатка. Если сумма списаний двух пользователей будет больше 10, то в итоге остаток получится отрицательным.
Например, первый пользователь спишет 8 единиц (8 меньше 10, следовательно операция разрешена), а второй пользователь спишет 6 единиц (на таком же основании). Результатом будет -4 единицы остатка, что недопустимо с точки зрения прикладной логики системы.
2. Обычно, для контроля остатков используется запрос в модуле набора записей регистра, который идет перед записью набора. При этом возможны следующие проблемы:

  • Разработчик, как правило, не контролирует порядок записи движений в разные регистры — запись обычно осуществляется автоматически платформой 1С:Предприятия. Запрос контроля остатков реализуется в модуле набора записей и вызывается при записи движений регистра. Если этот регистр будет записываться в начале транзакции (например, первым), то установленная блокировка будет мешать работе других пользователей в течение длительного периода времени (пока будут записываться все остальные регистры), и ее влияние на производительность системы может оказаться неоправданно большим.
  • В некоторых случаях, возможно, нет необходимости в контроле остатков, поскольку записываемые движения заведомо не могут привести к получению отрицательных остатков.

Для того чтобы минимизировать влияние блокирующего чтения остатков на производительность системы, необходимо:

  • Проанализировать, какие именно остатки нуждаются в блокирующем чтении и при каких обстоятельствах. Например, контроль остатков не требуется при проведении приходного документа, поскольку он может только увеличить остатки. Так же не требуется контролировать остатки при перепроведении документа, который списывает в этот раз не больше остатков чем при первом проведении (этот контроль уже проводился). И так далее.
  • В начале транзакции (например, в обработчике ОбработкаПроведения документа) в явном виде записать движения по всем регистрам, которые в данном случае не требуют контроля остатков. Следует всегда придерживаться одинакового порядка записи регистров (например, алфавитного). Необходимо обратить внимание на то, что у всех записываемых регистров накопления и бухгалтерии должен быть включен разделитель итогов, а у наборов записей свойство БлокироватьДляИзменения должна быть установлена в значение Ложь.
  • Выполнить все остальные действия, которые должны быть выполнены в рамках этой транзакции.
  • В самом конце транзакции в явном виде записать движения по тем регистрам, которые требуют контроля остатков. Для наборов записей этих регистров следует установить опцию БлокироватьДляИзменения в значение Истина. Это необходимо для предотвращения взаимоблокировки. Именно в этот момент времени будет установлена блокировка остатков регистра по данному набору значений измерений.
  • Для каждого регистра выполнить запрос контроля остатков. Следует обратить внимание, что в данном случае нет необходимости использовать явную управляемую блокировку (опцию ДЛЯ ИЗМЕНЕНИЯ — в автоматическом режиме), поскольку проверяемые остатки уже заблокированы их записью на предыдущем шаге. Запрос должен считывать только отрицательные остатки по заданному набору значений измерений. Если такие записи имеются, то транзакция должна быть отменена. Если запрос вернул пустой результат, то транзакция должна быть зафиксирована.

Источники:
ИТС: Блокирующее чтение остатков в начале транзакции


На этот регистр в других транзакциях нельзя будет поставить блокировки, которые будут принадлежать плоскости «первой» или «второй» блокировок, установленных в первой транзакции.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.


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


На этот регистр в других транзакциях нельзя будет поставить исключительные блокировки, которые будут принадлежать плоскости первого и второго измерения одновременно.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.


Блокировать необходимые данные партиями, каждую — в отдельной транзакции, контроль успешности выполнения действий со всеми партиями делать внешними средствами.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 60.


Эскалация определяется, например, по наличию в трассировке профайлера SQL Server события Lock:Escalation.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 59.


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


Уровни блокировки ресурсов управляемыми блокировками «1С:Предприятие»:
Разделяемый (Shared) — разделяемая блокировка позволит конкурирующему процессу установить разделяемую блокировку по этому же условию, но не позволит установить исключительную блокировку.
Исключительный (Exclusive) — исключительная блокировка не позволит конкурирующему процессу установить разделяемую или исключительную блокировку по этому же условию.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.


Виды объектных блокировок поддерживаемых в системе «1С:Предприятие»:
Пессимистическая блокировка исходит из предположения, что «если что-то плохое может случиться, это обязательно случится», то есть, если мы выполняем действие, конкурентное выполнение которого может привести к «поломке» данных, то правильным будет исключить возможность конкурентного исполнения.
Оптимистическая блокировка предполагает, что во время обновления записи в базе мы будем единственными, кто ее меняет. В большинстве случаев, так оно и есть (оптимизм оправдан). Но перед этим необходимо точно удостовериться, что запись с момента ее чтения не изменилась.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.


Полей пространства блокировок для Константа.<имя> — нет.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поле пространства блокировок для Перерасчет.<имя> — ВидРасчета.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поле пространства блокировок для Перерасчет.<имя>.НаборЗаписей — ОбъектПерерасчета.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поле пространства блокировок для Последовательность.<имя> — <имя измерения>.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поле пространства блокировок для Последовательность.<имя>.НаборЗаписей — Регистратор.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поля пространства блокировок для РегистрБухгалтерии.<имя> —
 • Период;
 • <вид движения> — значение системного перечисления ВидДвиженияБухгалтерии;
 • Счет — обязательное поле;
 • Субконто;
 • <вид субконто>;
 • <имя измерения>.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поле пространства блокировок для РегистрБухгалтерии.<имя>.НаборЗаписей — Регистратор.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поля пространства блокировок для РегистрНакопления.<имя> —
 • Период;
 • <имя измерения>.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поле пространства блокировок для РегистрНакопления.<имя>.НаборЗаписей — Регистратор.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Избыточная блокировка — блокировка, не обусловленная бизнес-логикой приложения.
Источники:
• ИТС: Типичные причины избыточных блокировок и методы оптимизации


Поля пространства блокировок для РегистрРасчета.<имя> —
 • ПериодРегистрации;
• ПериодДействия;
• <имя измерения>.

Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поле пространства блокировок для РегистрРасчета.<имя>.НаборЗаписей — Регистратор.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поля пространства блокировок для РегистрСведений.<имя> —
 • Период — если есть;
 • <имя измерения>.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поле пространства блокировок для РегистрСведений.<имя>.НаборЗаписей — Регистратор.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Пессимистическая блокировка гарантирует, что пользователь, начав изменять данные объекта, сможет записать эти изменения в информационную базу, а так же проблему неповторяемого чтения для объектов, редактируемых в форме.
Неповторяющееся чтение (non-repeatable read) — при повторном чтении в рамках одной и той же транзакции оказывается, что ранее прочитанные данные изменены или удалены;
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Поле пространства блокировок для Справочник.<имя>, Документ.<имя>, ПланОбмена.<имя>, ПланСчетов.<имя>, БизнеcПроцесс.<имя>, Задача.<имя>, ПланВидовРасчета.<имя>, ПланВидовХарактеристик.<имя> — Регистратор.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Не важно, блокировались данные на уровне записей (строк), на уровне диапазона ключа или на уровне страницы. После эскалации они окажутся заблокированы на уровне таблицы, т.е. эскалация всегда происходит до уровня таблицы.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 59.


TDEADLOCK — обнаружена взаимоблокировка в управляемом режиме.
TTIMEOUT — превышение максимального времени ожидания транзакционной блокировки.
Источники:
• ИТС: Описание и расположение служебных файлов


Существует два способа задания условий на поля пространств блокировки:

  • с помощью явного задания имени поля и его значения;
  • с помощью указания источника данных, содержащего необходимые значения

При явном задании имени поля и его значения необходимо использовать метод УстановитьЗначение() объекта ЭлементБлокировкиДанных. В этом случае имя и значение указывают в качестве параметров метода.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Уровни блокировки ресурсов управляемыми блокировками «1С:Предприятие»:
Разделяемый (Shared) — разделяемая блокировка позволит конкурирующему процессу установить разделяемую блокировку по этому же условию, но не позволит установить исключительную блокировку.
Исключительный (Exclusive) — исключительная блокировка не позволит конкурирующему процессу установить разделяемую или исключительную блокировку по этому же условию.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.


Таблица будет заблокирована целиком:
• в файловом режиме;
• всегда при эскалации блокировок;
• при работе с Oracle Database и PostgreSQL в автоматическом режиме блокировок;
• при использовании Clustered Index Scan или Table Scan в плане запроса;
• при записи пустого набора в пустую таблицу в автоматическом режиме блокировок.


Установленные управляемые блокировки, как разделяемые, так и исключительные, держатся до конца транзакции.
Источники:
ИТС: Блокировки данных в 1С:Предприятии 8


Неявные управляемые блокировки платформой устанавливаются при чтении наборов записей и при записи любых объектов.
Источники:
ИТС: Блокировки данных в 1С:Предприятии 8
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 50.


Неявные управляемые разделяемые блокировки платформой устанавливаются при чтении набора записей.
Источники:
ИТС: Блокировки данных в 1С:Предприятии 8
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 50.


Механизм объектных блокировок позволяет оповестить пользователей о захвате объектных данных «1С:Предприятия»: справочников, документов, планов видов характеристик, планов счетов, планов видов расчета, бизнес-процессов, задач, планов обмена.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 48.


Информация, какую именно управляемую блокировку, несовместимую с блокировкой-жертвой, установило соединение, указанное в WaitConnections, может находиться не в том же файле, где есть событие TDEADLOCK или TTIMEOUT. Она может быть в логах другого часа, другого рабочего процесса, и даже, если в кластере несколько серверов – в логах другого сервера.


Встроенный язык не поддерживает возможность явно снять определенную транзакционную блокировку.


Объектная оптимистичная блокировка предполагает, что во время обновления записи в базе данных мы единственные, кто меняет эту запись.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.


Объектная пессимистичная блокировка предполагает, что если данные во-время записи в базу могут «поломаться» из-за конкурентного доступа, то они «поломаются», т.е. данные нельзя давать записывать в базу одновременно.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.


Поля пространства блокировок Регистратор и <имя измерения> не пересекаются потому, что поле пространства блокировок Регистратор относится к пространству Регистр(Сведений | Накопления | Бухгалтерии).<имя>.НаборЗаписей, а поле <имя измерения> относится к пространству Регистр(Сведений | Накопления | Бухгалтерии).<имя>.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Пространства блокировок определены в платформе «1С:Предприятия 8.1» и выше и соответствуют структуре прикладных объектов конфигурации.
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Пространство блокировок без суффикса НаборЗаписей используется в тех случаях, когда анализируются некоторые данные этого объекта (например, остатки регистра), или когда выполняются какие-либо операции, приводящие к изменению существующих данных объекта (например, восстановление границы последовательности).
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Пространство блокировок с суффиксом НаборЗаписей используется в тех случаях, когда необходимо заблокировать сами записи данного объекта (например, при добавлении новых записей).
Источники:
• ИТС: Блокировки данных в 1С:Предприятии 8


Разделение итогов регистров накопления и бухгалтерии работает и в автоматическом режиме управления блокировками, и в управляемом, но в автоматическом режиме свойство БлокироватьДляИзменения вызывает исключительную ситуацию.


С 20000 записей в наборе начинается эскалация управляемых блокировок «1С:Предприятия 8.2».
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 59.


Со 100000 записей в наборе начинается эскалация управляемых блокировок «1С:Предприятия 8.3» в одной транзакции в информационной базе.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 59.


Таймаут на управляемых блокировках расследуется с помощью событий:
TLOCK
— управление транзакционными блокировками в управляемом режиме.
TTIMEOUT — превышение максимального времени ожидания транзакционной блокировки.
Источники:
• ИТС: Описание и расположение служебных файлов


Свойство БлокироватьДляИзменения при попытке использования в автоматическом режиме блокировки вызывает исключительную ситуацию.
Источники:
• Синтакс-помощник


Правильный порядок событий в технологическом журнале при возникновении таймаута на управляемых блокировках: TLOCK виновника …(возможно, другие TLOCK)… TTIMEOUT TLOCK жертвы …(возможно, другие TLOCK)…


Управляемые блокировки при выполнении запроса не устанавливаются.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 50.


Уровень блокировки — это то, насколько блокировка совместима с другими блокировками, а уровень изоляции — это то, какие допускаются несогласованности при параллельной работе.
Уровень блокировки определяется сущностью выполняемых действий (чтение, обновление, запись), а уровни изоляции, отличные от используемых по умолчанию, могут быть установлены с использованием Transact-SQL или через API (application programming interface) базы данных.
Источники:
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 34-50.


Если в момент эскалации управляемой блокировки по определенному пространству блокировок в этом пространстве уже установлена какая-то несовместимая управляемая блокировка, возникнет ожидание при эскалации блокировки, пока несовместимая блокировка не будет снята либо не будет превышено время ожидания предоставления возможности установки блокировки.


Блокировка — это механизм, с помощью которого сервер (СУБД, а также 1С) синхронизирует одновременный доступ нескольких пользователей к одному фрагменту данных.


Избыточная блокировка — блокировка, не обусловленная бизнес-логикой приложения.

Реклама

Petro Bazeliuk

Записи

Опыт работы с «1С:Предприятие 8» — более 10 лет, за это время реализовано 30 успешных проектов по итеративным методологиям Scrum и Kanban. Оптимальные решения для высоконагруженных ИБ с онлайном от 400 человек. Занимаюсь продвижением в массы системы контроля версий — git и методики git-flow, TDD, BDD, а также проработкой паттерна минимальной модификации конфигурации и внесением изменений без обновления базы данных. Время от времени участвую в проекте xUnitFor1C.

One response to Блокировки и оптимизация

  1. 

    Поле пространства блокировок для Справочник.<имя>, Документ.<имя>, ПланОбмена.<имя>, ПланСчетов.<имя>, БизнеcПроцесс.<имя>, Задача.<имя>, ПланВидовРасчета.<имя>, ПланВидовХарактеристик.<имя>

    Ответ: ССылка

    Нравится

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s