#1
by romix
Решил посмотреть, что же происходит, когда 1С ожидает блокировку. Создал простейшую конфу, в которой есть всего один документ. В модуль проведения вставил Предупреждение, чтобы она останавливалась и все блокировала. Открываю другую копию той же конфигурации, и пытаюсь создать новый документ. (или провести старый). 1С в этом случае загружает проц на 100% и крутится в непрерывном цикле, опрашивая время.
#3
by romix
Софтайсом останавливаю наугад - с большой вероятностью процессор попадает в этот цикл, и я могу пройти его по шагам. Непрерывно жму F10 - действительно крутится в одном и том же цикле. Нахожу осмысленные функции, заходя по F8 во вложенные CALL-ы (комментарии я добавил сейчас вручную - SoftICE их, конечно же, не показывает).
#4
by romix
Устраняет 100% загрузку процессора, когда кто-то проводит документ, а кто-то второй пытается тоже начать его проводить.
#5
by romix
(+4) Точнее, когда один юзер проводит документ, а другой пытается создать новый документ или провести другой документ - тогда в терминале (да и не в терминале тоже) все, что называется, встают.
#6
by insider
"устраняет" - вот это не совсем понятно, как она обходит платформу или что она делает (конечно можно исходник посмотреть, но может в двух словах... а то мне SoftIce, увы, ни о чем не говорит)
#7
by romix
Короче 1С-ка непрерывно долбится в функцию KERNEL32!LockFile, и пытается заблокировать файл. Программисты забыли вставить вызов sleep, и поэтому при многопользовательской работе в 1С включаются тормоза.
#8
by romix
Я перехватываю системный вызов GetLastError - возврат последнего кода ошибки. Если он равен 33 (21h), то я включаю паузу на указанное (при вызове внешней компоненты) количество миллисекунд.
#11
by romix
Я взял этот код из дампа (см. выше): Код ошибки 33 MSDN расшифровывает так: 33 The process cannot access the file because another process has locked a portion of the file. ERROR_LOCK_VIOLATION
#13
by insider
т.е. проверка "проведенности" будет производиться не в вечном цикле, а с интервалом 1с, так?
#14
by romix
Короче, если кто-то другой проводит документ, то ты не можешь провести свой документ, и не можешь создать новый документ - 1С-ка ждет в цикле, пока другой пользователь не освободит таблицу. Я вставляю паузы sleep, которые не потребляют процессорного времени. Получается, что ожидание происходит с минимальной загрузкой проца и сети.
#23
by romix
Запускал 2 копии одной конфы на одном компе. Как еще тестить, пока не придумал. Блокировку ловит, что видно из отладочной печати.
#61
by romix
А руками у тебя работает подбор, когда ты активизируешь поле, медленно жмешь F4, потом первую букву, потом вторую и т.д.? Вставь паузы sleep между имитациями нажатий, чтобы в замедленном темпе увидеть, а что происходит. Я не помню, есть ли в компоненте этот метод, но в компоненте или здесь он точно есть, и его можно поюзать. Вот думаю для SQL-базы то же самое намутить, там наверняка тоже "порожний" цикл без выполнения пауз, и резко падает производительность...
#64
by romix
Ты в обработчике нажатия на кнопку (к примеру) можешь вызвать событие? Еще вариант - событие попадает в форму справочника, т.к. там есть его обработчик.
#65
by romix
Т.е. там можно и вписать продолжение алгоритма, если вызвать событие с особым названием, и в кач. параметра передать нажатую клавишу.
#69
by Может
в "другом" - ничего нет вообще, чисто. А в обработчик события отладчик не идет КонецПроцедуры вот сюда попадает и все глСервис.ВнешнееСобытие("FormEx","ВводСимвола",прм_Символ);
#79
by romix
Хм, к сожалению нету у меня сегодня xp sp2, завтра посмотрю. На всякий случай, у меня 25 релиз 1С. DBENG32 7.70.0.14
#91
by romix
Там короче надо открыть две копии конфы, в одной из них начать проводить документ, а в другой попытаться создать новый док. Без ВК загрузка процессора под 100%, с ВК загрузка = 0 (или близка к 0).
#113
by ildus
ладно пользователь нажмет несколько раз повторить, а если работает обработка например обмена с клиент-банком, то она прервется с ошибкой.
#114
by Maniac
ну да прирвется. Она спросит повторить или нет, но при этом не будет 100 процентного висяка.
#119
by romix
В 0 тоже можно убрать. Однако хотелось бы чтобы работало по-человечески, и была возможность прервать массовую обработку, когда юзер запрашивает проведение своего документа. Нет еще, тока пришел, щас гляну..
#126
by romix
Да я специально вынес в параметр - кому как больше нравится. Помимо загрузки процессора, есть еще такая фишка, как задалбывание сервера лишними запросами - не факт что они кешируются, и не приводят к сбою позиционирования головок HDD, когда кто-то слишком часто долбится в одно и то же место... Да, наверное можно (даже лучше) и так - иначе приколы с языком раскладки в обычном SendKeys.
#134
by Obed
Протестил - порадовало )) Была проблемма с одно кассой - вечно че-то там захватывала, чеки с трудом проводила, ща крсиво все стало :)
#139
by mishaPH
А можно ли в файл который пишется на диск при транзакции, писать имя пользователя? или любую информацию, которая поможет определить кто создал данную транзакцию
#145
by aka MIK
Так что скажешь насчет ситуации, когда время ожидания в параметрах установлена в 0? Я всегда подозревал, что это не выход - надо процессу дать шанс подождать... 15 сек. + компоненте будет гламурнее?
#154
by VitGun
Только вот на практике все совсем подругому...я бы даже сказал наоборот...эти самые, так сказать, технологии и являются причиной нехилых тормозов.....
#161
by mishaPH
Да счаз.. Ты не работал с большим числом пользователей на терминале. все 4 сожрет если пользователей много и представь 4 сессии начнут проводить доки, и распиханы эти 4 сесии по разным процам вот тебе и 100% загрузки сервака со всеми его процами, 5й пользователь начинает проводить док, на том проце, который проводит в данный момент: как результат - у того кто проводил было 25% проца, стало 12,5% еще лдин влез, и в результате имеем полностью остановившуюся базу т.к. заблокировано все из-за проведения, и допровестись проблема, т.к. несколько сессий отжирает проц этими циклами.
#185
by ildus
погонял на рабочей базе при работе 20 пользователей с групповым перепроведением-работает нормально. задержка 10мс, время ожидания захвата 30с. единственное уточенние - путь к маркерному файлу надо указывать полный или относительно каталога ИБ, иначе он будет создаваться в рабочих каталогах пользователей, и обработка группового проведения их не увидит, а будет видеть только свой собственный файл, хотя даже при отсутствии проверки на файл документы у пользователей проводятся без задержки.
#187
by romix
Ты че-то маленькую задержку ставишь имхо. Я бы поставил секунду-две. Это опрос заблокированности таблицы, который завершился неудачей (объект заблокирован). Если объект свободен, то и паузы не будет. Слишком часто долбиться в одно место на диске - как бы дыру в нем не прожечь :-)
#189
by romix
Лишнее окно всякий раз юзеру + юзер может долго в него долбиться, когда кто-то проводит документы. Прога в позволяет перехватывать юзерскую транзакцию, и приостанавливать массовое проведение (по наличию файлика).
#211
by Dmitish
+ Подтверждаю тормоза в ТиС (dbf) при подборе номенклатуры и даже при перемещении по перечню номенклатуры внутри документов. Изменение времени Sleep результатов не приносит.
#213
by Drok
DBF. работа в терминале. не важно, есть проведение в данный момент или нет... т.е. на мой вгляд происходит слип опроса всех таблиц...
#221
by romix
Патч только для 7-ки, и он исправляет явную ошибку 7-ки. К 8-ке он не имеет отношения, и работать там и не должен.
#236
by Учусь
могу предполодожить что ошибка в HANDLE WINAPI CreateMutex( ); я как то делал в тестовых целей для себя ВК работающей с mutex, так, надо было верно создовать. могу вечером посмотреть как было дело. так вот, с Mulex1C возникло ощущение, что не верно инициализировался мутекс, и сессии под другими логинами его не видели.
#244
by VLAL
под SQL не тестировалось, в dbf нормально ждем твоих исправлений для dbf. Кстати и в текущем варианте тормозов не замечено в справочнике. Конфа самописная, транзакции исчезли :) за что большое спасибо.
#245
by Dmitish
Предложение модератору открыть новую ветку - уж больно "тяжела" страница для закачки ч/з Dial-up (настроек по разбиению на страницы не нашел) И еще хотелось бы услышать о другом подходе к решению проблемы блокировок для SQL - именуемое как "гибкие блокировки". У кого это чудо работает и может быть даже подкинуть идеи тем кто только на этот путь становится...
#248
by Вильям
Ром! А можно узнать, как самому получить файл odbc33.txt из своей 32-й длл-ки, чтобы сравнить с той, что лежит в архиве?
#251
by romix
(208, Drok) Обновил компоненту для DBF, вставив проверку на источник вызова (смотрю на вершину стека, что там лежит). Проверить не на чем, т.к. у меня пролистывание справочников и журналов не тормозит. Если торможение будет продолжаться, прошу выслать справочник (перетащите его мышкой в пустую конфу).
#252
by romix
Компонента лежит по адресу: Я добавил текстовое описание (порядок установки) и разделил на две папки с версиями для DBF и SQL.
#254
by zenik
Результы теста: 2-х головый XEON 2.0, 8 гиг ОЗУ, SQL DE, Win2003 EE. До патчинга скачек при блокировке транзакции до +40% (у сервака еще своя боевая нагрузка была). После патчинга... Скачков при блокировке небыло вообще. Delay оставил по умолчанию - 1000. Тест провел 3 раза. Каждый раз получая одинаковые результры. Огромный респект автору.
#255
by Матрейя
Тоже пробовал компоненту Ромикса - положительный эффект есть, отрицательные есть, но несущественны.
#259
by zenik
Тестировал на сервере, через терминал. Большого смысла патчить клиентские 1С ИМХО нет смысла. Пользователь обычно работает только с одной 1С. А для терминальника самое то. Сегодня вечером пользователи свалят из базы, поставлю в боевом режиме.
#262
by romix
Ну да, это для многопользовательского режима. В монопольном режиме патч никак не повлияет. Вот думаю, не сделать ли общий патч. Щас попробую заценить - я так понимаю, что надо чтобы модуль проведения писал что-то в периодические реквизиты...
#264
by romix
Проблема у меня не воспроизводится. Что именно вы делаете? Можно ли простейший случай на "почти пустой" базе? Есть идея: перехватывать появления окна: --------------------------- 1С:Предприятие --------------------------- При выполнении транзакции произошла ошибка! Таблица: 1SJOURN Ошибка обращения к данным при транзакции, выполняемой другим пользователем Повторить попытку выполнить транзакцию? --------------------------- Да Нет --------------------------- Вместо вывода окна делать паузу, и имитировать, что пользователь нажал Да. Тогда будет работать независимо, SQL или DBF. Для достижения полезного эффекта потребуется выставить время ожидания захвата таблиц в 0.
#265
by syktyk
Да собссно я имел ввиду не смену приоритета у задачи, а переключение на другой процесс, т.е. при любом обращении к системе вызывающий процесс принудительно освобождает процессорный ресурс, вплоть до ближайшего прерывания RTC или таймера внутреннего шедулера. Я работал с ОС реального времени, там эта процедура выполнялась всегда.
#268
by romix
Обновил патч для DBF - теперь он сделан не как внешняя компонента, а как патч+заменяющая DLL. И перехватывает окно (предупреждение) с ошибкой. Подробности - в readme.txt внутри архива .
#286
by romix
Я кажется понял, из-за чего у тебя тормоза. Возможно, ты не поставил патч SQL на 1С-ку, которая делает массовое проведение доков. Кстати, административная установка - это всего лишь, когда папка BIN лежит на сетевом диске (и открыта юзерам только на чтение). А у юзеров на рабочем столе - только ярлыки в эту папку. А зашли мне плиз DBEng8.dll от новой версии 1С-ки... Я заценю что там новое.
#287
by Maniac
У меня три терминал сервера на которых локально установлена 1С. Административных установок у меня вообще нигде нет и я ими не пользуюсь. На одном из терминалов, самом мощном, стоит и лежит база SQL. Файл от восьмерки вышлю завтра.
#288
by romix
Давай. Для DBF-ной базы 7.7 сейчас все проблемы я думаю решатся (т.к. я в новой версии перехватываю всего лишь окно сообщения, не вмешиваясь глубоко в движок 1С), а для SQL-ной - надо еще смотреть. Лог могу приделать, какие SQL-запросы приводят к блокировке. Может у тебя там периодические реквизиты воду мутят...
#312
by romix
Т.е. обработка массового проведения теперь не тормозит работу пользователей? Или у вас так много пользователей, что они друг дружку все время тормозили?
#313
by Вильям
Пользователей - порядка 30, активных - человек 10. Операторы, когда набивали заказы, расходы - загружали весь процессор, сидели в ожидании и "нервно курили (с)". Теперь - тормозов нет. Еще раз спасибо.
#314
by romix
Да не за что.. Я просто не понимаю откуда такой сильный эффект. У вас терминал + SQL? И они курили, когда кто-то массово перепроводил документы обработкой, или даже без перепроведения обработкой - тоже курили?
#319
by romix
Да я думаю партнеры напишут, если окажется, что сеть 1С после этого работает намного лучше.
#320
by syktyk
В старых операционках (RSX-11 и др.)файл хранился в нескольких версия. И всегда использовалась самая последняя. Так, что идея хорошая! :)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Samsung ML1210 не печатает, не понятно???? :( Может кто знает решение пробл
- Решение проблемы печати для терминале и Citrix.
- Решение проблемы задвоения элементов справочника
- Книга знаний ТурбоМД: решение проблемы загрузки мокселей
- Исправление ошибки 100% загрузки процессора(вопрос)
- проблемы 100% загрузки процессора при ожидании транзакции
В этой группе 1С
- Как в 1С77 отсортировать журнал по реквизиту, входящему в группу справочника
- v8 Как узнать текущее время?!..
- Как изменить нумерацию документов со сквозной на нумерацию по дате
- V7HttpReader, ОтправитьДляОбработки()
- Запрет на удаление элементов справочника,
- Сотрудник сменил фамилию что делать? (Камин)
- v8: Конвертация данных составной тип данных
- Упрощенка. Книга учета доходов и расходов
- НДФЛ в Налогоплательщике от 1С
- Citrix + 1C = подключение com сканера штрих кодов ????
- Организация выписывает счет фактуру самой себе
- Кто работает с V7Backup: при смене рабочей даты компьютера скрипт не запускается
- v8: Как получить форму для выбора группы контрагента в OLE-базе?
- Как в тексте запроса определить активный или пассивный счет
- Как в 1С получить контрольную сумму(CRC) файла?
- Принтер этикеток Godex BZB-2 - проблема ....
- Отваливается 1С в терминале, mfc42.dll
- Общепит сетевая версия
- Как выгрузить базу контрагентов из 1с Бухгалтерия на платформе предприятия
- Задваиваются номера документов.