Исправление ошибки 1С:Предприятие 7.7/8.0 - 100% загрузка процессора при ожидании блокировки
База данных - HighLoad оптимизация
Бесплатные
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО
| Наименование | Скачано | Бесплатно |
|---|---|---|
|
-
.7z 130,62Kb
7957
|
7957 | Скачать бесплатно |
Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Нужно ли данное исправление для 8.0 SQL (клиент-сервер)?
Нет, там эта проблема не существует. А для версии 7.7 эта проблема существует во всех версиях - и SQL, и DBF.
Как узнать, что проблема решена
Вставьте в модуль проведения Предупреждение(), чтобы остановить проведение. Начните (из другой копии 1С) проводить другой документ. 1С с ошибкой станет загружать процессор на 100% пустым циклом ожидания, тогда как 1С без ошибки (или с установленным исправлением) грузить процессор не будет. Я начал свою разработку именно с этой проверки.
Установка
Плагин присоединяется в качестве одного из бинарных файлов 1С:Предприятие (чтобы 1С его загружала, я использую небольшой патч с подменой имени DLL). Управление загрузкой плагина происходит через файл ini.
Если у вас файл-серверная версия 1С (77, 8.0 или 8.1) ставьте из папки Plugin_dbf_77_80_81
Если у вас клиент-серверная (SQL) версия 1С 7.7 - ставьте из папки plugin_sql_77.
Если у вас есть и DBF, и SQL базы 7.7 - ставьте и то, и то (они друг другу не мешают).
Если у вас клиент-серверная (SQL) версия 8.0 или 8.1 - вам не нужно ничего ставить (проблемы с блокировками там нет).
Чтобы было удобнее устанавливать и (при необходимости) отключать плагин сразу у всех пользователей, имеет смысл расположить файлы 1С:Предприятие на сервере (в папке, которая открыта пользователям в режиме "только чтение"). Потребуется исправить только ярлыки на рабочем столе, чтобы они указывали туда. Это позволит оперативно вносить исправления в программные файлы 1С:Предприятие, устанавливать новые релизы платформы и т.д.
Сигнальные файлы
В настройках (ini) есть параметр - сигнальный файл. Если он указан, то файл с указанным именем возникает при конфликтах блокировки синхронно с сообщением, которое вы видите на экране. Вы можете научить ваших роботов проведения смотреть на этот файл, и делать паузу, пока пользователь проводит свой документ. Потом робот проведения должен сам удалить этот сигнальный файл.
Если у вас нет роботов проведения, или они не беспокоят ваших пользователей, то сигнальный файл вам не нужен (укажите там пустую строчку).
Вступайте в нашу телеграмм-группу Инфостарт
См. также
HighLoad оптимизация Разработчик 1С 8.3 1С:ERP Управление предприятием 2 Бесплатно (free)
Использование оператора «В» для полей или данных составного типа (например, Регистратор) может приводить к неочевидным проблемам.
10.11.2025 15960 ivanov660 48
HighLoad оптимизация Разработчик 1С:Предприятие 8 1C:ERP Бесплатно (free)
Приведем примеры использования различных в динамических списках и посмотрим, почему это плохо.
18.02.2025 16542 ivanov660 39
HighLoad оптимизация Системный администратор Разработчик 1C:ERP Бесплатно (free)
Не всегда индексирование с дополнительным упорядочиванием полезно.
04.02.2025 15174 ivanov660 21
HighLoad оптимизация Разработчик Россия Бесплатно (free)
А вы знали, что сервер 1С при соединении с базой на сервере PostgreSQL самостоятельно устанавливает некоторые параметры? Это важно знать при настройке сервера и отладке долгих запросов. Предлагаю разобраться.
27.08.2024 10466 soulner 10
HighLoad оптимизация Технологический журнал Системный администратор Разработчик Бесплатно (free)
Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.
24.06.2024 19202 ivanov660 13
HighLoad оптимизация Разработчик 1С:Предприятие 8 Бесплатно (free)
Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.
06.06.2024 25051 Evg-Lylyk 73
HighLoad оптимизация Механизмы платформы 1С Системный администратор Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Сравним «Регистры сведений» с «Сервисами интеграции» и узнаем, кто быстрее!
28.03.2024 14678 dsdred 27
HighLoad оптимизация Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.
13.03.2024 14663 spyke 29
>>Нет, там эта проблема не существует.
Это можно понимать что проблема для SQL вообще не существует? Или для 7.7 плуг все-таки нужен?
Поскольку использую еще для ДБФ - плюс однозначно.
А не повлияет ли снятие блокировок на неверные расчеты?
(учет по среднему)
скажем
(1) бухгалтер вводит документ поступление МПЗ
(2) начинает делать какой либо документ по списанию этого МПЗ
(2) закончил ввод и начинает проводить
на половине пути проведения документа вторым бухом, запускает проведение первый бух
т.е. возможна ситуация
(2) получаю остатки по МестамХранения
(1) изменяет регистр Партии и МХ
(2) получает остатки по Партиям
(2) средняя цена изменилась в сторону увеличения
в случае с блокировкой транзакций, остатки и средние суммы посчитаются верно,
а если блокировки отключены? может такое произойти и на сколько вероятно?
Также убрал внешние компоненты (плагином к программным файлам по-моему лучше), чтобы не создавать разных вариантов и лишних вопросов.
Дописал описание по поводу сигнальных файлов, и в каких случаях чего нужно ставить.
Я вот сейчас что подумал. Если проблема только в патчинге, то я могу замутить загрузчик в виде внешней компоненты. А она уже подгрузит те же самые плагины.
Неудобство с окошком о паузе, оно активизуруется при ожидании и переключает из других приложений обратно, а сообщение в трее, в случае использования опубликованного приложения Citrix'a, правильно не отображается. Хорошо, что можно отключить, и то, и другое.
>> Кстати, как работает с Kernel33.dll от ? Глючит?
Да. Поэтому и появился Kernel37. Но алгоритм у romix лучше.
>> Может в вашей компоненте заложить снятие ограничения в 1ГБ для ДБФ баз?
Данный алгоритм должен включатся до открытия файлов DBF. А алгоритм разработки может включаться и позже. Проще в разработке romix учесть при перехвате еще и имя Kernel33.
проблема существует :(
ну вот сматрите
1С:Предприятие 8.0 (8.0.18.2)
Конфа и как видишь релиз Семейство "АСТОР: Ваш магазин 6.0" (6.0.15.8)
сама база гдет 7 гигов лог транзакции около 40 ка. Гигов сервак оптерон 2 процессорный 4 гига озу пользователеи одновременно работающих и проводящих наклдые всякие 16 РОБОТОВ . Загрузка проца 100 % а оперативы жарет 4,75 . Работа всех идет в терминальном режиме. Хотел твою разработку применить в этом во всеи и помогло бы конкретно!!!!Но б..ин муха она тока на фаиловом работает а на SQL нет памагииитя плз
Попробуйте связаться с автором по мылу или через личку
Хотя, мне кажется, вам лучше обратиться к разработчику вашей конфигурации.
Вы лог транзакции не чистите специально?
Самое интересное, что когда-то была другая компонента (того же автора?), "vk_sleep_1C". Грузилась она другим способом :
Если ( ЗагрузитьВнешнююКомпоненту("vk_sleep_1C.dll") = 1 ) Тогда
vk_sleep=СоздатьОбъект("Addin.vk_sleep_1C");
vk_sleep.УстановитьПаузуПриБлокировке(1024, "7.7");
vk_sleep.ПоказыватьВсплывающиеПодсказки=0; //если=1, то показывает balloon tooltips в трее при блокировке.
КонецЕсли;
То есть не патчили DLLки 1С на диске, а ремонтировали проблему как-то иначе. (Кажется читал, что тоже патчили, но уже в памяти.)
Сейчас ссылок на неё в сети почти нет (где скачать - вообще не нашел). Хотя данный вариант мне, от чего-то, более приятен, пусть уж на диске эти правообладательские ДЛЛ останутся нетронутыми, а в памяти - не проверят :)
Вполне исправно пашет... Вроде :)
Автор, чем vk_sleep_1C.dll плоха?
На сайте автора хранится куча старых его разработок, и их развитие.(Что в принципе верно, видно ход мысли, да и вообще..)
Но на эту vk_sleep_1C.dll никаких намёков.
Здравствуйте, я поставил компоненту Plugin_Terminal_Sleep в фирму с базой 7.7 Dbf Торговля 9.29.
Количество пользователей более 30.
Стала появляться ошибка в определенный момент, при вводе на основании ЗаявкаПокупателя документа Реализация и попытке записать документ пишет
Объект заблокирован, т.е. только что созданный документ, еще даже не до конца созданный оказывается заблокированным.
Это исчезает только после лечения базы через тестирование и исправление, где вылезает список ошибок по потерянным шапкам документов.
После лечения некоторое время работает, потом опять те же ошибки. Я это связываю с не корректной отменой транзакции.
Размер самого большого Dbf файла не превышает 500 МБ. Общий объем базы с dbf и cdx более 4 ГБ.
Компоненту пришлось отключить!
"Компоненту пришлось отключить!"©
И помогло? ;-)
"Я это связываю с не корректной отменой транзакции."(с)
Компонента от Романа (romix) не имеет отношение к отмене транзакции.
Вы смогли устранить проблему "CodeBase Error #: -310" ?
Если не устранить эту проблему, то ошибки могут быть любые...
Опять полечил и компоненту больше не включал! Такой ошибки больше не повторялось!
CodeBase Error #: -310 была ошибка была в другой базе, в бухгалтерии 7.7, там пришлось обрезать базу, так как Dbf - файл превышал 2 ГБ.
Все запустилось и счастье где-то близко, но вернулись к проблеме "Ожидания блокировки"
Т.к. и "секретный релиз" и VK_TerminalSleep используют одну и ту же BkEnd, то либо вылетаем "Не верная версия ODBC", либо блокировки :(
Есть у кого-нибудь сборка из этих двух BkEnd в одной? или еще варианты?
АдресПолучателя = СтрЗаменить(АдресПолучателя,"<","");
АдресПолучателя = СтрЗаменить(АдресПолучателя,">","");
АдресПолучателя = СтрЗаменить(АдресПолучателя,"(","");
АдресПолучателя = СтрЗаменить(АдресПолучателя,")","");
Пока Найти(АдресПолучателя, " ") Цикл //Цикла
ПустаяМиска = Найти(АдресПолучателя, " ");
ПозГавГавки = Найти(АдресПолучателя,"@");
Гафф = ПустаяМиска - ПозГавГавки;
АдресПолучателя = Сред (АдресПолучателя, ?(Гафф>0,1,ПустаяМиска + 1),?(Гафф<0,СтрДлина(АдресПолучателя),ПустаяМиска - 1));
КонецЦикла;
для работы в 8.2 пришлось исправить:
Если НЕ Письмо.ОбратныйАдрес.Количество() Тогда
ОбратныйАдрес = Письмо.ОбратныйАдрес.Добавить();
Попытка
ЗаполнитьЗначенияСвойств(ОбратныйАдрес,Письмо.Отправитель);
Исключение
КонецПопытки;
Если ОбратныйАдрес.Кодировка = "" Тогда
ОбратныйАдрес.Кодировка = "KOI8-R";
КонецЕсли;
КонецЕсли;
перед
Почта=Новый ИнтернетПочта;
Почта.Подключиться(ИПП);
Почта.Послать(Письмо);
...
Там может быть уже это реализовано ЕМНИП, посмотрите в документацию, вроде бы Hogik встраивал то что нужно в свою DLL.
А проверить можно попыткой параллельного проведения двух доков в пустой базе, если в модуле проведения одного из них вставить Предупреждение для остановки транзакции, и следом начать проводить другой док той же базы из соседнего окна 1С. В непатченной 1С загрузка процессора возрастает до 100%, а в патченной остается близкой к нулю.
У меня одного работает отлично. Если под одним пользователем искусственно повесить при проведении, то под вторым тоже подбор работает нормально. Начинает тормозить при 30 пользователях, на поиск уходит 2-10 секунд вместо <1 секунды.
Тестировал утром, посмотрел нагрузку на процессор, на память, жесткий диск, везде всё нормально, но при этом подбор тормозит. Может есть идеи?
Скачал данный дистрибутив. Установил на своем компе: скопировал файлы odbc33.dll,odbc33.ini в папку 1cv77. Запустил patch_bkend.exe.
из папки plugin_sql_77.
При запуске 1С выдается "ошибка инициализации ODBC".
Используется 25 релиз 1С 77. win 7-64 на компе. SQL сервер 2008.
короче не работает :( .... куда копать?
Скажите, а для 27-го релиза 1с 77 подойдет данный плагин? Указана совместимость с 25-м релизом.
Подскажите, пожалуйста, есть ли решение для Windows 2016 + SQL 2016 (2017)?
Попробовал нынешний патч (положил odbc33.* в папку 1С и заменил ODBC32.DLL -> ODBC33.DLL в файлах bkend.dll и bkend0.dll) - не помогает - ругается при запуске "Ошибка инициализации ODBC!".
Спасибо.
vk_sleep = СоздатьОбъект("Addin.vk_sleep_1C");;
vk_sleep.УстановитьПаузуПриБлокировке(1024, "7.7"); // тут норм
vk_sleep.УстановитьПаузуПриБлокировке(1024, "7.7"); // внимание! 1С падает при повторном выполнении на этом операторе
обнаружил вчерась... отлаживая/рефакторя код загрузки компонент ;-)
Вин10, DBF
Ведет себя очень странно
Например, если компоненту не загружать, а сделать просто
Процесс = СоздатьОбъект("Addin.vk_sleep_1C"); // ошибок не дает, Процесс даже какое-то значение имеет Addin.vk_sleep_1C, но при этом
Процесс.УстановитьПаузуПриБлокировке(1024, "7.7"); // даст ошибку
.
а код
ЗагрузитьВнешнююКомпоненту("vk_sleep_1C.dll");
vk_sleep = СоздатьОбъект("Addin.vk_sleep_1C");
vk_sleep.УстановитьПаузуПриБлокировке(1024, "7.7");
при первом исполнении отработает норм
а при повторном
ЗагрузитьВнешнююКомпоненту("vk_sleep_1C.dll");
vk_sleep = СоздатьОбъект("Addin.vk_sleep_1C");;
vk_sleep.УстановитьПаузуПриБлокировке(1024, "7.7");
- 1С тупо падает.
.
и никакого варианта как определить загружена компонента vk_sleep_1C.dll - не нашел...
как определить что vk_sleep_1C.dll уже загружена..?
//{--- загрузка vk_sleep_1C.dll, описание особенностей
//vk_sleep_1C.dll - мутная, поведение при загрузке и применении метода - неадекватное,
// падает при повторном выполнении в сеансе 1С метода УстановитьПаузуПриБлокировке()
// поэтому для исключения повторного выполнения надо убедиться, что ВК уже загружена
// при этом, если ВК не загружена Процесс.СоздатьОбъект("Addin.vk_sleep_1C") - отрабатывает без ошибок,
// но Процесс.КакойТоМетодКомпоненты() - дает ошибку типа Поле агрегатного объекта не обнаружено...
// наличие такой ошибки можно рассматривать как признак того, что ВК не загружена,
// так как повторное исполнение метода УстановитьПаузуПриБлокировке() - приводит к краху 1С, то
// используем другой метод, который не ломает 1С: Процесс.Sleep()
//}--- загрузка vk_sleep_1C.dll, описание особенностей
Процесс = СоздатьОбъект("Addin.vk_sleep_1C");
Попытка Процесс.Sleep(5); // повторное исполнение метода не приводит к краху 1С,
Исключение // используем метод как сигнальный, что компонента не загружена/загружена
ОшибкаОписание = ОписаниеОшибки(); Процесс = ""; // признак, что компонента не загружена
Если Найти(ОшибкаОписание,"Поле агрегатного объекта не обнаружено (Sleep)") = 0
Тогда // контроль ожидаемой ошибки, получили не то что ждали...
Сообщить("загрузка ВК <vk_sleep_1C.dll>, проблема: "+ОшибкаОписание,"!");
КонецЕсли;
КонецПопытки;
Если ПустоеЗначение(Процесс) = 1 Тогда
// компонента не загружена, ЗАГРУЖАЕМ, ВЫПОЛНЯЕМ ДЕЙСТВИЯ ПРИ ПЕРВОНАЧАЛЬНОЙ ЗАГРУЗКЕ
Иначе
// компонента загружена, НЕ ЗАГРУЖАЕМ, ВЫПОЛНЯЕМ/НЕ ВЫПОЛНЯЕМ ДЕЙСТВИЯ ПРИ ПОВТОРНОЙ ЗАГРУЗКЕ
КонецЕсли;
ПоказатьРейтинг: 624
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 15367
Создание 13.12.07 14:13
Обновление 18.08.10 14:42
Просмотры 67999
Загрузки 7957
Рейтинг
223
Комментарии 82
Код открыт Не указано
Рубрики HighLoad оптимизация
Кому
Системный администратор
,
Разработчик
Тип файла Компонента, плагин (dll, vbs,..)
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)