Исправление ошибки 1С:Предприятие 7.7/8.0 - 100% загрузка процессора при ожидании блокировкиПри работе 1С (7.7, 25 релиз, 8.0, 8.0.12.21) наблюдается неоправданная загрузка центрального процессора при ожидании захвата таблиц. Приведенная по ссылке разработка (DLL+патч) позволяет вставить вызов sleep() между последовательными опросами блокировки, и ликвидировать "торможение" в многопользовательской среде 1С (это особенно актуально при работе в режиме сервера терминалов). | | Автор статьи: romix | Редакторы: Мастер1С Последняя редакция №14 от 05.09.14 | История URL: http://kb.mista.ru/article.php?id=179 | |
Ключевые слова: проблема со скоростью, тормозит база, блокировки, проведение документов, ожидание захвата таблиц, терминал, очень медленно работает, появляются сообщения о блокировках, транзакция, при выполнении транзакции произошла ошибка!, ошибка обращения к данным при транзакции, Повторить попытку выполнить транзакцию?
Разработка для скачивания
http://infostart.ru/projects/1515/
http://x-romix.narod.ru/
Plugin_Terminal_Sleep.rar (74K) - исправляет ошибку 1С:Предприятие 7.7 (DBF и SQL версия) - при ожидании блокировки 1С грузит систему непрерывным опросом.
odbc33_work.7z Версия паузы при ожидании блокировки, с исходниками (Delphi 6,7), которая несколько лет стоит у нас на сервере (проблем нет). SQL 7.7, 25 релиз.
Цель использования
Разгрузить процессор, когда два или более пользователей пытаются провести документ. 1С пытается заблокировать таблицы, но делает это без пауз, и загружает процессор на 100%. При этом пользователи практически "встают", и нормальная работа прекращается. Компонента позволяет решить эту проблему и нормализовать работу пользователей.
Принцип работы: вставляет в цикл ожидания захвата таблиц системный вызов sleep.
Установка различается для версий DBF 7.7, SQL 7.7 и 1С 8.0, описана в readme.txt.
Отмена действия компоненты - выставить в INI-файле паузу = 0, выйти и войти в 1С.
Деинсталляция компоненты - восстановить папку BIN из резервной копии.
Исходный код (компилятор - Delphi 6) прилагается.
Нужен ли патч для 8.0 SQL?
Нет, там эта проблема не существует.
Как узнать, что проблема решена
Вставьте в модуль проведения Предупреждение(), чтобы остановить проведение. Начните (из другой копии 1С) проводить другой документ. 1С с ошибкой станет загружать процессор на 100% пустым циклом ожидания, тогда как 1С без ошибки (или с установленным исправлением) грузить процессор не будет.
Я начал свою разработку именно с этой проверки.
Проблема с клиентами Windows 98
Выяснилось что ошибка ("Ошибка инициализации ODBC") возникает при запуске 1С на некоторых Windows 98 клиентах. Решилось все установкой на них Microsoft Data Access Components 2.8. (сообщил Vadim Stepanov).
Другие возможные решения
ВК Приоритет
Автор: Александр Орефков
http://openconf.itland.ru/vk/prior/
multex_1c
Автор: Z1
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=78&lid=2836
Ветка обсуждения
Решение проблемы 100% загрузки процессора при ожидании транзакции (ВК+перехват DLL)
Несколько положительных отзывов
orefkov
26- 11.04.06-08:45(25)
Более грамотное решение.
ø VitGun
146 - 10.04.06 - 12:02
« х
Отлично!! В ГМ прописал. Поставил УстановитьПаузуПриБлокировке(10). У юзеров Время ожидания=15. По словам бухов скорость на 50% выросла. 100% загрузки проца есть, но на 1 секунду - не больше(слабое железо), а раньше кто-нибудь проводит док - все висят...причем минуты 2-3...
ø pvase
218 - 12.04.06 - 13:55
« х romix - Большой СЕНКС, действительно рулит под SQL.
ø zenik
254 - 15.04.06 - 12:31
« х
(254) Результы теста: 2-х головый XEON 2.0, 8 гиг ОЗУ, SQL DE, Win2003 EE.
До патчинга скачек при блокировке транзакции до +40% (у сервака еще своя боевая нагрузка была). После патчинга... Скачков при блокировке небыло вообще. Delay оставил по умолчанию - 1000. Тест провел 3 раза. Каждый раз получая одинаковые результры.
Огромный респект автору.
ø Вильям
311 - 19.04.06 - 14:18
Ромикс! Спасибо! SQL - летает... 310
« х
(310) Ну да, операторы теперь не тормозят, когда проводят документов кучу...
312
ø Вильям
313 - 19.04.06 - 15:28
« х
(312) Пользователей - порядка 30, активных - человек 10. Операторы, когда набивали заказы, расходы - загружали весь процессор, сидели в ожидании и "нервно курили (с)". Теперь - тормозов нет. Еще раз спасибо. 314
ø Maniac
Модератор
343 - 22.04.06 - 14:32
« х
Рома, огромный тебе респект. Все работает на ура!!! У меня база 6 гиг на трех терминал-серверах. 50 юзеров. 17 регистров накопления. В последнее время вопрос о транзакциях стал особенно актуальным. Сейчас касса говорит что "не успевает работать за программой" )) Гыыы. Кросавчег!!!! 346
MIK
124- 15.04.06-01:55 romix, ты молодец! Будешь в Киеве, с меня литр пива с трубочками ☺
Мастер1С
Отлично! Спасибо огромное!
Другие разработки с данной функциональностью
Книга знаний: Перехват API-вызовов и альтернативные плагины для 1С:Предприятие
(DBF - реализация без внешней компоненты)
Книга знаний: Множественный отбор в журналах и справочниках 7.7 заменой запросов SQL
(SQL - внешняя компонента) |