Имя: Пароль:
1C
 
Решение проблемы 100% загрузки процессора при ожидании транзакции (ВК+перехват DLL)
Ø (romix 30.05.2006 15:50)
,
0 romix
 
модератор
09.04.06
00:27
Компонента с исходным кодом (Delphi 6) и тестовой конфигурацией выложена здесь:

http://x-romix.narod.ru/vk_TerminalSleep.rar
1 romix
 
модератор
09.04.06
00:31
Решил посмотреть, что же происходит, когда 1С ожидает блокировку.
Создал простейшую конфу, в которой есть всего один документ.
В модуль проведения вставил Предупреждение, чтобы она останавливалась и все блокировала.

// ********************
Процедура ОбработкаПроведения()
   Предупреждение("Имитация длительного проведения.");
КонецПроцедуры

Открываю другую копию той же конфигурации, и пытаюсь создать новый документ.
(или провести старый).

1С в этом случае загружает проц на 100% и крутится в непрерывном цикле, опрашивая время.
2 insider
 
09.04.06
00:43
(0) так что делает компонента, я так и не понял?
3 romix
 
модератор
09.04.06
00:44
Софтайсом останавливаю наугад - с большой вероятностью процессор попадает в этот цикл, и я могу пройти его по шагам.

Непрерывно жму F10 - действительно крутится в одном и том же цикле.

Нахожу осмысленные функции, заходя по F8 во вложенные CALL-ы

CALL [KERNEL32!LockFile] //Вызов системной функции LockFile
TEST EAX, EAX //Проверка на 0
JNZ 1F10EAD9 //Переход не выполняется
CALL [KERNEL32!GetLastError] //Вызов системной функции GetLastError
TEST EAX, EAX //Проверка на 0
JZ 1F10EAD9 //Переход не выполняется
CMP EAX,21 //Проверка на код ошибки 21h или 33 - файл заблокирован
JNZ 1F10EAB8 //Переход не выполняется


(комментарии я добавил сейчас вручную - SoftICE их, конечно же, не показывает).
4 romix
 
модератор
09.04.06
00:45
(2) Устраняет 100% загрузку процессора, когда кто-то проводит документ, а кто-то второй пытается тоже начать его проводить.
5 romix
 
модератор
09.04.06
00:46
(+4) Точнее, когда один юзер проводит документ, а другой пытается создать новый документ или провести другой документ - тогда в терминале (да и не в терминале тоже) все, что называется, встают.
6 insider
 
09.04.06
00:46
(4) "устраняет" - вот это не совсем понятно, как она обходит платформу или что она делает (конечно можно исходник посмотреть, но может в двух словах... а то мне SoftIce, увы, ни о чем не говорит)
7 romix
 
модератор
09.04.06
00:49
(6) Короче 1С-ка непрерывно долбится в функцию KERNEL32!LockFile, и пытается заблокировать файл. Программисты забыли вставить вызов sleep(), и поэтому при многопользовательской работе в 1С включаются тормоза.
8 romix
 
модератор
09.04.06
00:50
Я перехватываю системный вызов GetLastError - возврат последнего кода ошибки. Если он равен 33 (21h), то я включаю паузу на указанное (при вызове внешней компоненты) количество миллисекунд.
9 insider
 
09.04.06
00:50
(7) ага, понял, а ты этот вызов обходишь?
10 insider
 
09.04.06
00:50
+9 все, уже прочитал
11 romix
 
модератор
09.04.06
00:52
Я взял этот код из дампа (см. выше):
CMP EAX,21 //Проверка на код ошибки 21h или 33 - файл заблокирован

Код ошибки 33 MSDN расшифровывает так:
33 The process cannot access the file because another process has locked a portion of the file. ERROR_LOCK_VIOLATION
12 romix
 
модератор
09.04.06
00:53
Инициализация компоненты в коде 1С:

Процедура ПриНачалеРаботыСистемы()
   ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"..\DLL\TerminalSleep.dll");
   Tsleep=СоздатьОбъект("Addin.TerminalSleep");
   Tsleep.УстановитьПаузуПриБлокировке(1000);
КонецПроцедуры    // ПриНачалеРаботыСистемы
13 insider
 
09.04.06
00:55
(12) т.е. проверка "проведенности" будет производиться не в вечном цикле, а с интервалом 1с, так?
14 romix
 
модератор
09.04.06
00:59
(13) Короче, если кто-то другой проводит документ, то ты не можешь провести свой документ, и не можешь создать новый документ - 1С-ка ждет в цикле, пока другой пользователь не освободит таблицу. Я вставляю паузы sleep, которые не потребляют процессорного времени. Получается, что ожидание происходит с минимальной загрузкой проца и сети.
15 insider
 
09.04.06
01:01
(14) спасибо, дошло :)
18 Olm
 
09.04.06
01:09
по ссылке (0) есть исходники и пример, но нет самой компоненты TerminalSleep.dll ?
20 romix
 
модератор
09.04.06
01:16
(18) Посмотри сейчас.
21 MMF
 
09.04.06
01:19
(20) а ты компоненту свою потестировал в разделенном режиме :-) ?
22 Olm
 
09.04.06
01:24
(20) спасибо.
23 romix
 
модератор
09.04.06
01:25
(21) Запускал 2 копии одной конфы на одном компе.
Как еще тестить, пока не придумал.
Блокировку ловит, что видно из отладочной печати.
27 romix
 
модератор
09.04.06
01:41
(26) Загруженность процессора должна упасть до 0. Ты в Диспетчере задач ее смотришь?
33 romix
 
модератор
09.04.06
01:46
(31) Точнее, время ожидания захвата таблиц = 15
61 romix
 
модератор
09.04.06
12:00
(58) А руками у тебя работает подбор, когда ты активизируешь поле, медленно жмешь F4, потом первую букву, потом вторую и т.д.? Вставь паузы sleep между имитациями нажатий, чтобы в замедленном темпе увидеть, а что происходит. Я не помню, есть ли в компоненте (51) этот метод, но в компоненте (0) или здесь http://x-romix.narod.ru/Sleep.rar он точно есть, и его можно поюзать.

(60) Вот думаю для SQL-базы то же самое намутить, там наверняка тоже "порожний" цикл без выполнения пауз, и резко падает производительность...
64 romix
 
модератор
09.04.06
12:12
(63) Ты в обработчике нажатия на кнопку (к примеру) можешь вызвать событие?
Еще вариант - событие попадает в форму справочника, т.к. там есть его обработчик.
65 romix
 
модератор
09.04.06
12:13
Т.е. там можно и вписать продолжение алгоритма, если вызвать событие с особым названием, и в кач. параметра передать нажатую клавишу.
69 Может
 
09.04.06
12:46
в "другом" - ничего нет вообще, чисто. А в обработчик события отладчик не идет
Процедура ПриНажатииКнопкиКлавиатуры(прм_КодКлавиши,прм_Alt,прм_Shift,прм_Ctrl,прм_Символ,прм_ФСО)
   //Сообщить("Код клавиши: "+прм_КодКлавиши);
   чКодКлавиши=прм_КодКлавиши;
   стрА=Форма.АктивныйЭлемент();
       Если прм_Ctrl=1 Тогда
           Возврат;
       КонецЕсли;
       
       Если стрА="Улица" Тогда
           Если (ПустоеЗначение(прм_Символ)=0) Тогда
             глСервис.ВнешнееСобытие("FormEx","ВводСимвола",прм_Символ);
           КонецЕсли;
       КонецЕсли;
                                                                             
КонецПроцедуры
вот сюда попадает и все
глСервис.ВнешнееСобытие("FormEx","ВводСимвола",прм_Символ);
78 Maniac
 
модератор
09.04.06
14:48
это только для дбф ?
79 romix
 
модератор
09.04.06
15:16
(70) Хм, к сожалению нету у меня сегодня xp sp2, завтра посмотрю. На всякий случай, у меня 25 релиз 1С. DBENG32 7.70.0.14
89 ildus
 
09.04.06
15:37
(85) а если не через файл, а через сообщения или реестр?
90 romix
 
модератор
09.04.06
15:38
(89) Надо чтобы на разных тачках его было видно. Файл-сервер же :-)
91 romix
 
модератор
09.04.06
15:40
(87) Там короче надо открыть две копии конфы, в одной из них начать проводить документ, а в другой попытаться создать новый док. Без ВК загрузка процессора под 100%, с ВК загрузка = 0 (или близка к 0).
102 Может
 
09.04.06
16:27
Отправил на адрес, который у тебя в карточке :)
103 Может
 
09.04.06
16:42
Кстати, скачал и попробовал на ХР 0) Загрузка проца с ВК - от силы 2%.
104 Может
 
09.04.06
16:44
+103) а без ВК - 52%. Проц Интел 3000, памяти 1Г. Здорово!
113 ildus
 
09.04.06
21:00
(112) ладно пользователь нажмет несколько раз повторить, а если работает обработка например обмена с клиент-банком, то она прервется с ошибкой.
114 Maniac
 
модератор
09.04.06
21:01
(113) ну да прирвется. Она спросит повторить или нет, но при этом не будет 100 процентного висяка.
115 ildus
 
09.04.06
21:02
(114) не спросит, если самому через исключение не обрабатывать
116 Maniac
 
модератор
09.04.06
21:04
(115) не так конечно лучше никто не спорит. Ладно будем ждать под СКЛ решение :)
118 Может
 
09.04.06
21:31
(117) Ром, а 102) смотрел?
119 romix
 
модератор
09.04.06
21:31
(112) В 0 тоже можно убрать. Однако хотелось бы чтобы работало по-человечески, и была возможность прервать массовую обработку, когда юзер запрашивает проведение своего документа.

(118) Нет еще, тока пришел, щас гляну..
120 Maniac
 
модератор
09.04.06
21:42
Вообще кто ж грузит компоненты не в попытке ))
121 Maniac
 
модератор
09.04.06
21:43
Под СКЛ когда можно будет тестировать ? Я готов стать тестером.
126 romix
 
модератор
09.04.06
23:53
(124) Да я специально вынес в параметр - кому как больше нравится.
Помимо загрузки процессора, есть еще такая фишка, как задалбывание сервера лишними запросами - не факт что они кешируются, и не приводят к сбою позиционирования головок HDD, когда кто-то слишком часто долбится в одно и то же место...

(125) Да, наверное можно (даже лучше) и так - иначе приколы с языком раскладки в обычном SendKeys.
134 Obed
 
10.04.06
06:33
(133) Протестил - порадовало ))

Была проблемма с одно кассой - вечно че-то там захватывала, чеки с трудом проводила, ща крсиво все стало :)
135 romix
 
модератор
10.04.06
08:30
(134) А что именно ты тестил? Для SQL или для DBF?
138 Obed
 
10.04.06
09:06
(137) Ну не знаю, я 8-ку боюсь :)
139 mishaPH
 
10.04.06
09:08
А можно ли в файл который пишется на диск при транзакции, писать имя пользователя? или любую информацию, которая поможет определить кто создал данную транзакцию
145 aka MIK
 
10.04.06
11:44
(144) Так что скажешь насчет ситуации, когда время ожидания в параметрах установлена в 0? Я всегда подозревал, что это не выход - надо процессу дать шанс подождать... 15 сек. + компоненте будет гламурнее?
150 Ёжик в тумане
 
10.04.06
12:52
(0) Эта проблема была решена давным-давно без всяких ВК.
151 mishaPH
 
10.04.06
12:53
и как?
154 VitGun
 
10.04.06
13:11
(153) Только вот на практике все совсем подругому...я бы даже сказал наоборот...эти самые, так сказать, технологии и являются причиной нехилых тормозов.....
161 mishaPH
 
10.04.06
14:17
(159) Да счаз.. Ты не работал с большим числом пользователей на терминале. все 4 сожрет если пользователей много и представь 4 сессии начнут проводить доки, и распиханы эти 4 сесии по разным процам вот тебе и 100% загрузки сервака со всеми его процами, 5й пользователь начинает проводить док, на том проце, который проводит в данный момент: как результат - у того кто проводил было 25% проца, стало 12,5% еще лдин влез, и в результате имеем полностью остановившуюся базу т.к. заблокировано все из-за проведения, и допровестись проблема, т.к. несколько сессий отжирает проц этими циклами.
164 mishaPH
 
10.04.06
14:18
(162) ну ситуации разные бывают.
172 romix
 
модератор
10.04.06
14:41
(170) Ты сам че-то зацикливаешься без пауз. :-)
185 ildus
 
10.04.06
17:38
погонял на рабочей базе при работе 20 пользователей с групповым перепроведением-работает нормально. задержка 10мс, время ожидания захвата 30с. единственное уточенние - путь к маркерному файлу надо указывать полный или относительно каталога ИБ, иначе он будет создаваться в рабочих каталогах пользователей, и обработка группового проведения их не увидит, а будет видеть только свой собственный файл, хотя даже при отсутствии проверки на файл документы у пользователей проводятся без задержки.
187 romix
 
модератор
10.04.06
18:10
(185) Ты че-то маленькую задержку ставишь имхо. Я бы поставил секунду-две. Это опрос заблокированности таблицы, который завершился неудачей (объект заблокирован). Если объект свободен, то и паузы не будет. Слишком часто долбиться в одно место на диске - как бы дыру в нем не прожечь :-)
189 romix
 
модератор
10.04.06
18:42
(188) Лишнее окно всякий раз юзеру + юзер может долго в него долбиться, когда кто-то проводит документы. Прога в (0) позволяет перехватывать юзерскую транзакцию, и приостанавливать массовое проведение (по наличию файлика).
211 Dmitish
 
12.04.06
12:24
+(208)
Подтверждаю тормоза в ТиС (dbf) при подборе номенклатуры и даже при перемещении по перечню номенклатуры внутри документов. Изменение времени Sleep результатов не приносит.
213 Drok
 
12.04.06
12:31
DBF. работа в терминале. не важно, есть проведение в данный момент или нет... т.е. на мой вгляд происходит слип опроса всех таблиц...
217 romix
 
модератор
12.04.06
13:31
(216) Ок, спасибо, вечером посмотрю.
221 romix
 
модератор
12.04.06
17:48
(219) Патч только для 7-ки, и он исправляет явную ошибку 7-ки. К 8-ке он не имеет отношения, и работать там и не должен.
231 romix
 
модератор
13.04.06
09:48
232 bse
 
13.04.06
09:50
:-) убедил. Твое лучше.
236 Учусь
 
13.04.06
12:07
(235) могу предполодожить что ошибка в
HANDLE WINAPI CreateMutex(
 LPSECURITY_ATTRIBUTES lpMutexAttributes,
 BOOL bInitialOwner,
 LPCTSTR lpName
);
я как то делал в тестовых целей для себя ВК работающей с mutex, так, надо было верно создовать.
могу вечером посмотреть как было дело. так вот, с Mulex1C возникло ощущение, что не верно инициализировался мутекс, и сессии под другими логинами его не видели.
240 romix
 
модератор
13.04.06
14:13
(239) Да, я вчера пытался сделать, не получилось, сегодня буду продолжать попытку.
244 VLAL
 
14.04.06
02:33
(228) под SQL не тестировалось, в dbf нормально
ждем твоих исправлений для dbf. Кстати и в текущем варианте тормозов не замечено в справочнике. Конфа самописная, транзакции исчезли :) за что большое спасибо.
245 Dmitish
 
14.04.06
11:11
Предложение модератору открыть новую ветку - уж больно "тяжела" страница для закачки ч/з Dial-up (настроек по разбиению на страницы не нашел)
И еще хотелось бы услышать о другом подходе к решению проблемы блокировок для SQL - именуемое как "гибкие блокировки". У кого это чудо работает и может быть даже подкинуть идеи тем кто только на этот путь становится...
246 GrayT
 
14.04.06
11:13
(245)Не пробовал нажимать в 12345>> рядом с темой?
248 Вильям
 
14.04.06
15:45
Ром! А можно узнать, как самому получить файл odbc33.txt из своей 32-й длл-ки, чтобы сравнить с той, что лежит в архиве?
250 romix
 
модератор
14.04.06
17:13
tdump.exe ИмяDLL ВыходнойФайл
251 romix
 
14.04.06
18:56
(208, Drok) Обновил компоненту для DBF, вставив проверку на источник вызова (смотрю на вершину стека, что там лежит). Проверить не на чем, т.к. у меня пролистывание справочников и журналов не тормозит. Если торможение будет продолжаться, прошу выслать справочник (перетащите его мышкой в пустую конфу).
252 romix
 
модератор
14.04.06
18:58
Компонента лежит по адресу:
http://x-romix.narod.ru/vk_TerminalSleep.rar

Я добавил текстовое описание (порядок установки) и разделил на две папки с версиями для DBF и SQL.
254 zenik
 
15.04.06
12:31
(254) Результы теста: 2-х головый XEON 2.0, 8 гиг ОЗУ, SQL DE, Win2003 EE.
До патчинга скачек при блокировке транзакции до +40% (у сервака еще своя боевая нагрузка была). После патчинга... Скачков при блокировке небыло вообще. Delay оставил по умолчанию - 1000. Тест провел 3 раза. Каждый раз получая одинаковые результры.

Огромный респект автору.
255 Матрейя
 
15.04.06
12:46
Тоже пробовал компоненту Ромикса - положительный эффект есть, отрицательные есть, но несущественны.
256 Duncan
 
15.04.06
14:13
(251) ну что, восьмерку не смотрел еще?
259 zenik
 
15.04.06
16:50
(257) Тестировал на сервере, через терминал. Большого смысла патчить клиентские 1С ИМХО нет смысла. Пользователь обычно работает только с одной 1С. А для терминальника самое то. Сегодня вечером пользователи свалят из базы, поставлю в боевом режиме.
262 romix
 
модератор
15.04.06
19:55
(259) Ну да, это для многопользовательского режима. В монопольном режиме патч никак не повлияет.
(260) Вот думаю, не сделать ли общий патч.
(261) Щас попробую заценить - я так понимаю, что надо чтобы модуль проведения писал что-то в периодические реквизиты...
263 romix
 
модератор
15.04.06
19:57
(+258) 8-ка жж0т. Интересно, в 8-ке для SQL эта проблема тоже дает о себе знать?
264 romix
 
модератор
15.04.06
20:12
(261) Проблема у меня не воспроизводится. Что именно вы делаете? Можно ли простейший случай на "почти пустой" базе?

Есть идея: перехватывать появления окна:
---------------------------
1С:Предприятие
---------------------------
При выполнении транзакции произошла ошибка!
Таблица: 1SJOURN
Ошибка обращения к данным при транзакции, выполняемой другим пользователем
Повторить попытку выполнить транзакцию?
---------------------------
Да   Нет  
---------------------------

Вместо вывода окна делать паузу, и имитировать, что пользователь нажал Да.
Тогда будет работать независимо, SQL или DBF. Для достижения полезного эффекта потребуется выставить время ожидания захвата таблиц в 0.
265 syktyk
 
15.04.06
20:41
(241)Да собссно я имел ввиду не смену приоритета у задачи, а переключение на другой процесс, т.е. при любом обращении к системе вызывающий процесс принудительно освобождает процессорный ресурс, вплоть до ближайшего прерывания RTC или таймера внутреннего шедулера. Я работал с ОС реального времени, там эта процедура выполнялась всегда.
268 romix
 
модератор
16.04.06
14:47
(261) Обновил патч для DBF - теперь он сделан не как внешняя компонента, а как патч+заменяющая DLL. И перехватывает окно (предупреждение) с ошибкой. Подробности - в readme.txt внутри архива (0).
285 Maniac
 
модератор
16.04.06
20:19
Восьмерка у тебя явно неактуальный движок.
286 romix
 
модератор
16.04.06
21:20
Я кажется понял, из-за чего у тебя тормоза. Возможно, ты не поставил патч SQL на 1С-ку, которая делает массовое проведение доков.

Кстати, административная установка - это всего лишь, когда папка BIN лежит на сетевом диске (и открыта юзерам только на чтение). А у юзеров на рабочем столе - только ярлыки в эту папку.  

А зашли мне плиз DBEng8.dll от новой версии 1С-ки... Я заценю что там новое.
287 Maniac
 
модератор
16.04.06
23:02
У меня три терминал сервера на которых локально установлена 1С. Административных установок у меня вообще нигде нет и я ими не пользуюсь. На одном из терминалов, самом мощном, стоит и лежит база SQL.
Файл от восьмерки вышлю завтра.
288 romix
 
модератор
16.04.06
23:38
Давай. Для DBF-ной базы 7.7 сейчас все проблемы я думаю решатся (т.к. я в новой версии перехватываю всего лишь окно сообщения, не вмешиваясь глубоко в движок 1С), а для SQL-ной - надо еще смотреть. Лог могу приделать, какие SQL-запросы приводят  к блокировке. Может у тебя там периодические реквизиты воду мутят...
307 Вильям
 
18.04.06
10:08
Апаю. Внедрили в рабочей базе. Без траблов. СУПЕР!
310 romix
 
модератор
19.04.06
14:15
(309) Ну здорово... Т.е. у вас убрались частые блокировки при транзакциях?
311 Вильям
 
19.04.06
14:18
(310) Ну да, операторы теперь не тормозят, когда проводят документов кучу...
312 romix
 
модератор
19.04.06
15:22
(311) Т.е. обработка массового проведения теперь не тормозит работу пользователей?
Или у вас так много пользователей, что они друг дружку все время тормозили?
313 Вильям
 
19.04.06
15:28
(312) Пользователей - порядка 30, активных - человек 10. Операторы, когда набивали заказы, расходы - загружали весь процессор, сидели в ожидании и "нервно курили (с)". Теперь - тормозов нет. Еще раз спасибо.
314 romix
 
модератор
19.04.06
17:13
(313) Да не за что.. Я просто не понимаю откуда такой сильный эффект. У вас терминал + SQL? И они курили, когда кто-то массово перепроводил документы обработкой, или даже без перепроведения обработкой - тоже курили?
319 romix
 
модератор
20.04.06
13:58
(318) Да я думаю партнеры напишут, если окажется, что сеть 1С после этого работает намного лучше.
320 syktyk
 
20.04.06
18:06
(315)В старых операционках (RSX-11 и др.)файл хранился в нескольких версия. И всегда использовалась самая последняя. Так, что идея хорошая! :)
321 Восхищен
 
20.04.06
18:16
Роман, если сделаешь и (315) - цены твоему творению не будет!
328 Нафиг
 
20.04.06
19:01
другую ветку, пусть все в одной будет.
329 romix
 
модератор
21.04.06
02:53
Тему (315) с DLL для скачивания я выложил здесь:
Горячая замена конфигурации 7.7: md_chng.dll
332 romix
 
модератор
21.04.06
13:00
(331) Сорри забыл уточнить. Внешняя компонента, которая умеет делать Sleep:

http://x-romix.narod.ru/Sleep.rar

Есть и другие способы.
334 LOD
 
21.04.06
13:33
Спасибо, скачал, на досуге попробую
335 Кот Бегемот
 
21.04.06
13:45
Ну чё, компонента таки не работает, или у Маньяка кривые ручонки??
338 Кот Бегемот
 
21.04.06
21:37
Про скуль, семёрку.... ХЗ что происходит, но блокировки временами появляются. Хотя народу человек 60 всего....
339 romix
 
модератор
21.04.06
22:30
(338) Проверить можно так: сделать тестовый документ с предупреждением в модуле проведения. Начать проводить его. С другого компа начать проводить другой док. Если при этом на другом компе загрузка процессора = 100%, то патч не работает. Если 0% - то работает. Для 8-ки кстати - тот же тест. Другие ситуации (например, со справочниками) я не разруливал - если кто-то мне даст легко воспроизводимый тест (ситуацию, когда возникает пожирание ресурсов при блокировке), сделаю и для этого случая.
340 syktyk
 
22.04.06
01:03
А что тогда Sleep_1C.dll?
342 romix
 
модератор
22.04.06
01:55
+341 Причем, некоторые пользователи утверждают, что в загруженной сети наблюдается достаточно резкое улучшение.
346 romix
 
модератор
24.04.06
11:47
(343) :-)
347 romix
 
модератор
24.04.06
11:50
(345) Че-то я в упор у себя не вижу такой библиотеки...
Для DBF: Sleep_1C.dll
Для SQL: odbc33.dll
Для 8-ки: Sleep_v8.dll
348 romix
 
модератор
24.04.06
11:52
Поправил патчер для 8-ки: теперь он патчит подстроку по любому смещению (подходит для любого известного мне релиза 1С v8).
349 romix
 
модератор
24.04.06
13:52
(345) Есть подозрение, что на сервере лежит более одной копии папки BIN.
Когда кто-то заходит во вторую копию, в системе сбивается ссылка в реестре.

Возможно, проблема исчезнет, если положить искомую DLL в папку SYSTEM32.
352 Dirk Diggler
 
25.04.06
19:24
Я имею в виду ошибки транзакций. А то есть 3-комповая рабочая группа, так мне не удалось застать проблему, но по словам девочек-менеджеров, там что-то пишется про транзакции и 1С вылетает. Релиз 25.
356 lexvs
 
26.04.06
02:37
Не могу зарегистрировать dll-ку. И вопрос Sleep_1C.dll - это и есть TerminalSleep.dll ?
не получается применить , подскажите пожалуйста
357 lexvs
 
26.04.06
02:46
Пробовал на win2003server   пи регистрации dll пишет "dll была загружена но найти точку входа для DllRegisterServer не удалось". 1С при запуске пишет "Ошибка при создании объекта из компоненты E:\1Cbase\ts93_25\DLL\TerminalSleep.dll (отсутствует CLSID)"
358 viddik
 
26.04.06
07:29
аналогично на XP SP2
359 DGorgoN
 
26.04.06
08:08
(355) Слушай, может тебе Нуралиеву все-таки стоит позвонить ? :)
360 DGorgoN
 
26.04.06
08:17
(355) А вообще автору респект и уважуха - у себя протестил, действительно лучше стало :)
361 Лямур
 
26.04.06
08:29
(359)А не забила ли фирма "1С" на такие вещи?
362 kazam
 
26.04.06
08:31
Сумашедшая ветка!
363 DGorgoN
 
26.04.06
08:42
(361) Походу уже давно :), эта проблема и в ранних релзах была :)
366 romix
 
модератор
26.04.06
11:03
(356) Это простая DBF-ка, ее не надо регистрировать.
Читай readme.txt, там надо пропатчить patch_dbeng.exe и просто положить эту DLL в папку BIN
371 romix
 
модератор
26.04.06
12:29
(369) Нашел - оно только один раз выводится. Я принудительно выставляю время захвата таблиц в 0 в настройках 1с 1Cv7.CFG.
377 Хгость
 
26.04.06
15:59
Ну так это ж вроде было еще в версии от 17.04.2006  01:44           141 824 odbc33.dll. И почему у той, что сейчас в архиве, время 23:34?
378 Dirk Diggler
 
26.04.06
16:07
Кстати, у меня, когда я еще до патча на тестовой базе(которая в архиве с патчем) попробовал провести документы с 2х компов одновременно, второй сразу сказал типа не удается произвести  транзакцию, продолжить да-нет? А после установки патча ждет указанное в ini кол-во секунд.... Что-то немного разошлось с описанным здесь...
383 romix
 
модератор
26.04.06
17:07
(382) Спасибо, сейчас зазырю
385 romix
 
модератор
26.04.06
17:23
Еще одна поправка:

[Options]
Delay=1024

(было 1000).
386 Хгость
 
27.04.06
08:38
ОК
387 Naliva
 
28.04.06
12:04
Во первых большое человеческое спасибо автору!!!
И два вопросика:
1. Для 8-ки работает и для файлового и клиент-серверного вариант, или?
2. Может кто знает не решена ли эта проблема в 13 и 14 релизах. В описании изменений платформы про это не слова, но есть фраза типа "... исправлены ошибки предыдущих релизов", за которыми может скрываться все что угодно
388 SkyMind
 
28.04.06
13:08
Установил всё как надо. При расчете записей журнала расчетов вылетает ошибка:

жр.Рассчитать();
{Документ.СуммыКРасчету.Форма.Модуль(868)}: SQL State: 40001 Native: 1205 Message: [Microsoft][ODBC SQL Server Driver][SQL Server]Transaction (Process ID 54) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

1С Зарплата и Кадры 25 версии, сервер двухпроцессорный. Почитал в инете, вроде говорят в 1С на двухпроцессорном сервере такие ошибки бывают. Но у меня без компоненты их не возникало никогда. Сейчас убрал её(компоненту) - всё работает. Но медлено, когда народу много :-( Может можно бороца как-нибудь с этим??
389 romix
 
модератор
29.04.06
17:41
(387) Мне сообщают, что для клиент-серверного варианта (где трехзвенка и SQL) проблема со 100% загрузкой при ожидании блокировки не существует ни на клиенте, ни на сервере.
393 Клопп
 
29.04.06
19:21
(392) а зачем? есть же статья в КЗ
Книга знаний: Ускорение 1С:Предприятие 7.7;
394 PR
 
29.04.06
19:27
Мда? Ну может быть
398 romix
 
модератор
30.04.06
01:19
(396) Проделайте тест (390). Мне сообщают, что проблема не существует в клиент-серверном варианте.
400 PR
 
30.04.06
01:45
400
402 romix
 
модератор
30.04.06
23:48
(401) Я даже не смотрел 8-ку SQL, т.к. нету у меня ее.
И мне сообщают, что с ожиданием блокировки там и без моего патча все хорошо работает. :-)
403 romix
 
модератор
30.04.06
23:50
Странно, что 7.7 DBF, 7.7 SQL и 8.0 1CD содержат одну и ту же ошибку, которая сильно мешает терминальным пользователям (и не только) работать в многопользовательской среде.
405 SkyMind
 
02.05.06
06:55
(391) По поводу "Transaction (Process ID 54) was deadlocked..." я у себя могу проверить. Мой емаил [email protected]
406 Mosson
 
02.05.06
10:24
2 romix. слушай столько постов и исправлений... может лучше версию dll ставить? а то разбираться напряжно :(
407 romix
 
модератор
02.05.06
10:29
(405) Я вот думаю... А это сообщение же предполагает, что надо ПОВТОРИТЬ транзакцию еще раз? Если я это сделаю - не уберет ли это еще один "баг" 1С-ки?
Глядишь, и на двухпроцессорных системах в SQL она начнет нормально работать...
409 viddik
 
02.05.06
11:30
to romix
Обнаружен глюк, проявившийся после применения патча для dbf 7.7 версии. Глюк состоит в том, что пользователь, нажимая enter в подборе, получает РЕДАКТИРОВАНИЕ справочника номенклатуры в СПИСКЕ, при том что

1. нормальным поведением по enter является добавление строки с номенклатурой в ТЗ (как в стандартной ТиС)
2. у пользователя напрочь отсутствуют права на редактирование справочника номенклатуры
3. редактирование справочника стоит В ДИАЛОГЕ

Других глюков пока не замечено и в принцепе весчь работает, однако юзеры, не глядя на экран, уже "отредактировали" несколько наименований и весчь пришлось отключить :(((
413 romix
 
модератор
02.05.06
12:27
(411) Вообще-то версия для DBF перехватывает окно MessageBox с текстом
"Ошибка обращения к данным при транзакции, выполняемой другим пользователем"
и принудительно нажимает там ОК.
Так что справочник тут как бы вообще получается ни при чем.
У вас точно правильная DLL вызывается у всех пользователей?
414 SkyMind
 
03.05.06
09:33
(407) Вроде как это глюк не 1С. Попробую SQL Server 2000 Service Pack 3a найти поставить. Может поможет. Непонятно только почему с твоей компонентой этот глюк вылазит, а без неё нет.
415 SkyMind
 
03.05.06
09:36
+414 Если интересно, вот что нашел по этой теме: http://support.lime-systems.com/sqldba/Deadlocks/ и http://www.1csql.ru/materials/faq/admin.html#96
417 romix
 
модератор
03.05.06
10:17
(414) Я сделал обновление под твою ошибку, теперь она вылезать не должна. Сейчас зашлю (надо проверить, работает ли).
423 bse
 
03.05.06
10:39
+(422) все пропатчил как написано...
424 romix
 
модератор
03.05.06
10:46
(423) Есть еще другой вариант патча - при помощи внешней компоненты. Он находится там же в архиве old.rar. Если хочешь, стукнись в аську.
426 bse
 
03.05.06
10:49
(424) ок. Попробую ВК. А там видно будет...
Спасибо.
427 romix
 
модератор
03.05.06
10:51
(426) Если что стучись в аську, мне не на чем файл-сервер DBF проверять.
Если все работает, сообщи, я тот вариант тогда уберу.
428 bse
 
03.05.06
10:53
ок
429 romix
 
модератор
03.05.06
10:54
(426) Есть способ программно выставить время ожидания.
http://1c.realnet.ru/forum/f.php?ak=27786#78
430 romix
 
модератор
03.05.06
10:56
(425) Не надо переводить на файл-сервер!
Скажи пожалуйста, наблюдается ли на клиент-сервере проблема со 100% загрузкой процессора при проведении тестового документа?
431 romix
 
модератор
03.05.06
10:56
(+430) Речь о 8-ке
433 romix
 
модератор
03.05.06
11:13
(432) Тогда патч не нужен. Он решает именно проблему 100% загрузки проца в этой ситуации.
436 Naliva
 
03.05.06
11:26
(435) да сейчас (после плотной работы с профайлером) вроде не шибко медленно. Настройка своя с нуля. Оперативный + бух. учет. Грешим на бух. учет. Т.к. основной процент времени на запросы по нему. А время среднее такое: документ 15-50 строк -> 3 - 5 сек., 1000 строк -> 30 сек. Когда работает до 20 - 25 пользователей все ок. А при 30 - 40 пользователях блокировки сыпятся, и проводятся существенно медленее. 95 % документов по 15 -50 строк, когда работают только с ними даже 30 пользователей, жить можно :) Но как только кто-то зацепил большой док., тут и траблы :(
437 romix
 
модератор
03.05.06
11:47
(436) А попробуйте пожалуйста следующее: создайте тестовый док, который проводит товар, например, в регистр Остатки, а также делает проводки по бухии. И останавливается на Предупреждении. Есть подозрение, что тут и вылезет косяк со 100% загрузкой, на клиенте или на сервере.
439 romix
 
модератор
03.05.06
12:04
(438) Ну да, в конец наверное...
441 Naliva
 
03.05.06
13:20
(437) Ни, и в этих условиях работает нормально, т.е. загрузка проца не прыгает не на клиенте, не на сервере. (2 сеанса, в одном завис проводясь док с предупреждением, во втором того же типа документ проводим. Блокировка наступает, но загрузка процессоров примерно на том же уровне, что и до проведения).
442 SkyMind
 
03.05.06
14:21
(417)Поставил odbc33.dll от 03.05.2006. Вроде народ работает, никаких ошибок теперь не вылетает :-) Спасибо.
443 romix
 
модератор
03.05.06
14:54
(441) Понятно, спасибо, похоже 8-ка клиент-сервер уже изначально ускорена как надо. :-)
(442) Здорово :-) Теперь можно спокойно 2 проц врубать, и этой ошибки не будет.
444 Плюралист
 
03.05.06
20:58
SQL, W2K3SP1, odbc33.dll от 03.05.06, тестовая конфиурация. Запущено 2 экземляра, в одном иммитируется проведение документа. При попытке во втором экземпляре создать новый/провести существующий документ, этот экземпляр через некоторое время вываливается (время колеблется от нескольких секунд при заданном времени ожидания захвата таблиц = 0 до 16 минут при значении 999).
445 romix
 
модератор
03.05.06
22:29
(444) Проверил (Windows 2000, SP4). Если речь идет об ошибке:

---------------------------
1С:Предприятие
---------------------------
При выполнении транзакции произошла ошибка!
SQL State: HYT00
Native: 0
Message: [Microsoft][ODBC SQL Server Driver]Timeout expired

Повторить попытку выполнить транзакцию?
---------------------------
Да   Нет  
---------------------------

То она у меня тоже "вываливается". Так и должно быть (т.е. внешних отличий от того что было нет - просто проц перестает загружаться за счет вставленных пауз).

Если речь идет о чем-то другом, то стукнитесь пожалуйста в аську или в почту (я попробую заточить под вашу систему тоже).
446 Плюралист
 
04.05.06
08:55
Нет, она по-настоящему сворачивается в коврик без каких либо сообщений
или предупреждений, была 1С - и нету. Вышеуказанное сообщение
появляется без использования патча.
447 romix
 
модератор
04.05.06
10:09
(446) Подтверждаю это падение в новой версии компоненты на XP SP2.
Щас попробую решить.
448 romix
 
модератор
04.05.06
10:50
Действительно был косяк (ошибка). Причем, глупая (недоставало stdcall в объявлении функции). Проявлялось в падении 1С без каких-либо сообщений при любой ошибке. Исправил.
Новая версия odbc33.dll от 04.05.06, 10:40, 142336 байт.
449 Морозов Александр
 
04.05.06
10:56
я чета не понял... а что теперь реклама и в постах?
450 kazam
 
04.05.06
10:56
Предлагаю вообще забить на транзакции - и проблема отпадёт!
451 romix
 
модератор
04.05.06
10:59
(449) Где реклама в постах?
(450) Пользователям удобнее когда у них 1С не зависает на пол-часа, а позволяет и проводить документы (причем, сразу в неск. потоков), и работать пользователям.
452 Морозов Александр
 
04.05.06
11:01
(451) "веб симинар 6 Июня 2006" картинка весит на 0 посте
453 Вильям
 
04.05.06
11:01
(448) Ром, мы работаем на патче для Скула 7.7 на Вин03 уже недели наверное полторы. Проблем нет. Ошибка с stdcall - это было только в "предпоследней" ДЛЛ?
454 kazam
 
04.05.06
11:01
(451) я шутю. Ветка длиннющая! Твоя компонента разве не решила сабж?
455 romix
 
модератор
04.05.06
11:07
(453) Да. Она пыталась решить ошибку при deadlock - если у вас эта проблема возникает, то ставьте новую, если нет, то не надо.
456 romix
 
модератор
04.05.06
11:10
(454) Решила - я просто добавляю еще одно исправление (насчет deadlock).
457 kazam
 
04.05.06
11:12
(456 ) успехов
458 AlexSSSS
 
05.05.06
08:46
(0) а 8-рочный вариант работает исключительна под 12 версией платформы?
459 izotope
 
05.05.06
10:10
Здравствуйте.
XEON 2.4/2Gb/SCSI RAID
1С 7.7 DBF|Терминал W3k|1.3Gb|25 пользователей
Периодически возникает сообщенеи с заголовком romix, file acces denied, жмем раз 6, и продолжаем работу, версия библиотеки последняя, вссе делал по инструкции, спасибо. Кстати
460 izotope
 
05.05.06
11:07
Достаточно неприятный момент, пользователи 1С, стали висеть на печати, после выбивания пользователя, в терминале 1Ска перестала запускаться вообще... :(
461 romix
 
модератор
05.05.06
13:12
Я сейчас обновлю ВК для 7.7 DBF по образцу 8.0 и SQL, должно получиться более аккуратно.

Алгоритм будет следующий: при неудачной попытке заблокировать файл (LockFile) будет делаться пауза (sleep) 1 мс. При следующей неудачной попытке LockFile - 2 мс, затем 4,8,16,32,..,1024 мс.
462 Unforgiven
 
05.05.06
13:13
да пересоздай ты ветку уже
463 romix
 
модератор
05.05.06
13:18
(+461) vk_sleep_1c.dll 04.05.2006 17:25
Подключается по технологии ВК, пример приведен в тестовой конфигурации в архиве.
Лучше будет выставить Сервис - Параметры - Время ожидания захвата таблиц значение, отличное от 0. Например, 15 секунд. Это можно сделать программно
464 romix
 
модератор
05.05.06
13:19
(462) Да я хочу рекорд по длине ветки поставить. :-) Страницу можно смотреть по частям, нажимая на цифры
Все сообщения  1  2  3  4  5  6  7  8  9  10
465 romix
 
модератор
05.05.06
13:21
(+463) Старый патч тока надо будет снести (восстановлением из бэкапа папки BIN).
466 Вильям
 
05.05.06
13:43
(464) Если каждый, кто твое решение применил, пару раз ветку подымет - то и быть ей самой длинной!
469 romix
 
модератор
05.05.06
16:42
(468) Для SQL патч (так проще, т.к. там динамически подгружается ODBC32.dll).
А для базы DBF я сейчас сделал ВК (были варианты, решил на ВК остановиться).
Хотя при пожелании - могу сделать как вариант и патчем тоже.
470 romix
 
модератор
05.05.06
16:46
Обновил ВК для SQL - теперь при ожидании блокировки внизу окна высвечивается надпись (т.е. нет внешних отличий от того, как работало без патча, просто убирается загрузка процессора).
471 romix
 
модератор
05.05.06
16:48
Версия: odbc33.dll 05.05.2006 13:36 142336 байт.
472 MikeStav
 
05.05.06
16:48
(469) Что имеется ввиду для SQL - имеется ввиду sql движок платформы?
и про 8-ку поподробнее плиз, что там имеется ввиду под SQL
473 jbond
 
05.05.06
16:49
Для ДБФ качать по ссылке?
474 romix
 
модератор
05.05.06
16:50
(473) Да, по ссылке в (0).
475 romix
 
модератор
05.05.06
16:51
(472) У меня несколько вариантов патчей: для 7.7DBF, для 7.7 SQL и для 8.0 файл-сервер.

Я кстати объединил патчи для 7.7 DBF и 8.0 файл-сервер в одну ВК, т.к. они оказались очень похожи (различаются 1 строкой кода).
476 MikeStav
 
05.05.06
17:23
(475) я совершенно запутался - все таки патчи или ВК
я так понимаю что патчем патчим файлы и все  - больше делать ничего не нужно?
а ВК нужно прикручивать к конфигурации - я прав?
и еще вопрос какие файлы патчатся?
480 Хгость
 
06.05.06
12:48
Мдя... ап-петит приходит во время еды :)))
Можно ли извне управлять списком таблиц для который будет срабатывать Sleep в odbc33? Как минимум таблица констант еще необходима.
484 romix
 
модератор
06.05.06
13:39
(479) Обновил.
odbc33.dll 142336 байт 06.05.2006, 13:34
vk_sleep_1C.dll 95774 байт, 04.05.2006, 17:25
485 romix
 
модератор
06.05.06
13:40
(480) Убрал в версии для SQL 7.7 зависимость от таблицы: теперь одинаково работает со всеми таблицами (а чтобы не было лишних задержек, использует нарастающий sleep).
486 smaharbA
 
06.05.06
13:42
(485) А если я реализую это в 1С, коньяк дашь ?
487 romix
 
модератор
06.05.06
22:22
(486) Да, можно и в 1С это сделать, но потребуется в конфе везде вставить сигнальные файлы (или константы) и их отслеживание. Т.е. перекроить конфу. И это кстати не очень надежно (если клиент выставит признак и подвиснет, то подвиснут все). Опять же, нет хорошего способа сделать sleep, хотя можно наверное попытаться...
488 lesd
 
07.05.06
15:37
Установил патч на SQL 7.7, версия от 6 мая 2006 г., 13:34:18. БОЛЬШОЙ РЕШПЕКТ автору - загрузка процессора сразу упала... Но, к сожалению, осталась старая проблема дедлоков, причем, явно не зависящая от конфигурации и периодически "убивающая" базу. Если дедлок происходит у пользователя, который пытается сдвинуть ТА (проведение нового документа) в тот момент, когда в базе идет автообмен (в разделенном режиме :)), то:
1.Документ сообщает, что не проведен и пишет ошибку-дедлок;
2.В SQL базе снимаются блокировки с таблиц, которые были установлены для проведения (1SJornal, 1SSystems и т.д.);
3.Самое печальное: У пользователя остается блокировка на файле "1SSYSTEMS.$lk" в каталоге базы... Соответственно, двигать ТА теперь может только он, со всеми вытекающими... :( База стоит, пока пользователя из неё не выкинешь :(.
Как програмно разблокировать файл после этой ошибки? Или это тоже косяк платформы? И как его исправить? Please Help...
489 romix
 
модератор
08.05.06
01:06
(488) Вообще-то не должно быть в новой версии никаких дедлоков.
Если ошибка 40001
//SQL State: 40001 Native: 1205 Message: [Microsoft][ODBC SQL Server Driver][SQL Server]
         //Transaction (Process ID 54) was deadlocked on lock resources with another process and has been chosen as the deadlock victim.
         //Rerun the transaction.

Если у вас пишет эту ошибку, то предлагаю со мной связаться по аське и решить эту проблему (ее быть не должно).
490 romix
 
модератор
08.05.06
15:04
(488) Есть подозрение, что автообмен УРБД у вас делался непропатченным клиентом (папка BIN там тоже должна быть пропатчена).
491 lesd
 
08.05.06
21:09
Да, имеет место именно такая ошибка (40001). К сожалению, я не появлюсь на работе до 10 мая - праздники... Как только появится возможность, проверю предположение (490), о результатах отпишусь... Удачных выходных!
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший