Долгое время запроса фитнес

1. 19 11.01.21 18:23 Сейчас в теме
Процедура СформироватьТаблицаСостояниеКлиентовПоГрупповымЗанятиям(СтруктураДополнительныеСвойства)
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = СтруктураДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы.МенеджерВременныхТаблиц;
	Запрос.Текст =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.СтруктурнаяЕдиница,
	|	ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Контрагент,
	|	ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.ГрупповоеЗанятие,
	|	ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Состояние КАК Состояние,
	|	ВЫБОР
	|		КОГДА НЕ СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.Статус ЕСТЬ NULL 
	|			ТОГДА СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.Статус
	|		ИНАЧЕ ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.СтатусРезерваПоГруповымЗанятиям.БезРезерва)
	|	КОНЕЦ КАК Статус,
	|	ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Абонемент КАК Абонемент,
	|	ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Количество,
	|	ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Период
	|ИЗ
	|	ТаблицаСостояниеКлиентовПоГрупповымЗанятиям КАК ТаблицаСостояниеКлиентовПоГрупповымЗанятиям
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеКлиентовПоГрупповымЗанятиям.СрезПоследних(
	|				,
	|				Регистратор <> &Регистратор) КАК СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних
	|		ПО ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.СтруктурнаяЕдиница = СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.СтруктурнаяЕдиница
	|			И ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.ГрупповоеЗанятие = СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.ГрупповоеЗанятие
	|			И ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.Контрагент = СостояниеКлиентовПоГрупповымЗанятиямСрезПоследних.Контрагент";
	
	Запрос.УстановитьПараметр("Регистратор", СтруктураДополнительныеСвойства.ДляПроведения.Ссылка);
	РезультатЗапроса = Запрос.Выполнить();
	
	СтруктураДополнительныеСвойства.ТаблицыДляДвижений.Вставить("ТаблицаСостояниеКлиентовПоГрупповымЗанятиям", РезультатЗапроса.Выгрузить());
	
КонецПроцедуры
Показать

Собственно не знаком с фитнесом, почему после нового года этот запрос стал выполняться ну очень медленно?
Вознаграждение за ответ
Показать полностью
Найденные решения
12. papami 36 11.01.21 21:33 Сейчас в теме +1 $m
(11)
Сделайте отбор по клиенту, которого впускаете в основной таблице через ГДЕ и в срезе.
Будет Регистратор <> &Регистратор и Клиент=&Клиент

Вообще виртуальную таблицу левым соединением - это не гуд. Но если срежете по клиенту - должно помочь.
Anchoret; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. papami 36 11.01.21 19:24 Сейчас в теме
(1)
почему после нового года этот запрос стал выполняться ну очень медленно?


Да просто накопилась критическая масса записей в базе.
2. starjevschik 11.01.21 18:43 Сейчас в теме
мне сегодня рассказали, что в 18 платформе с запросами совсем плохо и народ массово откатывает на 17...
хотя конечно может быть много причин разных. Запросец-то не слишком радует оптимальностью, конечно. Но это надо знать предмет, чтобы можно были что-то дельное делать. Может какие параметры можно передать в срез последних, например, может условие на регистратор убрать, мало ли что можно придумать.
4. unknown181538 35 11.01.21 19:36 Сейчас в теме
Границы рассчитанных итогов может двинуть надо.
Я бы смотрел на содержимое таблицы ТаблицаСостояниеКлиентовПоГрупповымЗанятиям , и можно ли ее уменьшить.
6. AlexeyIsip 10 11.01.21 20:11 Сейчас в теме
если база sql или файловая?
возможно, обновление статистики для sql нужно запустить. Вот рекомендации с сайта its.1c.ru (https://its.1c.ru/db/metod8dev/content/5837/hdoc)
Прикрепленные файлы:
Регламентные операции на уровне СУБД для MS SQL Server __ Методическая поддержка для разработчиков и администраторов 1С_Предприятия 8.pdf
7. Romyl01 19 11.01.21 20:35 Сейчас в теме
это типовой запрос конфиги фитнес корп, на файловой базе, сервер быстрый в принципе с ssd. Платформа 15 границы итогов по январь.
Причем этот запрос запускается когда надо впустить выпустить одного человека в клуб. Даже не знаю как его оптимизировать сталкивался кто нибудь с таким делом в фитнесе?
8. FatPanzer 9 11.01.21 20:52 Сейчас в теме
Со скулем на каникулах ничего не делали? Может надо статистику пересчитать?
9. Romyl01 19 11.01.21 21:11 Сейчас в теме
10. VicGuru 11.01.21 21:19 Сейчас в теме
по оптимизации - добавить отборы на виртуальную таблицу среза последних
11. Romyl01 19 11.01.21 21:24 Сейчас в теме
12. papami 36 11.01.21 21:33 Сейчас в теме +1 $m
(11)
Сделайте отбор по клиенту, которого впускаете в основной таблице через ГДЕ и в срезе.
Будет Регистратор <> &Регистратор и Клиент=&Клиент

Вообще виртуальную таблицу левым соединением - это не гуд. Но если срежете по клиенту - должно помочь.
Anchoret; +1 Ответить
13. Romyl01 19 11.01.21 21:47 Сейчас в теме
(12) это разработчики фитнеса, упыри, счас попробую поиграться параметрами запроса.
15. Romyl01 19 11.01.21 22:57 Сейчас в теме
(12) сделал отбор по клиенту теперь время выполнения 00(это немного смущает) вместо 70, но все вроде проводиться, счас буду смотреть все движения по регистрам правильно ли идут, если все ок завтра запущу в тест на рабочую базу. ну и если все ок вам зачту правильный ответ.
16. papami 36 11.01.21 23:23 Сейчас в теме
(15)
Это нормальная ситуация. Просто на первый взгляд видно что регистр хранит статусы клиента, да еще в разрезе документов (как я понимаю визитов). При этом выбираются все клиенты со всеми статусами))) да и еще куча разрезов.

Очень похоже на анекдот:
- Вам сколько ложек сахара?
- Четыре, только не перемешивайте сильно - я не люблю сладкое.

При том, что запрос построен с несколькими методическими ошибками, то при определенном объеме данных (на котором разработчики не тестируют) начнет тормозить.

P.S.: Проверьте, что функция не используется еще из каких-то мест.
Anchoret; +1 Ответить
17. VicGuru 12.01.21 08:10 Сейчас в теме
(15)Вообще конечно грамотнее конструкция вида

Регистратор <> &Регистратор 
И (Контрагент, СтруктурнаяЕдиница, ГрупповоеЗанятие)  В
		(ВЫБРАТЬ
		Таб_ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.КонтрагентКАК Контрагент,
		Таб_ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.КонтрагентКАК СтруктурнаяЕдиница,
		Таб_ТаблицаСостояниеКлиентовПоГрупповымЗанятиям.КонтрагентКАК ГрупповоеЗанятие 
		ИЗ
		ТаблицаСостояниеКлиентовПоГрупповымЗанятиям КАК Таб_ТаблицаСостояниеКлиентовПоГрупповымЗанятиям)


Но в принципе если в документе Контрагент это просто ссылка пойдет и предложенный выше вариант.

А если еще и индексы настроить...


Ну а про упырей.... Не знаю кто там Фитнес писал, но даже в типовой Рознице лично менял три-четыре запроса из-за того что при большом количестве магазинов и условий скидок 1С просто помирала в РМК при сканировании товара например
18. papami 36 12.01.21 08:33 Сейчас в теме
(17)
И во временную, как предложил коллега ниже
Вопрос что в момент формирования запроса тут:
ТаблицаСостояниеКлиентовПоГрупповымЗанятиям


Если там тысячи записей с разными клиентами + это не вынести в во временную, а соединять опять напрямую - результат будет аналогичным.

Ну а про упырей....

Мы не знаем в каких условиях люди работают. Может там времени нет на тесты на большом объеме данных. Или методистов нет.
19. Romyl01 19 12.01.21 10:41 Сейчас в теме
(18) да они разработчики программного продукта причем версия корп!, как так они не тестировали!!!???, даже я понял почти сразу что запрос не оптимален, вообщем фуфло этот феликс фитнес. там такого хватает еще навскидку пару идиотских функций поправил. Причем им же дали 1с совместимо.
20. papami 36 12.01.21 11:11 Сейчас в теме
(19)
Отраслевые не блещут конечно)
В прошлом году тоже просили на файловой в конфигурации ТСЖ расчет начислений какой-то оптимизировать. 2 минуты 40 секунд примерно делался. Тоже дело было в запросе. Стало 8-10 секунд.
Причем там был коммент над запросом от разработчика "работает не оптимально" или вроде того)))
21. Romyl01 19 12.01.21 12:14 Сейчас в теме
(20) ладно расчет, а тут клиента в клуб пускают и на пару минут задумывается ска. Это точно должны были оттестить.
22. papami 36 12.01.21 15:49 Сейчас в теме
(21)
Надо завести раздел форума "Детские болячки", создать темы по конфигурациям. И делиться опытом исправления)))
14. Leon75 11.01.21 22:13 Сейчас в теме
Посмотреть в запросе, формирующим ТаблицаСостояниеКлиентовПоГрупповымЗанятиям в менеджере временных таблиц проиндексированы ли поля: структурнаяединица, групповоезанятие, контрагент. После этого создать из текущего запроса пакет, в котором будет формироваться временная таблица из РегистрСведений.СостояниеКлиентовПоГрупповымЗанятиям.СрезПоследних(
| ,
| Регистратор <> &Регистратор) с необходимыми полями.
Посмотреть количество записей, которое получается в этой временной таблице.
Если там не десятки тысяч, то соединить с получившейся временной вместо виртуальной базовый запрос.
kare; Fox_1n; papami; +3 Ответить
Оставьте свое сообщение
Вопросы с вознаграждением