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

08.10.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Выполнение произвольного кода с числом задействованных ядер процессора от 1 до 64
.epf 18,98Kb ver:1.0.3
27
27 Скачать (1 SM) Купить за 1 850 руб.

Проверено на платформе: 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 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    9260    Evg-Lylyk    61    

44

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

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

13.03.2024    5097    spyke    28    

49

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

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

13.03.2024    7573    vasilev2015    20    

42

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

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

2 стартмани

15.02.2024    12422    241    ZAOSTG    80    

115

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

Принимать, хранить и анализировать показания счетчиков (метрики) в базе 1С? Почему бы нет? Но это решение быстро привело к проблемам с производительностью при попытках построить какую-то более-менее сложную аналитику. Переход на PostgresSQL только временно решил проблему, т.к. количество записей уже исчислялось десятками миллионов и что-то сложное вычислить на таких объемах за разумное время становилось все сложнее. Кое-что уже практически невозможно. А что будет с производительностью через пару лет - представить страшно. Надо что-то предпринимать! В этой статье поделюсь своим первым опытом применения СУБД Clickhouse от Яндекс. Как работает, что может, как на нее планирую (если планирую) переходить, сравнение скорости работы, оценка производительности через пару лет, пример работы из 1С. Все это приправлено текстами запросов, кодом, алгоритмами выполненных действий и преподнесено вам для ознакомления в этой статье.

1 стартмани

24.01.2024    5669    glassman    18    

40

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

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

09.01.2024    14018    doom2good    49    

71
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. YannikAlx 27 10.09.18 16:27 Сейчас в теме
Сомнительная ценность обработки за такую цену....
Идея не нова, реализации более полезные в наличии на форуме за 1 стартмани...
Да даже фиксированное количество потоков - непонятка
7. romanpl777 33 11.09.18 14:25 Сейчас в теме
(1) Убрал фиксированное количество потоков, и увеличил их до 64. Как видно из картинок прирост скорости обработки, при увеличении с 6 до 40 потоков, составляет 143%.
2. echo77 1906 10.09.18 16:40 Сейчас в теме
Взаимоблокировки не будут при таком подходе?
3. YannikAlx 27 10.09.18 16:46 Сейчас в теме
(2) А нет никакого метода - 10 потоков ПРОИЗВОЛЬНОГО кода , то есть чего напишете то и будет выполняться...
От вас и будут зависеть блокировки.
5. romanpl777 33 10.09.18 17:34 Сейчас в теме
(2) блокировки, если они будут, обходит с помошью паузы на 1 секунду на данном потоке и повторными попытками пока не выполнит. Они обычно возникают если паралельно работают другие фоновые задания.
4. YannikAlx 27 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 27 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 27 04.12.19 12:11 Сейчас в теме
(10) Вы как определили , что она нужная, извините?
Вы ее хоть каким-то образом смогли полезно применить в своей базе?
Да она вообще ничего не делает, и пишет , что все прекрасно 5000 документов обработала за 1 сек.
При этом даже не прикоснулась ни к одному!

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

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

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

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

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

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

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

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

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

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


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

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

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

С уважением Виктор
18. YannikAlx 27 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 потоков".
Оставьте свое сообщение