Иногда приходится сталкиваться с ситуациями, когда оптимизация «в лоб» не помогает достичь желаемой скорости.
Как правило, в таких случаях надо менять сам подход к решению проблемы, посмотреть, можно ли избежать узкого места либо организовать параллельную обработку данных, либо изменить механику записи данных в БД.
В сегодняшних видео мы рассмотрим примеры решения подобных задач.
Например, с помощью многопоточной обработки можно добиться колоссального ускорения – в несколько раз (по сравнению с однопоточным вариантом).
Методика параллельной обработки данных в 1С:Предприятие 8
В уроке показано, каким образом организовать алгоритм многопоточной обработки данных.
Для этого используются:
- Принцип разделения данных на непересекающиеся порции
- Формирование набора параметров каждого потока
- Фоновые задания.
Выбор наиболее быстрого сценария многопоточной обработки данных
В видео показан запуск обработки данных с разным количество потоков – от 1 до 10 параллельных потоков.
Также даются рекомендации по количеству потоков на «боевых» серверах.
Ускорение массовой записи в базу данных – как минимум в 2 раза!
Периодически в реальных проектах возникают задачи по массовой обработке данных: перепроведение документов, заполнение новых реквизитов в справочниках, генерация записей регистров.
В видео показан простой способ ускорения этой операции как минимум в 2 раза с помощью явных транзакций.
Ускорение массовой записи в регистры
Обычно в регистрах содержится большое количество записей. На реальных объемах миллионы строк – это обычная ситуация. И если возникает задача модифицировать эти данные, речь может идти о многочасовой (или многосуточной) обработке. Аналогичная задача возникает при массовом переносе данных из другой системы.
В видео показан способ, как ускорить обработку данных регистров на 25-40%.
Смотрите еще:
Курс по технической настройке 1С и повышению стабильности.
Поддержка – 3 месяца. Объем курса – 35 учебных часов.
Не откладывайте свое обучение!
51124
Ваш отчет принят, ознакомьтесь с решением преподавателя на текущей странице.
Андрей Бурмистров, Для меня не совсем понятно Ваше выражение “но точно могу сказать что чтение в файловой базе можно выполнять параллельно”. Если вы имеете ввиду параллельное чтение базы данных двумя и более клиентами 1С, то скорее всего вы правы. Но тогда это не относиться к данной статье, и ускорение предоставленными методами не возможно. У меня есть простая задача, не относящаяся к чтению и записи из БД. Нужно получить текст HTML страниц нескольких сот URL , через HTTPСоединение. Проверил на способе создания нескольких фоновых заданий. К сожалению ускорения не получил, так как определил, что фоновые задания, запущенные под одним сеансом, выполняются по очереди. Есть конечно возможность запуска нескольких сеансов по COM-соединению, но это не совсем устраивает.
Так если у вас сеанс один, тогда конечно никакой параллельности не будет. В клиент-серверном варианте каждое фоновое задание это отдельный сеанс. Вам надо добиться того что каждый поток работал в отдельном сеансе, тогда можно будет распараллелить чтение. А вот как этого добиться в файловой базе это уже другой вопрос, можно использовать COM-соединения, можно запускать клиентов через командную строку что бы при запуске они выполняли какой-то определенный код, можно перейти на клиент-серверный вариант и т.д.
Добрый день,
Вопрос конечно не в тему, но все же когда будет анонс курса?
Обещали ещё на прошлой неделе, потом на этой, я так понимаю на этой неделе его тоже не будет?
Декабрь – сложный месяц, еще 4 курса записаны, но выпустить не успеваем.
Но новую Оптимизацию планируем открыть уже в пятницу, практически все готово.
То есть, завтра 18 декабря будет анонс?
Да, если не случится форс-мажор, планируем открыть продажи и сделать рассылку.
Отлично.
Как раз в настоящий момент гружу в периодический независимый регистр 8 млн. строк из SQL-запроса. Попытался разделить их на потоки – фоновые задания. Делю через “НаборЗаписей.Отбор….Установить..”. Всего значений отбора – 271. В цикле от 0 до 271 набираю массив из 5 первых элементов(фоновых заданий), запускаю на выполнение – исключение вылетает на втором задании. Вообще подобным способом(не “порционный”, а “отборный”) механизм разделения может использоваться?
Пользоваться можно любым способом, который гарантирует что данные не будут пересекаться.
К том же при записи большого объема данных нужно смотреть что бы один из потоков не приводил к эскалации блокировок.
Подскажите пожалуйста, а как смотреть эти видео? где ссылки?
Владимир, ссылки доступны на странице. Наводите мышь на картинку рядом с описанием и нажимайте.
Проверьте настройки безопасности в браузерах — возможно, что они просто блокируют запуск скрипта видеоплеера.
Действительно, антивирус блокировал, спасибо.
Эти же видео будут присутствовать в платном курсе?
Да, конечно.
Когда же уже анонс нового курса, кстати, в чем отличия нового курса от предыдущего?
Уже скоро, в анонсе также будут отличия нового курса от предыдущей версии.
Добрый день!
Вроде на этой неделе обещали выход полной версии курса. Я думал, что имеется ввиду рабочая неделя. Курс не вышел. Можете сориентировать по срокам запуска курса по оптимизации производительности?
Добрый день!
Все-таки перенесли запуск на следующую неделю.
Ждите анонса.
Евгений, на этой неделе успеете выложить курс?
Приношу извинения за некоторую настойчивость, но сейчас есть “окно” для обучения, а оно бывает не всегда.
Планируем утром (18-го) анонсировать уже..
Добрый день!
В курсе будет пояснение, за счет чего установка транзакции (видео №3) ускорила запись?
Да конечно, в курсе есть целый раздел посвященный исключительно транзакциям.
Во втором видео не совсем корректное тестирование – если запустить повторно 1-потоковую обработку, время составит уже порядка 7-8 минут а не 16. В тесте не учитываются различные служебные кэши 1с.
Во-первых, кэши еще могут повлиять на скорость чтения, и то здесь больше влияет кэш сервера СУБД, а не кэш 1С. В данном примере основное время уходит на запись, на это кэш повлиять уже не может.
Во-вторых, вы действительно думаете что урок был записан с первого дубля? Естественно перед записью эта обработка уже выполнялась и не один раз.
Подскажите, база в примере файловая или SQL? Предполагаю, что SQL, в связи с чем вопрос: при многопоточной записи в файловую базу эффект будет?
База конечно же SQL, работа с файловой базой в курсе почти не рассматривается.
В файловой базе можно распараллелить запись только если используются разные таблицы. Если таблица одна, то писать в нее в момент времени может только кто-то один, т.к. в файловом варианте блокировка всегда накладывается на всю таблицу.
А в файловом варианте можно распараллелить чтение? Хочу сделать обработку чтения html страниц по URL. Пока сделать параллельное чтение не получилось на файловой базе. Если это возможно, то это зависит от версии платформы?
Параллельное чтение можно сделать в любой СУБД, в том числе и в файловой базе. Если с этим возникли проблемы, значит где-то все таки идет попытка записи, либо используется чтение с опцией ДЛЯ ИЗМЕНЕНИЯ.
Следует помнить что в файловом варианте блокировка всегда накладывается на всю таблицу.
Наверное все же нельзя с помощью указаных методов (фоновые задания). В файловом режиме, хотя и выполняются фоновые задания, но они выполняются последовательно. Если я не прав, укажите , в чем может быть ошибка? Могу только предположить, что параллельное выполнение фоновых заданий в файловом режиме базы появилось в более новых версиях платформы. Тестировал на 8.3.5
Если там фоновые задания запускаются последовательно, тогда конечно никакой параллельности быть не может. С файловыми базами уже давно не работаю, поэтому по особенностям реализации там фоновых заданий не могу подсказать, но точно могу сказать что чтение в файловой базе можно выполнять параллельно.