Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

резко уменьшилась скорость выполнения отчета "карточка счета"

резко уменьшилась скорость выполнения отчета "карточка счета"
Я
   vde69
 
07.07.21 - 15:24
есть база на основе бух-3 в ней есть доп план счетов и все типовые отчеты модернизированы для работы с ним, база работает почти 2 года, размер базы - не большой примерно 7 гигов. База на SQL.

до начала этого месяца отчет за февраль выполнялся менее 2х секунд (котик даже не появлялся), с понедельника этот-же отчет выполняется около 10 секунд.
В этот промежуток больших доработок не накатывали, но перепроводили часть документов задним числом.

есть тестовый сервер, на нем есть 2х недельная копия - там этот же отчет выполняется быстро
на тестовый сервер средствами SQL скопировал рабочую базу - отчет работает медленно (то есть проблема не в сервере)

что пробовал (все на тестовом сервере на копиях)
1. Стандартные - управление итогами, там не видно никаких дат в далеком прошлом или далеком будующем
2. полное ТИИ - результатов нет
3. обновление статистики на SQL - результата нет
4. Дефрагментация и перестроение индексов на SQL - пока идет
5. Профайлер - выдает кучу мелких запросов (порядка 15 тысяч), ни одного длительного там нет
6. RLS - не виновато, все это под полными правами

куда еще копнуть?
   МихаилМ
 
1 - 07.07.21 - 15:44
что "говорит" замер производительности ?
   Волшебник
 
Модератор
2 - 07.07.21 - 15:45
запросы в цикле
   lodger
 
3 - 07.07.21 - 15:46
если с железом и сетью порядок, в профайлере нет 10 сек, значит в 1с написан копрокод. смотреть (1) (2)
   vde69
 
4 - 07.07.21 - 15:54
(1) (2) типовой запрос бух отчетов выполнение через компоновку

на сколько я сейчас смотрю в SQL больше всего времени занимает создание (инсерт) временных таблиц NG, вроде это виртуальные таблицы остатков или подобное...
   МихаилМ
 
5 - 07.07.21 - 16:01
(4) путаете: создание таблиц NG происходит при реструктуризпции
   Вафель
 
6 - 07.07.21 - 16:03
А по типовому плану счетов какая скорость?
   ДенисЧ
 
7 - 07.07.21 - 16:04
Что с размером темпдб, его приростом, местом на том диске, здоровьем этого диска, очередью к этому диску?
   vde69
 
8 - 07.07.21 - 16:12
(6) у меня там данных нет
(7) вроде с диском проблем нет, и да сервер перезагружали


сейчас повторил с профайлером отчет с одинаковыми настройками.

старая копия - 96 строк в профайлере (быстро)
свежая копия - 14803 строк в профайлере (медленно)
   Вафель
 
9 - 07.07.21 - 16:13
может кастомное представление кому добавили?
   vde69
 
10 - 07.07.21 - 16:17
(9) добавляли внешние источники данных, но они в этих отчетах не используются.
   vde69
 
11 - 07.07.21 - 16:31
нашел причину,

проблема оказалась в куче вызова процедуры заполнения одного хитрого параметра сеанса.

Он должен заполнятся только при запуске 1с, а получилось, что заполняется при вызове отчета.
   Вафель
 
12 - 07.07.21 - 16:31
ну ужто профайлер 1с запускал?
   vde69
 
13 - 07.07.21 - 16:33
(12) запускал еще в (0), а нашел через историю изменения конфигурации в хранилище, потом трассировкой поддтвердил...
   Жан Пердежон
 
14 - 07.07.21 - 18:42
всё оказалось буднично, расходимся
   Гений 1С
 
15 - 07.07.21 - 19:02
(2) это не грех
   Ненавижу 1С
 
16 - 07.07.21 - 22:42
(15) кидать в людей камни - плохо
   TormozIT
 
17 - 07.07.21 - 23:48
Хорошо что топикстартер нашел причину. Но я так и не понял каким образом. По логике в случае частого выполнения инициализации параметра сеанса должен был замер производительности конфигуратора помочь при условии автоподключения к фоновым заданиям.

Если же выполняется огромное количество однотипных мелких запросов (частотные запросы).
Тогда надо настроить логирование техножурнала на SDBL событие без отсечки по длительности. Далее "Анализ техножурнала (ИР)" поможет свернуть все такие события в одну строку и покажет итог.
Например такое может происходить при получении представлений ссылочных объектов:
https://i.imgur.com/3WTafWW.png
   acht
 
18 - 08.07.21 - 00:40
(17) > "Анализ техножурнала (ИР)"
Дядь Сереж, иногда реклама становится навязчивой и прекращает работать из-за разрыва в понятиях эксперта и джуна.
   TormozIT
 
19 - 08.07.21 - 07:13
(18) Ну так аргументируй, почему здесь эта информация не к месту. Может действительно я в не в тему написал.
   ДенисЧ
 
20 - 08.07.21 - 07:22
(17) "огромное количество однотипных мелких запросов" для карточки счёта - это очевидно, тут ТЖ не нужен.
Это получается представление документов и субконт.
   TormozIT
 
21 - 08.07.21 - 07:31
(20) Как без ТЖ, ты поймешь их общую долю в длительности операции?
   ДенисЧ
 
22 - 08.07.21 - 07:32
(21) ТС с этим справился без техжурнала как-то.
   TormozIT
 
23 - 08.07.21 - 07:45
(22) Так вот, повторяюсь, мне не понятно, как он и с чем справился. Это лишь твоя догадка. Только сам топикстартер может прояснить это, если захочет.
   vde69
 
24 - 08.07.21 - 08:56
(23) я нашел через сравнение трассировки кода (из замеров производительности) на медленной и быстрой базе,

в целом проблема совсем не очевидная:
при запуске отчета запускается отдельный сеанс и выполняется все, что в глобальном модуле "модуль сеанса", туда добавили параметр для RLS, когда добавляли руководствовались соображением, что лишние 8 сек при старте 1с - это допустимо.

Но оказалось, что эти 8 сек добавляются в любое регламентное задание, в том числе и в любой отчет.

Вроде все логично, но уверен, что 99% 1с ников вполне могут вляпаться в это...

Пока переписал заполнение с 8 сек до 1.5 сек, но надо думать системно и мне пока не понятно как это решить...

По идеи наверно можно этот параметр сеанса передавать при запуске отчета и заполнять его из файла, но то-же как то не очень мне нравится, ладно подумаю...
   Вафель
 
25 - 08.07.21 - 09:05
(24) у тебя отчеты формируются регламентом?
   Вафель
 
26 - 08.07.21 - 09:07
Или таки фоновое выполнение делает инициализацию снова?
   vde69
 
27 - 08.07.21 - 09:08
(26) фоновые
   TormozIT
 
28 - 08.07.21 - 09:11
(24) Теперь все понятно.
Эффективным способом поиска тут будет техножурнал по событиям SDBL с группировкой по строкам исходного кода.
   Вафель
 
29 - 08.07.21 - 09:11
Значит просто параметрине ициализировпн до старта отчета.
Сделай чтение параметра в при запуске
   Вафель
 
30 - 08.07.21 - 09:12
Но по идее повторное выполнение должно уже быстро проходить
 
 
   vde69
 
31 - 08.07.21 - 11:16
кстати эта-же херня работает и при поиске в динамическом списке,

кто знает как передать произвольный параметр в процедуру "УстановкаПараметровСеанса()" ????
   TormozIT
 
32 - 08.07.21 - 11:52
(31) Там теперь запускаются "системные" фоновые задания. Им тоже нужно корректно RLS использовать в своих внутренних запросах.
   Вафель
 
33 - 08.07.21 - 11:53
что теперь каждого фоновое заново инициализирует параметры?
   acht
 
34 - 08.07.21 - 11:57
(33) > теперь
Всегда так было. Фоновое - новый сеанс со всеми вытекающими.
   vde69
 
35 - 08.07.21 - 11:58
(33) да, я сделал специальный регистр.... и далее

ИспользоватьКеш = (ПолучитьТекущийСеансИнформационнойБазы().ИмяПриложения = "BackgroundJob");
   acht
 
36 - 08.07.21 - 11:58
(31) Только через базу или любой другой внешний ресурс, одновременно доступный разным сеансам 1С
   Жан Пердежон
 
37 - 08.07.21 - 12:05
(24) 8 секунд на заполнение одного параметра - это постараться надо, не каждый справится;
и его значение точно нужно при запуске, а не при первом использовании?
   Почему 1С
 
38 - 08.07.21 - 12:20
(35) ИспользоватьКеш  = ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание() <> Неопределено;
Так универсальнее
   TormozIT
 
39 - 08.07.21 - 12:33
(38) Это дольше, т.к. выполняет обращение к менеджеру кластера (сервису фоновых заданий), и потому в данном случае неоправданно.
   Почему 1С
 
40 - 08.07.21 - 12:45
(39) Не вижу неоправданной нагрузки. Когда следующий раз начнут тормозить вебсервисы, опять будете героически искать в чем дело?
   TormozIT
 
41 - 08.07.21 - 16:19
(40) Включи хотя бы замер производительности и увидишь что разница даже на моем локальном сервере с одним пользователем будет в 10 раз. А уж на нелокальном и 100 раз вполне может быть.
https://i.imgur.com/CmiekP1.png
   Почему 1С
 
42 - 09.07.21 - 10:04
(41) https://its.1c.ru/db/edtdoc/content/355/hdoc
1с почему то тоже его рекомендуют, возможно другие виды сеанса тоже могут вернуть идентификатор фонового задания, но не уверен.
А по производительности этот код выполняется 1 раз за время работы сеанса, зачем торговать этими десятитысячными секунды?
   TormozIT
 
43 - 09.07.21 - 10:56
(42) Это руководство пользователя EDT и там даже не рекомендация, а пример 
"Определить тип сеанса можно с помощью методов ПолучитьТекущийСеансИнформационнойБазы() и ПолучитьФоновоеЗадание()."
   acht
 
44 - 09.07.21 - 10:58
(43) > пользователя EDT
Я давно подозревал, что 1Сники - не программисты =)
   Почему 1С
 
45 - 09.07.21 - 14:17
(44) Это пользователи EDT не программисты и походу у них 1С своя, другая
(43) https://its.1c.ru/db/v8317doc#bookmark:dev:TI000000126 расово верный "пример", и хитрец вырвал предложение из контекста "Вызов метода ПолучитьФоновоеЗадание() у полученного объекта позволит однозначно понять, стартует сеанс фонового задания или какой-либо другой сеанс."
   TormozIT
 
46 - 09.07.21 - 15:13
(45) Ну и где там написано "рекомендуется"? Опять же описан один из способов.
Вот еще способ:
Проверка значения свойства ИмяПриложения на равенство "BackgroundJob" у полученного объекта позволит однозначно понять, стартует сеанс фонового задания или какой-либо другой сеанс.

Чем твой способ лучше этого в плане надежности?
Я не вижу преимуществ в этом плане. А в плане скорости вижу недостаток. Поэтому для критичного к скорости кода разумнее использовать более быстрый способ.
А какой код критичен к скорости, каждый решает сам.

Проверил на базе с нелокальным сервером приложений. Относительная разница сохранилась. А абсолютная выросла в 10 раз.
https://i.imgur.com/Y8WoYqc.png
   TormozIT
 
47 - 09.07.21 - 15:14
(46) Точнее выросла не абсолютная разница, а сама длительность в обоих способах.
   Вафель
 
48 - 09.07.21 - 15:16
Само абсолютное время будет ничтожно в любой значимой операции


Список тем форума
 
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.