Безизходици 1C и начини за премахването им

Deadlock в 1C е неразрешим конфликт на две брави на данни. Конфликтът се крие във взаимното очакване на двама или повече потребители за заключване на данни.

Системата понякога показва съобщението „Транзакцията предизвика блокиране на ресурса“, което сигнализира на специалиста, че има грешки в системата.

По-долу ще разгледаме по-подробно какво представляват задънените блокировки и как да ги избегнем.

безизходици

За да разреши този проблем с блокиранията, "мениджърът на блокиране" открива спорни ситуации и връща най-малко важната транзакция за СУБД (според него).

Възникването на такива изключения може да се проследи с помощта на Центъра за контрол на производителността (PMC). Във всяка система е необходимо подобни ситуации да бъдат сведени до нищо.

Типични причини за блокиране на СУБД в 1C 8.3

Задаване на недостатъчно ниво на заключване на ресурса

Една от най-честите причини за блокиране. Състои се във факта, че две или повече транзакции четат данни в споделен режим на заключване (S) и след това се опитват да променят тези данни. Но ако даден ресурс има S-lock в друга транзакция, разбира се, нищо няма да работи във всички транзакции, което води до блокиране.

Решението е дазададете максимално необходимото ниво на изолация.

Заавтоматичен режим :

Улавяне на 1C ресурси в различен ред

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

начини

Причината за блокиране в 1C може да бъде различен ред на улавяне на ресурси.

Пример: имаме 2 документа, Разписка за стоки и материали и Реализация на стоки и материали. Да кажем, че документите извършват движения в два регистъра −„Остатъци в складове”, „Останки от организации”. Последващата обработка съдържа следните редове:

Тези. ресурсите се заключват изрично в различен ред. Ако две транзакции съвпаднат във времето, ще се окаже, че нито един от документите няма да може да изпълни второто действие - ресурсите ще бъдат блокирани, което ще доведе до задънена улица.

Решението е да заключите ресурсите в един ред. Ако е много трудоемко да се направи това, има смисъл заключването да се зададе в правилния ред в кода на процедурата по изричен начин.

Грешка при блокиране на 1C по време на работата на вътрешните механизми на СУБД

Паралелизиране на процеса

Много често администраторите срещат грешката на "паралелизиране" на процесите. СУБД на своето ниво може да разпредели изпълнението на дадено действие на различни процесори на системата. В този случай процеси на различни процесори могат да блокират ресурси и по този начин да причинят блокиране. Следните грешки са типични за този проблем:

  • Паралелизмът в рамките на заявката доведе до блокиране на вашата сървърна команда
  • Транзакцията е блокирана в буферни ресурси за комуникация на нишка с друг процес и е избрана като жертва на блокиране

Този проблем се решава чрез задаване на параметъра на СУБДмаксимална степен на паралелизъм на "1" (по подразбиране е "0").

Изграждане на план за заявка с прекомерни заключвания

Също така блокиранията в 1C могат да възникнат по вина на СУБД по следната причина:

Когато конструира сложна заявка, СУБД може да конструира неоптимален план за заявка и по този начин да блокира „допълнителни“ ресурси, което от своя страна може да доведе до блокиране.

Това обикновено се случва при следните условия:

  • извършва се сканиране (сканиране на таблица, сканиране на индекс);
  • наличието на конструкцията "ЗА ПРОМЯНА";
  • режимът на автоматично блокиране е активиран.

За решаването на тези проблеми съответно е необходимо:

  • оптимизирайте заявката в 1C, за да изключите сканирането на таблици;
  • не злоупотребявайте с конструкцията "ЗА ПРОМЯНА";
  • прехвърляне на конфигурацията в режим на управлявано блокиране.

Неоптимални заявки

И последната типична причина за блокиране са неоптималните заявки, които могат да причинят прекомерни заключвания и в резултат на това блокиране.