gifts2017

Загрузка процессора 100% в 7.7 под Windows Server 2008 при блокировке журнала транзакций.

Опубликовал Максим Шуйский (maxpiter) в раздел Программирование - Внешние компоненты

1C 7.7 "Секретный релиз" + Windows Server 2008r2 и 1С запускается и работает, но ввиду того, что обновили BkEnd, потеряли полезнейший функционал, такой как предотвращение "загрузки процессора на 100%" при ожидании блокировки журнала.

Помыкавшись по сети и ввиду очень ограниченного времени на ожидание ответа от Romix'a (честь ему и хвала), воспользовались его исходниками для vk_hook1C и vk_TerminalSleep, и собрали новую vk_hook1C.dll, которая работает под 2008 сервер, не патчит BkEnd, не ругается на версии ODBC (не нужен ODBC33.DLL) и самое главное, при блокировке не грузит процессор :)

В общем принимайте наше с Old_Joe творчество.

В vk_hook добавлены 2 метода, позволяющие управлять блокировками и дедлоком

//глобальная переменная
	Перем vk_hook Экспорт;

//при начале работы системы	
	ЗагрузитьВнешнююКомпоненту(каталогИБ()+"vk_Hook1C.dll"); 
	vk_hook=СоздатьОбъект("Addin.vk_Hook1C");
	vk_hook.ПерехватSQLPrepare(); 
	vk_hook.ПерехватSQLExecDirect(); 
	vk_hook.МаксимальныйSleep=1024; 
	vk_hook.ОтключитьТаймаут = 1; //по умолчанию = 0
	vk_hook.ОтключитьДедлок = 0; //по умолчанию = 0

использован материал из статьи: http://www.kb.mista.ru/article.php?id=361

"Секретный релиз" 1С: http://infostart.ru/public/82018/

UPD: 2.0.0.31

добавлен метод vk_hook.ВключитьПодмену = 1; // по умолчанию = 0

перед непосредственно запросом необходимо vk_hook.ВключитьПодмену = 1;
Можно конечно один раз включить и не выключать, но тут есть определенный риск. Так что все в ваших руках :)
Принципиально изменена подмена запроса.
В данной версии можно менять как весь запрос так и по части вхождения строки.
К примеру:

vk_hook.ТекстSQL = "SP3111=?"; 
vk_hook.НовыйSQL = "SP3111 in ('     4    ','     7    ') and ''<>?";
vk_hook.УстановитьЗаменуSQL(); 

Позволит везде использовать вместо равенства список значений.
В 

Остальной функционал описаный в статье не изменен.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
vk_hook1C.dll (вер. 2.0.0.31)
.dll 140,50Kb
23.09.16
333
.dll 140,50Kb 333 Скачать
пример базы
.zip 32,27Kb
23.09.16
64
.zip 32,27Kb 64 Скачать

См. также

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

Комментарии

1. Александр Зубцов (iov) 04.04.11 09:47
(0) А по "секретному" релизу если не трудно подкормите информацией... (а то честно говоря как то 7.7 уже не так оперативно отслеживаю.)
2. Максим Шуйский (maxpiter) 04.04.11 09:51
iov пишет:

(0) А по "секретному" релизу если не трудно подкормите информацией... (а то честно говоря как то 7.7 уже не так оперативно отслеживаю.)


http://infostart.ru/public/82018/
3. Александр Забалуев (zabaluev) 23.05.11 00:25
Что то не работает оптимизатор на 2003 сервере. До этого использовал vk_TerminalSleep.7z, эффект был. Решил попробовать вашу систему, пользователи закричали, что постоянно транзакции. :(
4. Максим Шуйский (maxpiter) 23.05.11 10:01
(3) теоретически должно работать, но делалось по Windows Server 2008 + http://infostart.ru/public/82018/

ОтключитьТаймаут = 1 - сделали?
5. Александр Забалуев (zabaluev) 23.05.11 10:17
Вот такой код вставил:

//////////////////////////////////////////


Перем vk_hook Экспорт;


//////////////////////////////////////////
Процедура ПриНачале.....

ЗагрузитьВнешнююКомпоненту("vk_Hook1C.dll");
vk_hook=СоздатьОбъект("Addin.vk_Hook1C");
vk_hook.ПерехватSQLExecDirect();
vk_hook.МаксимальныйSleep=1024;
vk_hook.ОтключитьТаймаут = 1; //по умолчанию = 0
vk_hook.ОтключитьДедлок = 0; //по умолчанию = 0
6. Максим Шуйский (maxpiter) 23.05.11 11:07
(5)
возможно BkEnd.dll не оригинальная. Попробуйте взять оригинальную из поставки 1С переименовать ее в BkEnd0.dll, а BkEnd.dll взять из "Секретного релиза", хотя для 2003 достаточно оригинальной BkEnd
Возможно используете ODBC32.dll в связке с ODBC33.dll. Нужна ODBC32.dll оригинальная.
Установите на виртуалке или отдельной машине оригинальную 1С, добавьте туда vk_hook1C.dll и сымитируйте блокировку транзакции.
7. Максим Шуйский (maxpiter) 23.05.11 11:26
(5) прикрепил пример базы.
8. zaki zaki (zakiap2) 13.11.11 18:54
maxpiter, Пожалуйста выложи на альтернативный хостинг выложите, хочу посмотреть твой вариант ...
imiha; nvhelsing; Maximysis; +3 1 Ответить
9. zaki zaki (zakiap2) 16.11.11 16:10
Народ хотел спросить кто использует ODBC33.DLL нет ли проблемы с 1с когда много блокировок идет начинается 1с у пользователей закрываться с ошибкой?
10. Максим Шуйский (maxpiter) 16.11.11 16:53
(9) много это сколько? при 50 не закрывается.
11. zaki zaki (zakiap2) 16.11.11 16:57
maxpiter пишет:

(9) много это сколько? при 50 не закрывается.

Ну это когда одновремено 3-5 пользователей начинаю проводит доки и тут еще масовая загрузка доков в течении сек 30, так у некоторых почему то 1с тупо закрывается и все, вот немогу понять из за чего скачал эту dll попробую место odnc33.dll
12. Максим Шуйский (maxpiter) 16.11.11 17:04
(11) не должно, у меня пользователь висит в ожидании до посинения.
13. zaki zaki (zakiap2) 16.11.11 18:25
maxpiter пишет:

(11) не должно, у меня пользователь висит в ожидании до посинения.


Проверил вроде работает, можно одно пожелание?
Добавить "UseBalloon=1 ; Показывать balloon tooltips (всплывающие сообщения) в трее" как в odbc33 ?
14. Максим Шуйский (maxpiter) 17.11.11 09:45
(13) добавлений чего либо в эту dll не планируется вообще.
15. zaki zaki (zakiap2) 17.11.11 09:46
maxpiter пишет:

(13) добавлений чего либо в эту dll не планируется вообще.

Жаль, а тогда можно получить исходники? я сам доработают ...
16. Максим Шуйский (maxpiter) 17.11.11 10:11
(15) прикрепил исходники. Как "отмодерируют", появится.
17. zaki zaki (zakiap2) 17.11.11 10:14
maxpiter пишет:

(15) прикрепил исходники. Как "отмодерируют", появится.

Большое спасибо!
18. mxm2 mxm2 (mxm2) 28.11.11 07:39
При работе связки SQL Server 2008 R2 x64 + 1Cpp + Solution6 + vk_hook1C = Выпадает при потытке просмотра движений из журнала документов

При начале работы системы сначала грузится 1Cpp, затем vk_hook1C.

Добавка: Разобрался работает если установить в SQL Совместимость c SQL2000(80). пока работает.
19. Максим Шуйский (maxpiter) 28.11.11 09:47
(18) 7ка только при такой настройке SQL и работает корректно.
20. Алексей (cupuyc75) 09.12.11 15:13
Попробовал сегодня эту ДЛЛ. Сыпет ошибками каждую секунду, но... нашел в инете решение.
Так что данный код...

Перем vk_hook Экспорт;

...обязателен. Пример юзать от zabaluev один-в-один.
21. Максим Шуйский (maxpiter) 09.12.11 19:20
(20) а описание посмотреть не судьба? там синим по белому написано :)
http://infostart.ru/public/83504/
22. Константин Белов (Ferenz) 12.12.11 11:26
(20)А что за ошибки? И какое нашел решение?
23. Константин Белов (Ferenz) 12.12.11 11:31
(6)Скажите пожалуйста, а патченой BkEnd.dll определенно работать не будет?
24. Максим Шуйский (maxpiter) 12.12.11 11:37
25. astars (astars) 20.12.11 23:30
Скажите пожалуйста, есть сервер Windows 2008 SP2, SQL 2000, 1С 7.7 (27 релиз), пользователи работают терминально через RemoteApp. Cлучается произвольно, что несколько (от 1 до 4 из 30 однотипных пользователей) подключений, начинают интенсивно использовать процессор, одна сессия забирает 13% проц. времени (всего 8 процессоров) т.е. 1 процессор, при этом у пользователя никаких форм журналов, обработок или списков не открыто. Пользователь при этом никаких изменений не замечает работоспособность не нарушается. Помогает только сброс сессии. Воспроизвести данную ситуацию не удается.
Замеры производительности в отладчике ничего не показали, нагрузку даёт процесс 1cv7s.exe, монитор ресурсов Windiws тоже ничего экстремального не показывает. Использование vk_hook1C результатов не дало.
Есть предположение что данное событие происходит во время краткосрочной потери связи с сервером.
Используются внешние компоненты 1С++, FormEx, DialMail. Используется Перехватчик и ТабличноеПоле, много прямых запросов через ODBCRecordSet.
26. Максим Шуйский (maxpiter) 21.12.11 17:40
(25) у меня иногда начинает 1С очень сильно тупить у некоторых пользователей. Просто снимаю сессию RDP и пользователь заходит снова, тормоза исчезают. Это не связано с vk_hook.
Благо такое случается раз-два в неделю и в целом не мешает процессу.
27. astars (astars) 21.12.11 21:14
(26) maxpiter, у меня ежедневно появляется 2 - 4 таких подключения, а постоянно мониторить подключения нет возможности, благо пока мощности позволяют, но это неправильно. Установить бы причину.
28. Максим Шуйский (maxpiter) 21.12.11 22:03
(27) так не связано ли это с RDP? или какими-то настройками сервера, сети, конкретной машины пользователя.
если бы SQL то у всех бы тупило
если бы 1С то скорее на похожих ситуациях вешалось бы и опять таки у всех
у меня в основном 3-4 человек с такими зависаниями есть.
Если есть подозрения на "... данное событие происходит во время краткосрочной потери связи ...", то может попробовать для начала в маршрутизаторе провода в гнездах попереставлять, или вообще особо зависающих пересадить на отдельный хаб...
ну это так, мысли вслух
29. Харьков Харьков (xaker1C) 22.12.11 04:56
Не было такой проблемы 50 ком в сети все работают с 1с 7.7 и 8.2 смотри настройки сервера 2008
30. CCC CCC (profych1) 22.12.11 15:32
Тема очень актуальна для тех, кто еще на 7.7
31. astars (astars) 27.12.11 00:19
Всем спасибо за участие, проблема решена. Через Process Explorer выяснил что у этих процессов была подгружена ScanOpos.dll, вот она и давала такую нагрузку.
32. Светялчок (Масянечка) 10.01.12 22:12
Спасибо огромное! Пробую на связке Windows Server 2008 + Sql Server 2000 SP4 + секретный релиз.
33. Дмитрий (MegaDimich) 20.01.12 16:29
Подскажите, пожалуйста, будет ли работать это решение на связке Windows Server 2003 + SQL Server 2005 + секретный релиз ?
34. Дмитрий (MegaDimich) 20.01.12 16:32
При использовании секретного релиза обязательно ли установить в SQL Совместимость c SQL2000(80)?
35. Максим Шуйский (maxpiter) 20.01.12 17:51
(33) На 2003 сервере нет необходимости устанавливать данную разработку. Эта сделана специально для 2008 сервера.
(34) Да.
36. eremin (mybracho) 05.04.12 17:45
(34) Так секретный релиз ведь для того и сделан, что б работать "без понижения режима совместимости"
37. Максим Шуйский (maxpiter) 18.05.12 10:03
(36) попробуйте, потом расскажете как оно живет :)
38. eremin (mybracho) 18.05.12 10:35
(37) Попробовал. Полгода стоит. Нормально работает.

Для решения проблемы 100 процентов применил патч от ромикса
39. Максим Шуйский (maxpiter) 18.05.12 10:54
40. eremin (mybracho) 18.05.12 12:22
41. Максим Шуйский (maxpiter) 18.05.12 13:33
(40) тема называется "Загрузка процессора 100% в 7.7 под Windows Server 2008"
Для Server 2008 патч от ромикса не работает, почему собственно и наваял это решения.
В описании про это написано.
42. Shurix Noise (shurix) 21.05.12 15:14
Я не 1Сник, поэтому прошу о маленьком уточнении:
достаточно просто подключить эту ВК для устранения проблемы или необходимо еще переписывать что-то в БД?
43. Максим Шуйский (maxpiter) 21.05.12 15:23
(42) достаточно подключить как написано в примере.
В приложении к публикации есть пример конфигурации.
44. Shurix Noise (shurix) 21.05.12 15:33
(43) maxpiter, спасибо за оперативный ответ.
45. AL CAPONA (ALCAPONA) 26.05.12 18:50
Привет, maxpiter !

Имеем Win 2008 Std R2 + SQL 2008 Ent R2 + 7.7.027 + секретный релиз (начальный BkEnd оригинальный, переименован в BkEnd0).

В каталог ИБ положил Вашу dll, в глобальник прописал

ЗагрузитьВнешнююКомпоненту(каталогИБ()+"vk_Hook1C.dll");
vk_hook=СоздатьОбъект("Addin.vk_Hook1C");
vk_hook.ПерехватSQLExecDirect();
vk_hook.МаксимальныйSleep=1024;
vk_hook.ОтключитьТаймаут = 1; //по умолчанию = 0
vk_hook.ОтключитьДедлок = 0; //по умолчанию = 0

ЗагрузитьВнешнююКомпоненту и СоздатьОбъект отрабатывает правильно, а на строке
"vk_hook.ПерехватSQLExecDirect();" 1с-ка замирает и выбрасывается с ошибкой.

После этого к сожалению пришлось закоментарить в глобальнике вызов Вашей компоненты.

Не могли бы Вы помочь мне в данной ситуации ?
46. Максим Шуйский (maxpiter) 26.05.12 22:12
(45) попробуйте конфигурацию, приложенную в примере.
На ней как себя будет вести?
47. AL CAPONA (ALCAPONA) 27.05.12 12:00
(46)
Пример скачать сам не могу, т.к. на форуме ещё менее 20 сообщений.

Но вчера попробовал то же самое, но при понижении режима совместимости в БД до SQL 2000. В такой ситуации Ваша dll работает и справляется с блокировками как надо. Вот только остался како-то неприятный осадок, что специально ставился секретный релиз для сохранения режима SQL 2008, но всё таки его пришлось понижать ...
48. Максим Шуйский (maxpiter) 28.05.12 09:46
(47) а если режим совместимости поставить 2005? на момент тестирования у меня SQL 2005 установлен.
49. AL CAPONA (ALCAPONA) 28.05.12 11:59
(48)
Уже запустил в созданную рабочую базу людей, пока не смогу опробовать.
50. AL CAPONA (ALCAPONA) 29.05.12 14:47
Попробовал режим совместимости 2005, та же история, вернул 2000.
51. Andre (vitn) 31.05.12 02:19
vk_hook1C.dll работает только если РЕЖИМ совместимости SQL установлен 2000, какой смысл тогда секретного релиза????????????
52. AL CAPONA (ALCAPONA) 31.05.12 08:59
Уважаемый maxpiter, может быть у Вас есть возможность переписать эту разработку для работы хотя бы в режиме совместимости SQL 2005 ?
53. Максим Шуйский (maxpiter) 31.05.12 10:10
(51) без "секретного релиза" 1С не запустится на 7ке и 2008 винде без изменения 1С'ных библиотек.
(52)
по идее нужно найти как называется функция перехвата для 2005 и 2008 sql.
для 2000 она называется SQLExecDirectA и SQLPrepareA.
----
хотя не факт, что получится, т.к. нужно разбирать эту самую функцию придется.

Мне сейчас искать их ну никак не получается, воюю с почтой россии и таможней :(
54. AL CAPONA (ALCAPONA) 31.05.12 12:10
(53)
Ну если у Вас получится это сделать в обозримом будущем, буду Вам очень признателен.
55. Shurix Noise (shurix) 02.06.12 19:33
maxpiter, такой вот вопрос ("слегка" не по теме):
здесь на Инфостарте есть публикация "Удобная "выгонялка" пользователей из 1С без доработок кода" ( http://infostart.ru/public/14593/ ), основанная на разработке Romix'а. Она "вклинивается" в адресное пространство с целью перехвата WinAPI-функции ShellExecuteA при помощи патчинга seven.dll (заменяется с shell32.dll на hook_1c.dll). В общем, для меня весьма удобная штука была бы, если бы не одно "но"...
Беда в том, что эта "выгонялка" не работает с Секретным Релизом. Может посоветуете что, учитывая что и у вас, и в той разработке используется hook_1c.dll ?
56. Максим Шуйский (maxpiter) 02.06.12 20:03
(55) Подменять вашу hook_1c.dll на ту которая предложена в этой публикации пробовали?
dll можно переименовать из vk_Hook1C.dll в hook_1c.dll и в конфигурации заменить на СоздатьОбъект("Addin.vk_Hook1C");
Все остальное по идее должно работать.

Или же в указанной вами публикации в hook_1c.dll внесены дополнения?
57. Shurix Noise (shurix) 02.06.12 20:12
(56) maxpiter, попробую воспользоваться вашим советом.
Меня слегка смущает, что при использовании этой "выгонялки" для юзверя сообщение о блокировке базы появляется до выбора пользователей из списка 1С.

Не знаю, насколько там изменена dll-ка. Она называется HOOK_1C.DLL и загружает плагины, перечисленные в файле Hook_1C.ini, из папки Plugins.

P.S. Попробовал - пишет, что в библиотеке отсутствует точка входа ShellExecuteA :-(
58. Максим Шуйский (maxpiter) 02.06.12 20:37
(57) увы ничем помочь не могу, причины в 53
Может быть, когда-нибудь :)
Исходники у этой публикации и предложенной вами есть, осталось найти того, кто сможет их собрать :)
59. Shurix Noise (shurix) 03.06.12 01:03
(58) Выяснил в чём "затык" у той "выгонялки" - при использовании её вкупе с Секретным Релизом почему-то не появляется в трэе значок, через который можно заблокировать/разблокировать базу. Остается найти прогера, который исправит проблему (ООП и иже с ним, к сожалению, не мой профиль) или "терроризировать" самого автора-разработчика.
60. Татьяна (tana1257) 12.08.12 12:14
На данный момент очень актуальна Ваша сборка, так как процессор стал нагружаться до 100%. У нас Windows Server 2008, почему то 2,5 месяца(установили сервер 2008) все работало замечательно, установлен BkEnd пропатченный, теперь 5 дней, как все пользователи взвыли, очень сильно стал тормозить сервер. Попробую использовать вашу сборку.
61. Татьяна (tana1257) 12.08.12 12:37
Извените, что-то я не поняла, у вас нагружался процессор 100% при "секретном" релизе? У нас такое стало происходить при обычной конфигурации 1С (ПУБ). Для использования вашего оптимизатора, я должна установить "секретный" релиз?
62. Максим Шуйский (maxpiter) 12.08.12 12:52
(60) интересно как у вас оно работало 2,5 месяца? Смысл "секретного релиза", как раз и заключается в том, чтобы 1С запустилась "в ОС Win Vista/7/2008 в режиме клиент-сервера (без манипуляций с файлами odbc-драйвера); "
(61) если у вас и так работает без "секретного релиза", то вам его не нужно устанавливать. Достаточно скачать vk_hook1C.dll
63. Татьяна (tana1257) 12.08.12 12:53
Не дописала с обычным релизом.
64. Татьяна (tana1257) 12.08.12 13:01
Суть в том, что у на работала 1С с обычным релизом, на Сервере 2005, был полнейший тормоз, 2,5 назад купили новый сервер и установили 2008(я обычный пользователь, может не так изъясняюсь) Все пользователи вздохнули,1С стала "летать". Но наша радость длилась не долго, вот уже 5 дней, как при работе даже двух пользователей процесор подскакивает под 100% и обработка стала происходить очень медленно. Если я установлю "секретный" релиз и ваш оптимизатор улучшится ли работа 1С?
65. Максим Шуйский (maxpiter) 12.08.12 13:05
(64) то что вы описываете, после установки компоненты и релиза, должно исчезнуть.
К публикации прикреплен файл с демо базой, запустите его с вашими библиотеками, потом с теми что в поставке, сравните результат.
66. Татьяна (tana1257) 12.08.12 13:59
Большое спасибо за такой быстрый ответ
67. astars (astars) 05.09.12 18:03
(64)Релиз установить нужно это проверено. Но если загрузка подскакивает до 100% при 2-активных пользователях, это что то с системой. Посмотри посты выше у меня была похожая ситуация.
68. Shurix Noise (shurix) 06.03.13 12:37
(53) maxpiter, вы "совершенно случайно" :-) не нашли свободного времени, чтобы сделать поддержку для sql2005/sql2008 режимов?
69. Максим Шуйский (maxpiter) 22.08.13 09:55
(68) shurix, теперь ответный вопрос к вам :) а вы разобрались с исходниками? получилось реализовать?
70. Maxim Kovalevsky (Maximysis) 25.11.13 07:10
Автору респект!!! Вещь нужная.
Интересно а есть ли нечто подобное при записи справочников...
71. Maxim Kovalevsky (Maximysis) 25.11.13 13:36
ОтключитьДедлок что делает?
73. Евгений Денисов (mrcastmaster) 24.04.15 08:31
Очень нужная вещь!
Но проблема появилась следующего характера кто сталкивался?
Неудачная попытка создания vk_hook=СоздатьОбъект("Addin.vk_Hook1C");
74. Максим Шуйский (maxpiter) 06.05.15 10:54
(73) mrcastmaster,
Не загружена компонента.
Загрузку, инициализацию объекта и переменных делать в ГМ
75. Евгений Денисов (mrcastmaster) 14.05.15 16:13
(74) maxpiter,
Спасибо за ответ.
Все прописал как и описан ов статье ушла проблема загрузки в 100% терминального сервера. НО не ушла проблема медленной работы 1С 7.7 и sql 2008 r2, все пользователи в терминале 2008 r2. Когда всех выгоняю и заходят первые люди все нормально, все работает. Но как только людей заваливается за 25-30 все начинает висеть и проведение 1 документа от 10 минут. Кто еще подскажет какие действия можно предпринять именно в данной связке(не предлагать использование sql 2000 и терминала под 2003)
База 30 Гб. Пользователей до 170.
76. Максим Шуйский (maxpiter) 19.05.15 21:29
(75) mrcastmaster, смотреть настройки SQL
У меня SQL сервер 16 ядер, 128 гигов оперативки. БД вся в памяти умещается пока.
База 105 гигов + log 91 гиг. tempdb на RAM диске.
Работают одновременно до 75 юзеров. Самое долгое проведение 15 секунд, самое быстрое 0.19 секунды.
То что до 10 минут проводится, означает что вы используете механизмы 1С для проведения документов, что очень плохо.
Включайте отладчик и смотрите кто тупит, скорее всего ВременныйРассчет().
И переходите на прямые запросы.
77. Владислав Портной (Supportkfk) 10.05.16 14:09
Привет всем
Сильно не бейте.
Скачал dll и пример базы. Все регистрируется, ошибок не выдает. НО нифига не фильтрует.
В чем может быть проблема?
78. Максим Шуйский (maxpiter) 14.05.16 13:45
(77) Supportkfk, сложно так сказать.
На базе примера сделайте, пожалуйста, фильтрацию документов в журнале, как вы это видите и прикрепите сюда.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа