gifts2017

Не гибкие блокировки в "1С:Предприятие 7.7", но чуть-чуть "Управляемые".

Опубликовал Владимир (hogik) в раздел Администрирование - Оптимизация БД (HighLoad)

Обратились ко мне с вопросом по теме форума: http://forum.mista.ru/topic.php?id=558772
Автор темы: "DennizzM".
Название: "v7: 1c v7.7 ошибки транзакции - как отловить виновника?"
Текст с сокращениями:
"Вопрос наверняка не новый... Итак - есть база 1c v7.7 (самописная конфа). Периодически у пользователей возникает ошибка при проведении транзакции. База работает под терминалом. Нагрузка на дисковую подсистему небольшая, CPU на нуле, RAM до черта свободного. Вопрос вот в чем - как отловить инициатора первой транзакции которая всех держит? Итак - как мне выкрутиться? ;) ...я не имею права и не могу лезть внутрь конфы и модифицировать ее.".

Да, действительно вопрос не новый. И есть несколько рекомендаций "смягчающих" данную проблему. Большинство из них были высказаны в теме форума на "mista".
Первый раз мы столкнулись с этой проблемой в 2000 года при внедрении "самописной" конфигурацию на своём предприятии. Тогда пришлось решать проблему путем сплошной замены ВСЕХ методов (термин из "объектного" программирования) обновления информации в базе данных на "свои" функции. В этих функциях производилась нормальная проверка блокировок. Пришлось переделать ВСЕ диалоговые формы ввода информации путем замены штатных кнопок "Новая строка", "Изменить", "Копировать строку" и т.д. на "свои" кнопки с вызовом "своих" функций. Работа по замене методов на функции не заняла много времени, т.к. конфигурация была полностью "самописная". И эта "самописность" была направлена на полный отказ от однопользовательских (и не имеющих никакого отношения к реальной жизни) таких понятий как: ось времени, точка актуальности, последовательность документов, проведение документа, регистры, получить итоги на..., монопольные регламентные функции и т.д. И, именно, сама "самописность" и породила проблему "ошибок транзакций", т.к. мы отказались от штатных механизмов платформы для хранения информации. Вся наша система сделана на справочниках.
В идеи "1С 7.7" не предполагается никаких других способов работы с информацией, кроме как в диалоговых формах и путем проведения (обновление регистров и проводок) документов. И попытки расширить предлагаемую схему путем, например, даже обновлением справочника в модуле проведения документа уже приводит к проблемам.
Суть и причины принятого алгоритма управления блокировками и транзакциями разработчиками 1С понятна и оправдана. Невозможно разработать универсальную и простую (для проблемного программиста) платформу не реализовав скрытый от программиста и простой алгоритм управления блокировками и транзакциями. И такой механизм единственный - обеспечить строгое последовательное выполнение транзакций. Т.е. в один момент времени может выполнятся только одна транзакция с уровнем изоляции "Serializable". Но при таком механизме необходимо обеспечить выполнение всех транзакций по единым правилам (алгоритмам). Но, например, в 1С для проведения документов используется в качестве "семафорной" блокировки таблица 1SJOURN (Журналы документов), а для обновления справочник сама таблица справочника. Что неизбежно приводит к явлению "Взаимная блокировка (deadlock)". Простого (встроенного) способа обработки и выхода из данного явления в 1С не существует, кроме как аварийное завершение транзакции по истечению времени ожидания. И если в диалоговых алгоритмах выдаётся вопрос пользователю с предложением повторить транзакцию или отменить, то в коде на встроенном языке выдаётся сообщение об ошибке и выполнение алгоритма аварийно прерывается.  Естественно, проблемный программист может (и должен) обеспечить обработку аварийного завершения алгоритма, а лучше придумать и внести во всю конфигурацию инструмент обеспечивающий адекватное поведение системы. Но, если этого не сделали, даже, проблемные программисты типовых конфигураций (сотрудники фирмы "1С"), то что можно ожидать от программистов "самописных" конфигураций?
Занимаясь разработкой "DBEng32 Advantage/CodeBase" было принято и реализовано решение по синхронизации выполнения транзакций путем блокировки единого, для всех транзакций, ресурса. И все транзакции выполняются строго последовательно. Такое решение имеет минусы. Например, при долгом проведении документа, другие пользователи вынуждены ожидать её завершение даже если требуется выполнит обновление элемента справочника. Но, поведение системы становится более устойчивым и предсказуемым. Естественно, другой минус - это переход на другую СУБД и использование малоизвестной (моей) разработки подмены "родного движка" 1С-а.
В ходе переписки с автором темы форума на "mista" у меня возникла мысль обеспечить последовательное выполнение транзакций в "DBEng32 Share" http://infostart.ru/public/16268/ Это стало возможным после включения в неё средства LockDB для выполнения OnLine копирования базы данных. И начиная с версии 8.0.1.1 такой инструмент, будет включен в данную разработку.
Для активизации инструмента:
1) Необходимо обеспечить наличие файла "1SxTTS.lck", как описано в http://infostart.ru/public/86647/
2) Установить переменную среды текущего процесса:
SET DBEng32_Exclusive=1
Установка данной переменой в единицу "заставляет" сессию 1С запускать транзакции только если не существует в системе других активных транзакций. И не даёт запустить транзакции другим сессиям до завершения собственной транзакции. При этом, совсем не обязательно чтобы все сессии 1С работали по этим правилам. Например, можно установить эту переменную на нескольких рабочих станциях являющимися (по смыслу эксплуатации) критичными к эксклюзивному выполнению транзакций. Или, в случае использования терминал-серверного режима можно установить эту переменную в среде окружения конкретного пользователя (только для этого пользователя) или для всех пользователей в "System variables".

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Игорь Исхаков (Ish_2) 14.07.11 09:19
Судороги пробегали по телу ... но дочитал.
Конечно , везде есть умельцы , которые как-то выкрутятся в конкретной ситуации.
Но в статье не хватает оптимистического финала :

Из тёмного прошлого в светлое будущее !
Эти безобразия прекратились при выходе 1с8 !
2. Роман Романов (romansun) 14.07.11 12:03
"Как работали раньше?

(0)

А как работают сейчас*?

<<Эти безобразия прекратились при выходе 1с8!>>

1С - из тёмного прошлого в светлое будущее - всегда на пути к совершенству!!"


* в дни работы акции базовый пакет подключения дешевле на 3%. Звоните прямо сейчас.
3. Игорь Исхаков (Ish_2) 14.07.11 15:06
Владимир , я уверен : Вы не умеете считать на счетах.
Так вот , Вы не знаете : сколько удивительных и хитрых возможностей таится в простых счётах.
Счёты - просты , удобны , экологически чисты , неэнергозатратны.
Я прошу Вас - задумайтесь .
4. Владимир (hogik) 14.07.11 16:43
(3)
Игорь.
Мне вспомнилась фраза:
"Все нормальные люди уже выпили и отдыхают. А мы всё стакан ищем." ;-)
Меня попросили помочь человеку.
И 99% моих публикаций на данном ресурсе, именно это и есть - информация и поделки для конкретных людей по их "проблемам" (просьбам).
Если у Вас складывается впечатления, что я "сижу" на DBF-ах в "1С 7.7", то Вы ошибаетесь. Я давно не использую ни DBF-ы, ни 1С-ы...
А "свой стакан" я уже давно нашел. Моя система работает десять лет и не требует никаких переходов на "новые технологии" ("новые" - как это Вам кажется). И предыдущая система работала семь лет, и пред-предыдущая - 15 лет. А я - отдыхаю... ;-)
Вот найдете "свой стакан" - тогда и поговорим...
5. Игорь Исхаков (Ish_2) 14.07.11 17:19
Занимаясь разработкой "DBEng32 Advantage/CodeBase" было принято и реализовано решение по синхронизации выполнения транзакций путем блокировки единого, для всех транзакций, ресурса. И все транзакции выполняются строго последовательно. Такое решение имеет минусы. Например, при долгом проведении документа, другие пользователи вынуждены ожидать её завершение даже если требуется выполнит обновление элемента справочника. Но, поведение системы становится более устойчивым и предсказуемым. Естественно, другой минус - это переход на другую СУБД и использование малоизвестной (моей) разработки подмены "родного движка" 1С-а.
В ходе переписки с автором темы форума на "mista" у меня возникла мысль обеспечить последовательное выполнение транзакций в "DBEng32 Share" http://infostart.ru/public/16268/ Это стало возможным после включения в неё средства LockDB для выполнения OnLine копирования базы данных. И начиная с версии 8.0.1.1 такой инструмент, будет включен в данную разработку.


Боже мой ... последовательное выполнение транзакций. И Вы на полном серьезе это предлагаете .
Про этот ужас лучше молчать или прямо указывать : НЕ ВЗДУМАЙТЕ ПОВТОРИТЬ !
На худой конец , дать комментарий "так люди выкручивались в недалеком тёмном прошлом".
6. Владимир (hogik) 14.07.11 17:42
(5)
Игорь.
Я не предлагаю. Я это сделал. И это прекрасно работает. Прочтите внимательно текст. Там написано: "Невозможно разработать универсальную и простую (для проблемного программиста) платформу..."(с). Проблемный программист - это Вы... ;-)
А по сути - это смотря ЧТО называть транзакцией. Если принимать понимание разработчиков 1С-иков о транзакциях, то можно согласиться с Вашей "судорогой". Ну, а если система выполняет тысячи транзакций в секунду, то... :-)
P.S. Я давно призываю Вас посмотреть на мир не через очки вида "восьмерки". И не через "замочную скважину"(с) запросов и систем АвтоМехАнизации укладки документов в "бухгалтерские" пачки. Попробуйте... Ага? ;-)
7. Игорь Исхаков (Ish_2) 14.07.11 17:57
(6) Каждый может чудить как хочет.
Даже предлагать на полном серьезе последовательное выполнение транзакций (аж 1000 в секунду !)

Просто нужно давать правильный анонс или примечание.
Дескать , ребята, - не судите строго.
8. Владимир (hogik) 14.07.11 19:02
7)
"...нужно давать правильный анонс..."©
Игорь.
Всё, что не укладывается в "восьмерИчное" мышление - НеПравильно.
Начальник, вЫ наш. :-) Не вынуждайте меня переходить на личности... :evil:
Ставьте минус на мою "статейку" и проходите мимо - писать запросы... :-)
9. Игорь Исхаков (Ish_2) 15.07.11 13:36
(8) Да, я без злобы зашёл. Просто так.
Похихикать по-свойски.
10. Владимир (hogik) 15.07.11 17:46
(9)
Игорь.
Вот Вам пример "новых технологий". ;-) http://forum.infostart.ru/forum33/topic40697/
Подключитесь к решению "проблемы". Для справки (о моём понимании АСУПа) - такого понятия, как "свертка базы" НЕ СУЩЕСТВУЕТ... И таких (подобных) ПОНЯТИЙ в продуктах от 1С масса. И в 7.7 и в 8.х - без разницы. Жесть полная... :evil:
11. Игорь Исхаков (Ish_2) 17.07.11 07:58
(10) По ссылке - проблема , конечно. И что это означает ?
Отказаться от 1с8 ?
и перейти к Вашим кустарным подходам и экзотическим БД ?
Хм.. потому что у Вас нет понятия "свертка" ?
Что ж , посоветуйте автору по ссылке конструктив :
конвертировать его 1с-базу согласно Вашим представлением.
То-то он порадуется !

Впрочем , каждый из нас занимается тем , что ему интересно.
Повторяю : имеете право чудить как вздумается.
12. Владимир (hogik) 17.07.11 18:47
(11)
Игорь.
Странно Вы читаете тексты от собеседника.
1) Я Вам (Вы - это Исхаков Игорь (Ish_2)) предложил подключиться к решению проблемы автора той темы. Т.е. помочь человеку в проблеме эксплуатации, а не написании "красивых" алгоритмов. Есть такое понятие - эксплуатация... Вы об этом знаете?
2) Понятие "свертка базы" нет в АСУПе, а не в моей системе. Если в ИС такой термин есть, то это говорит об успешной АвтоМехАнизации ТОЛЬКО бухгалтерского учета.
3) Для АвтоМехАнизации БУ не требуется никаких "восьмерок" и СУБД.
4) Фраза: "конвертировать его 1с-базу согласно Вашим представлением"(с) - бред полный. Это в Ваших представлениях вся "проблема" в конвертации. Или в покупке "восьмерки"... :-)
13. Игорь Исхаков (Ish_2) 17.07.11 18:49
(12) Ок. Все будет хорошо, Владимир.
14. Владимир (hogik) 17.07.11 18:56
(13)
А у Вас, думаю, и так ВСЁ хорошо. С такой то глупостью и хамством... :-)
cool.vlad4; avd2003; +2 Ответить
15. Владимир (hogik) 26.07.11 01:29
(1)(2)
"Из тёмного прошлого в светлое будущее !"(с)
"Как работали раньше? А как работают сейчас*?"(с)
Игорь и Роман.
Вот любопытная информация про "светлое будущее" и про "как работают сейчас":
"при выгрузке в рабочее время начинаются ошибки связанные с транзакцией"(с)
http://forum.infostart.ru/forum26/topic40855/
Надеюсь, что автор темы не ошибся в названии рубрики: "Программирование 1С 8.2" :-)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа