Выполнение произвольного кода с регулируемым количеством потоков от 1 до 64

08.10.19

База данных - HighLoad оптимизация

Данную обработку можно использовать для изменения документов, справочников и других элементов с использованием до 64 ядер процессора. Увеличение скорости выполнения операций с базой 1С, между 1 потоком и 40, составляет 437%.

Скачать исходный код

Наименование Файл Версия Размер
Выполнение произвольного кода с числом задействованных ядер процессора от 1 до 64
.epf 18,98Kb
27
.epf 1.0.3 18,98Kb 27 Скачать

Проверено на платформе: 1С: Предприятие 8.3 (8.3.11.2954) с конфигурацией "Комплексная автоматизация для Казахстана, редакция 2" релиз (2.1.3.11). Будет работать на конфигурациях 1С (УТ, КА, ERP) в управляемых формах

За основу взяты:  infostart.ru/public/306865/  и  infostart.ru/public/405368/ 

Подключается (должны быть соответствующие права у пользователя) через:
 НСИ и администрирование -->  Настройка параметров системы  --> Печатные формы, отчеты и обработки --> Отчеты и обработки  --> Дополнительные отчеты и обработки  --> Создать  --> (выбрать файл)  --> Записать и закрыть. 

После подключения нужно открыть данную обработку через меню "Файл" --> "Открыть" в клиентском приложении. И в поле "Дополнительная обработка ссылка: " выбрать обработку "Выполнение произвольного кода в 10 потоков".

Принцип работы: 

При нажатии кнопки "Старт" происходит выполнение кода текст которого указан в поле "Текст запроса" в  результате выполнения должна получаться таблица с ссылками на объекты. Синтаксис как в конфигураторе!

Поле получения данной таблицы происходит выполнение действий над данными объектами, данные действия описываются в поле "Исполняемый код:" Объект над которым будет производиться действие использовать так как в примера  "ОбъектДействия". Синтаксис как в конфигураторе.

В новой версии учел замечания, добавил функционал, убрал ограничение на использование в 10 ядер.

Update: Добавил конструктор запроса в обработку (работает под толстым клиентом), оставил возможность использования произвольных параметров запроса.

 

Многопоточность Асинхронное выполнение кода Внешняя обработка Произвольный код

См. также

Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    3560    spyke    28    

47

Быстродействие типовой 1С

HighLoad оптимизация Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    5511    vasilev2015    19    

38

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    8206    167    ZAOSTG    71    

101

Удаление строк из таблицы значений различными способами с замером производительности

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    6497    doom2good    48    

64

Опыт оптимизации 1С на PostgreSQL

HighLoad оптимизация Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    9326    ivanov660    6    

76

ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ

HighLoad оптимизация Бесплатно (free)

Казалось бы, КОРП-системы должны быть устойчивы, быстры и надёжны. Но, работая в рамках РКЛ, мы видим немного другую картину. Об основных болевых точках КОРП-систем и подходах к их решению пойдет речь в статье.

15.11.2023    5324    a.doroshkevich    20    

72

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16555    skovpin_sa    14    

101
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. YannikAlx 43 10.09.18 16:27 Сейчас в теме
Сомнительная ценность обработки за такую цену....
Идея не нова, реализации более полезные в наличии на форуме за 1 стартмани...
Да даже фиксированное количество потоков - непонятка
7. romanpl777 33 11.09.18 14:25 Сейчас в теме
(1) Убрал фиксированное количество потоков, и увеличил их до 64. Как видно из картинок прирост скорости обработки, при увеличении с 6 до 40 потоков, составляет 143%.
2. echo77 1880 10.09.18 16:40 Сейчас в теме
Взаимоблокировки не будут при таком подходе?
3. YannikAlx 43 10.09.18 16:46 Сейчас в теме
(2) А нет никакого метода - 10 потоков ПРОИЗВОЛЬНОГО кода , то есть чего напишете то и будет выполняться...
От вас и будут зависеть блокировки.
5. romanpl777 33 10.09.18 17:34 Сейчас в теме
(2) блокировки, если они будут, обходит с помошью паузы на 1 секунду на данном потоке и повторными попытками пока не выполнит. Они обычно возникают если паралельно работают другие фоновые задания.
4. YannikAlx 43 10.09.18 16:48 Сейчас в теме
Вот обработка с конкретным функционалом -успешно используется уже давно
https://infostart.ru/public/804563/
8. romanpl777 33 11.09.18 14:26 Сейчас в теме
(4) не совсем такая, даже совсем не такая.
11. Жернов Виктор 7 04.12.19 10:43 Сейчас в теме
(4) Отсутствует консоль запросов и возможность фильтрации ограничена. Весьма ограниченная вещь , а регистрацию я и сам успешно делаю.
12. YannikAlx 43 04.12.19 11:10 Сейчас в теме
(11) Обработка моя была приведена исключительно как пример мнгогопоточности - не более того - у каждого продукта можно найти недостатки, типа а на балалайке играть не умеет...
И приведена была тут , поскольку за совершенно другую цену предлагалось что-то менее функциональное.
Сейчас то автор поставил адекватную цену и вполне можно тестировать и дорабатывать под себя....
Единственное проценты ускорения он рассчитывает на мой взгляд предвзято...
На увеличение потоков не приводит к кратному увеличению скорости для простых операций, то есть достичь даже 100% не очень-то верится...
10 потоков при проведении документов на 4 процессорном или 48 ядерном сервере давало прирост всего 30-40%
при этом дальнейшее увеличение количества потоков давало прирост вообще не значительный , то есть 100% я по любому не достиг.

С удовольствием протестирую сейчас предлагаемую обработку!
6. vipetrov2 11.09.18 05:13 Сейчас в теме
Через фоновое задание распараллеливать проще простого. Гораздо интереснее распараллеливать на стороне клиента, что бы можно было разрабатывать, например, обработки по шаблонам проектирования модель-представление.
Вообще не понятно почему разработчики так плохо используют параллельное программирование, первые многоядерные пользовательские процессоры появились более 10 лет назад. Игры более менее многопоточными стали делать более менее активно 3-4 года назад. Компания 1С вроде пытается все больше и больше делать конфигуратор по шаблонам проектирования, но все равно очень медленно этот процесс идет.
9. romanpl777 33 11.09.18 14:27 Сейчас в теме
(6) Задумка была в использовании именно внешней обработки как универсального механизма для быстрого изменения каких либо объектов в базе 1с.
10. Жернов Виктор 7 04.12.19 10:20 Сейчас в теме
(9) Обработка нужная, но не могу понять работает она или нет Тестировал в отладчике. Не останавливается на точке останова в процедуре перед записью в объекте Документе из списка сформированном в консоле запроса хотя опция debug на сервере у меня добавлена. Т е запрос формируется , фоновое задание запускаеся, индикатор и сообщения работают, но никаких операций с объектом действия не производится. Также писал для теста на табличном поле объекта действия проц с ошибками. Тестовых сообщений об ошибках не последовало.
16. YannikAlx 43 04.12.19 12:11 Сейчас в теме
(10) Вы как определили , что она нужная, извините?
Вы ее хоть каким-то образом смогли полезно применить в своей базе?
Да она вообще ничего не делает, и пишет , что все прекрасно 5000 документов обработала за 1 сек.
При этом даже не прикоснулась ни к одному!

Да я большей лажи вообще не видел никогда на этом сайте!
Вот оригинальный текст из обработки , выполняемый по команде СТАРТ

&НаСервере
Процедура СтартНаСервере(ПараметрыКоманды)
	
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	ДЛя каждого пар из ТаблицаПараметров цикл
		
		
		ЕСли пар.Свойкод тогда
			
		Выполнить(Пар.Значение);		
		Запрос.УстановитьПараметр(пар.Парам, Вычислить(Пар.Значение));
	
		Иначе
		Запрос.УстановитьПараметр(пар.Парам, Пар.Значение);
		КонецЕсли;
		
	КонецЦикла;
	
	
 //   Выполнить(ТекстЗапроса);

 
   ТаблицаВся = Запрос.Выполнить().Выгрузить();
   ВсегоОбъектов = ТаблицаВся.Количество();
   
   ТекстТЗ = ЗначениеВСтрокуВнутр(ТаблицаВся);

   ПараметрыКоманды.Вставить("ТекстТЗ", ТекстТЗ);

   Для ш=1 по КоличествоЗаданий  Цикл
   	
   ВыполнитьКомандуОбработкиФоновымЗаданием(Строка(ш)+"Счетчик", ПараметрыКоманды, "ДанныеЗагружаютсяПрогресс"+Строка(ш));

	КонецЦикла;
	
КонецПроцедуры // СтартНаСервере()
Показать
15. YannikAlx 43 04.12.19 12:04 Сейчас в теме
(9) Вы сами попробуйте выполнить свою обработку вот с таким запросом
ВЫБРАТЬ ПЕРВЫЕ 1000
РеализацияТоваровУслуг.Ссылка КАК Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода

При том в параметрах выберите любой месяц, где есть документы...

Ощущение , что вы ее ну очень рано выложили...
Либо хотите чтобы ее пользователи отлаживали?
13. YannikAlx 43 04.12.19 11:39 Сейчас в теме
Уберите в своей обработке при открытии формы первичный запрос...
ВЫБРАТЬ
		               |	Партнеры.Ссылка КАК Ссылка
		               |ИЗ
		               |	Справочник.Партнеры КАК Партнеры
		               |ГДЕ
		               |	Партнеры.Родитель = &Родитель

Во первых не везде есть справочник Партнеры и возникает ошибка,
во вторых если их очень много, а пользователю нужны не партнеры - куча потерянного времени...
21. romanpl777 33 10.12.19 17:45 Сейчас в теме
(13)

После изменения текста на ваш запрос обработка его запомнит.


Подключается (должны быть соответствующие права у пользователя) через:
НСИ и администрирование --> Настройка параметров системы --> Печатные формы, отчеты и обработки --> Отчеты и обработки --> Дополнительные отчеты и обработки --> Создать --> (выбрать файл) --> Записать и закрыть.

После подключения нужно открыть данную обработку через меню "Файл" --> "Открыть" в клиентском приложении. И в поле "Дополнительная обработка ссылка: " выбрать обработку "Выполнение произвольного кода в 10 потоков".
22. YannikAlx 43 10.12.19 17:49 Сейчас в теме
(21) Вот и не надо изначально там ничего писать!
Ну если нет в принципе Справочника Партнеры.
Обработка так же в принципе не откроется...
14. YannikAlx 43 04.12.19 11:55 Сейчас в теме
Ни выбрать количества используемых потоков, ни выполнить тот запрос , что в конструкторе создан ...
Обработка неимоверно сырая!!!

Пока не вижу ни малейшей возможности ее использовать, ибо не работает вообще в БП3...
А уж куда как не стандарт - Бухгалтерия Предприятия...
17. Жернов Виктор 7 04.12.19 15:29 Сейчас в теме
(14) Коллега я не автор этой обработки и даже не стал тратить время на поиск ее ошибок . Нужная потому что мне нужна обработка с произвольным запросом, а не с фиксированными параметрами и запросом. Вот если бы в Вашу обработку добавить консоль запросов и не для толстого а для тонкого клиента она во многом бы выйграла . Еще конечно неплохо бы не только записывать а выполнять кое какие экспортные процедуры документов из списка, формируемого запросом.
Впрочем напишу как нибудь сам просто мало времени. Кстати обратите внимание на блокировки. При работе В Вашей многопоточной обработке возникают ошибки взаимоблокировки. Работал один в базе и запускал многопоточную обработку. Потоки что ли не поделили записываемые объекты.

С уважением Виктор
18. YannikAlx 43 04.12.19 15:39 Сейчас в теме
(17) да я безусловно знаю что вы не автор того что тут выложено и что трудно назвать обработкой вообще...
моя же выполняет тот функционал, который нужен нашим бухам...
Вам же могу посоветовать вот эту.
По крайней мере очень универсальный инструмент...
https://infostart.ru/public/635478/
19. Жернов Виктор 7 04.12.19 15:44 Сейчас в теме
Спасибо. У Вас хорошая обработка просто мне нужно несколько больше функционала..
20. romanpl777 33 10.12.19 17:42 Сейчас в теме
(19)
Доброго дня, ну и понаписали Вы тут, обработка была проверена на КА и ЕРП, для успешной ее работы необходима регистрация ее как внешней обработки, а потом уже файл открыть внешнюю обработку. После этого нужно вверху указать подключенную в базу внешнюю обработку. после этого она начинает использовать потоки и вообще работать. Написано же было в описании:

Подключается (должны быть соответствующие права у пользователя) через:
НСИ и администрирование --> Настройка параметров системы --> Печатные формы, отчеты и обработки --> Отчеты и обработки --> Дополнительные отчеты и обработки --> Создать --> (выбрать файл) --> Записать и закрыть.

После подключения нужно открыть данную обработку через меню "Файл" --> "Открыть" в клиентском приложении. И в поле "Дополнительная обработка ссылка: " выбрать обработку "Выполнение произвольного кода в 10 потоков".
Оставьте свое сообщение