Результат запроса при изменении 1 параметра выполняется в медленне в 700 раз

1. user1348696 20.12.23 13:00 Сейчас в теме
Добрый день,
Имеется конфигурация Аренда и управление недвижимостью для "1С:Бухгалтерия 8", редакция 3.0.
База расположена на postgres 13.
В коде вызывается запрос 2 раза подряд с разным значением параметра "ПостояннаяЧасть", Истина и Ложь.
При запросе Истина, ответ через 0,7 сек, при Ложь 700 сек. Во втором случает возвращает таблицу на 0 строк.
На postgressql 12 редакции данной ситуации нет.
Проверяли на 13, 15 редакциях. Сборки используем от PGPro. Тюнинг производили аналогично 12 редакции.
Чем обусловлена ситуация - мы не умеем тюнить постгес или в свежих редакциях что то сломалось?
Текст запроса (не изменялся от разработчика):
ВЫБРАТЬ
	СтатусыОбъектовАренды.Услуга КАК Услуга,
	СтатусыОбъектовАренды.ОбъектАренды КАК ОбъектАренды,
	СтатусыОбъектовАренды.ДатаНачалаАренды КАК ДатаНачалаСрокаАренды,
	ВЫБОР
		КОГДА СтатусыОбъектовАренды.ДатаОкончанияАренды < &ДатаОкончания
			ТОГДА СтатусыОбъектовАренды.ДатаОкончанияАренды
		ИНАЧЕ &ДатаОкончания
	КОНЕЦ КАК ДатаОкончанияСрокаАренды,
	АР_СтавкиСрезПоследних.Ставка КАК Ставка,
	АР_СтавкиСрезПоследних.СпособНачисления КАК СпособНачисления,
	АР_СтавкиСрезПоследних.Площадь КАК Количество,
	СтатусыОбъектовАренды.Услуга.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	ВЫБОР
		КОГДА СтатусыОбъектовАренды.Счетчик ССЫЛКА Справочник.АР_СпискиСчетчиков
			ТОГДА НЕОПРЕДЕЛЕНО
		ИНАЧЕ СтатусыОбъектовАренды.Счетчик
	КОНЕЦ КАК Счетчик,
	СтатусыОбъектовАренды.КоэффициентОтнесенияСчетчика КАК КоэффициентОтнесенияСчетчика,
	ЕСТЬNULL(АР_ЗаключениеДоговораАрендыПостояннаяЧастьАренднойПлаты.НомерСтроки, ЕСТЬNULL(АР_ЗаключениеДоговораАрендыПеременнаяЧастьАренднойПлаты.НомерСтроки, 9999)) КАК НомерСтрокиТЧ,
	АР_СтавкиСрезПоследних.СтавкаНДС КАК СтавкаНДС
ИЗ
	РегистрСведений.АР_СтатусыОбъектовАренды.СрезПоследних(
			&МоментВремени,
			ЗаключениеДоговора = &ЗаключениеДоговора
				И Услуга.АР_ПостояннаяЧастьОплаты = &ПостояннаяЧасть) КАК СтатусыОбъектовАренды
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АР_Ставки.СрезПоследних(
				&МоментВремени,
				СрокДействия >= &ДатаСреза
					ИЛИ СрокДействия = ДАТАВРЕМЯ(1, 1, 1)) КАК АР_СтавкиСрезПоследних
		ПО СтатусыОбъектовАренды.Договор = АР_СтавкиСрезПоследних.Договор
			И СтатусыОбъектовАренды.ОбъектАренды = АР_СтавкиСрезПоследних.ОбъектАренды
			И СтатусыОбъектовАренды.Услуга = АР_СтавкиСрезПоследних.Услуга
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.АР_ЗаключениеДоговораАренды.ПостояннаяЧастьАренднойПлаты КАК АР_ЗаключениеДоговораАрендыПостояннаяЧастьАренднойПлаты
		ПО СтатусыОбъектовАренды.ОбъектАренды = АР_ЗаключениеДоговораАрендыПостояннаяЧастьАренднойПлаты.ОбъектАренды
			И СтатусыОбъектовАренды.Услуга = АР_ЗаключениеДоговораАрендыПостояннаяЧастьАренднойПлаты.Услуга
			И СтатусыОбъектовАренды.ЗаключениеДоговора = АР_ЗаключениеДоговораАрендыПостояннаяЧастьАренднойПлаты.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.АР_ЗаключениеДоговораАренды.ПеременнаяЧастьАренднойПлаты КАК АР_ЗаключениеДоговораАрендыПеременнаяЧастьАренднойПлаты
		ПО СтатусыОбъектовАренды.ОбъектАренды = АР_ЗаключениеДоговораАрендыПеременнаяЧастьАренднойПлаты.ОбъектАренды
			И СтатусыОбъектовАренды.Услуга = АР_ЗаключениеДоговораАрендыПеременнаяЧастьАренднойПлаты.Услуга
			И СтатусыОбъектовАренды.ЗаключениеДоговора = АР_ЗаключениеДоговораАрендыПеременнаяЧастьАренднойПлаты.Ссылка
ГДЕ
	СтатусыОбъектовАренды.ДатаНачалаАренды < &ДатаОкончания

УПОРЯДОЧИТЬ ПО
	НомерСтрокиТЧ
Показать
По теме из базы знаний
Найденные решения
18. user1348696 22.12.23 09:21 Сейчас в теме
(1)
Добрый день,
проблема решена следующим образом:
Установлена редакция postges 15.4 от 1С скачанная https://releases.1c.ru.
Установлены рекомендованные параметры по памяти.
Запрос при любом значении параметра выполняется за 0,079 с.
редакцию от PGPro развернули в первый раз.
Sashares; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. spacecraft 20.12.23 13:55 Сейчас в теме
(1) для начала не плохо бы разнести получение срезов и не соединять их напрямую.и с физическими таблицами.
Можно выполнить отдельно часть запроса получения среза с параметром ПостояннаяЧасть. И посмотреть количество записей полученных при Истина и Ложь.
Могу предположить, что при Истина их намного меньше.
А при Ложь их очень много. И далее идет соединение полным перебором без использования индексов.
18. user1348696 22.12.23 09:21 Сейчас в теме
(1)
Добрый день,
проблема решена следующим образом:
Установлена редакция postges 15.4 от 1С скачанная https://releases.1c.ru.
Установлены рекомендованные параметры по памяти.
Запрос при любом значении параметра выполняется за 0,079 с.
редакцию от PGPro развернули в первый раз.
Sashares; +1 Ответить
2. user-z99999 67 20.12.23 13:39 Сейчас в теме
Нужно красиво оформить код, нажимаем кнопку и внутри код 1с.
Прикрепленные файлы:
3. user-z99999 67 20.12.23 13:41 Сейчас в теме
Смотрите планы запроса, ловите их.
Может был индекс на поле, а в новой базе его нет.
7. user1348696 20.12.23 14:33 Сейчас в теме
(3)План запроса для
ПостояннаяЧасть = ИСТИНА

"Sort  (cost=7815.25..7815.25 rows=1 width=261) (actual time=723.761..723.769 rows=4 loops=1)
  Output: t8._fld25919rref, t8._fld25920rref, t8._fld25922, (CASE WHEN (t8._fld25923 < '2023-12-20 00:00:00'::timestamp without time zone) THEN t8._fld25923 ELSE '2023-12-20 00:00:00'::timestamp without time zone END), t14._fld25913_type, t14._fld25913_n, t14._fld25913_rrref, t14._fld25914rref, t14._fld25915, t17._fld3601rref, (CASE WHEN ((t8._fld25925_type = '\\x08'::bytea) AND (t8._fld25925_rtref = '\\x0000835e'::bytea)) THEN '\\x01'::bytea ELSE t8._fld25925_type END), (CASE WHEN ((t8._fld25925_type = '\\x08'::bytea) AND (t8._fld25925_rtref = '\\x0000835e'::bytea)) THEN '\\x00000000'::bytea ELSE t8._fld25925_rtref END), (CASE WHEN ((t8._fld25925_type = '\\x08'::bytea) AND (t8._fld25925_rtref = '\\x0000835e'::bytea)) THEN '\\x00000000000000000000000000000000'::bytea ELSE t8._fld25925_rrref END), t8._fld25926, (COALESCE(t15._lineno19679, COALESCE(t16._lineno19688, '9999'::numeric))), t14._fld38594rref
  Sort Key: (COALESCE(t15._lineno19679, COALESCE(t16._lineno19688, '9999'::numeric)))
  Sort Method: quicksort  Memory: 25kB
  Buffers: shared hit=522956
  ->  Nested Loop Left Join  (cost=7812.66..7815.24 rows=1 width=261) (actual time=690.144..723.760 rows=4 loops=1)
        Output: t8._fld25919rref, t8._fld25920rref, t8._fld25922, CASE WHEN (t8._fld25923 < '2023-12-20 00:00:00'::timestamp without time zone) THEN t8._fld25923 ELSE '2023-12-20 00:00:00'::timestamp without time zone END, t14._fld25913_type, t14._fld25913_n, t14._fld25913_rrref, t14._fld25914rref, t14._fld25915, t17._fld3601rref, CASE WHEN ((t8._fld25925_type = '\\x08'::bytea) AND (t8._fld25925_rtref = '\\x0000835e'::bytea)) THEN '\\x01'::bytea ELSE t8._fld25925_type END, CASE WHEN ((t8._fld25925_type = '\\x08'::bytea) AND (t8._fld25925_rtref = '\\x0000835e'::bytea)) THEN '\\x00000000'::bytea ELSE t8._fld25925_rtref END, CASE WHEN ((t8._fld25925_type = '\\x08'::bytea) AND (t8._fld25925_rtref = '\\x0000835e'::bytea)) THEN '\\x00000000000000000000000000000000'::bytea ELSE t8._fld25925_rrref END, t8._fld25926, COALESCE(t15._lineno19679, COALESCE(t16._lineno19688, '9999'::numeric)), t14._fld38594rref
        Inner Unique: true
        Buffers: shared hit=522956
        ->  Nested Loop Left Join  (cost=7812.56..7815.11 rows=1 width=150) (actual time=690.135..723.745 rows=4 loops=1)
              Output: t8._fld25919rref, t8._fld25920rref, t8._fld25922, t8._fld25923, t8._fld25925_type, t8._fld25925_rtref, t8._fld25925_rrref, t8._fld25926, t14._fld25913_type, t14._fld25913_n, t14._fld25913_rrref, t14._fld25914rref, t14._fld25915, t14._fld38594rref, t15._lineno19679, t16._lineno19688
              Join Filter: ((t8._fld25921_type = '\\x08'::bytea) AND (t8._fld25921_rtref = '\\x00000273'::bytea))
              Buffers: shared hit=522944
              ->  Nested Loop Left Join  (cost=7812.44..7814.71 rows=1 width=169) (actual time=690.127..723.731 rows=4 loops=1)
                    Output: t8._fld25919rref, t8._fld25920rref, t8._fld25922, t8._fld25923, t8._fld25925_type, t8._fld25925_rtref, t8._fld25925_rrref, t8._fld25926, t8._fld25921_type, t8._fld25921_rtref, t8._fld25921_rrref, t14._fld25913_type, t14._fld25913_n, t14._fld25913_rrref, t14._fld25914rref, t14._fld25915, t14._fld38594rref, t15._lineno19679
                    Join Filter: ((t8._fld25921_type = '\\x08'::bytea) AND (t8._fld25921_rtref = '\\x00000273'::bytea))
                    Buffers: shared hit=522936
                    ->  Nested Loop  (cost=7812.33..7814.50 rows=1 width=164) (actual time=690.114..723.713 rows=2 loops=1)
                          Output: t8._fld25919rref, t8._fld25920rref, t8._fld25922, t8._fld25923, t8._fld25925_type, t8._fld25925_rtref, t8._fld25925_rrref, t8._fld25926, t8._fld25921_type, t8._fld25921_rtref, t8._fld25921_rrref, t14._fld25913_type, t14._fld25913_n, t14._fld25913_rrref, t14._fld25914rref, t14._fld25915, t14._fld38594rref
                          Inner Unique: true
                          Join Filter: ((t8._fld25918rref = t4._fld25918rref) AND (t8._fld25919rref = t4._fld25919rref) AND (t8._fld25920rref = t4._fld25920rref) AND (t8._fld25921_type = t4._fld25921_type) AND (t8._fld25921_rtref = t4._fld25921_rtref) AND (t8._fld25921_rrref = t4._fld25921_rrref) AND (t8._period = (max(t4._period))) AND (t8._recordertref = (substr(max((t6._recordertref || t6._recorderrref)), 1, 4))) AND (t8._recorderrref = (substr(max((t6._recordertref || t6._recorderrref)), 5, 16))))
                          Rows Removed by Join Filter: 148045
                          Buffers: shared hit=522930
                          ->  Nested Loop  (cost=5721.74..5723.76 rows=1 width=313) (actual time=113.347..552.482 rows=74024 loops=1)
                                Output: t8._fld25919rref, t8._fld25920rref, t8._fld25922, t8._fld25923, t8._fld25925_type, t8._fld25925_rtref, t8._fld25925_rrref, t8._fld25926, t8._fld25918rref, t8._fld25921_type, t8._fld25921_rtref, t8._fld25921_rrref, t8._period, t8._recordertref, t8._recorderrref, t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, t14._fld25913_type, t14._fld25913_n, t14._fld25913_rrref, t14._fld25914rref, t14._fld25915, t14._fld38594rref, t14._fld25910rref, t14._fld25911rref, t14._fld25912rref
                                Join Filter: (((max(t12._period)) = t14._period) AND ((substr(max((t13._recordertref || t13._recorderrref)), 1, 4)) = t14._recordertref) AND ((substr(max((t13._recordertref || t13._recorderrref)), 5, 16)) = t14._recorderrref))
                                Rows Removed by Join Filter: 111556
                                Buffers: shared hit=521526
                                ->  Nested Loop  (cost=5721.57..5723.53 rows=1 width=271) (actual time=113.334..296.348 rows=74024 loops=1)
                                      Output: t8._fld25919rref, t8._fld25920rref, t8._fld25922, t8._fld25923, t8._fld25925_type, t8._fld25925_rtref, t8._fld25925_rrref, t8._fld25926, t8._fld25918rref, t8._fld25921_type, t8._fld25921_rtref, t8._fld25921_rrref, t8._period, t8._recordertref, t8._recorderrref, t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, (max(t12._period)), (substr(max((t13._recordertref || t13._recorderrref)), 1, 4)), (substr(max((t13._recordertref || t13._recorderrref)), 5, 16))
                                      Buffers: shared hit=172805
                                      ->  GroupAggregate  (cost=5721.40..5721.52 rows=1 width=123) (actual time=113.308..149.977 rows=38538 loops=1)
                                            Output: t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, (max(t12._period)), substr(max((t13._recordertref || t13._recorderrref)), 1, 4), substr(max((t13._recordertref || t13._recorderrref)), 5, 16)
                                            Group Key: t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, (max(t12._period))
                                            Buffers: shared hit=3386
                                            ->  Sort  (cost=5721.40..5721.40 rows=1 width=81) (actual time=113.278..116.100 rows=42160 loops=1)
                                                  Output: t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, (max(t12._period)), t13._recordertref, t13._recorderrref
                                                  Sort Key: t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, (max(t12._period))
                                                  Sort Method: quicksort  Memory: 6807kB
                                                  Buffers: shared hit=3386
                                                  ->  Hash Join  (cost=3005.69..5721.40 rows=1 width=81) (actual time=47.208..77.117 rows=42160 loops=1)
                                                        Output: t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, (max(t12._period)), t13._recordertref, t13._recorderrref
                                                        Inner Unique: true
                                                        Hash Cond: ((t13._fld25910rref = t12._fld25910rref) AND (t13._fld25911rref = t12._fld25911rref) AND (t13._fld25912rref = t12._fld25912rref) AND (t13._period = (max(t12._period))))
                                                        Buffers: shared hit=3386
                                                        ->  Seq Scan on public._inforg25909 t13  (cost=0.00..2424.64 rows=69303 width=81) (actual time=0.009..13.927 rows=69303 loops=1)
                                                              Output: t13._period, t13._recordertref, t13._recorderrref, t13._lineno, t13._active, t13._fld25910rref, t13._fld25911rref, t13._fld25912rref, t13._fld25913_type, t13._fld25913_n, t13._fld25913_rrref, t13._fld25914rref, t13._fld25915, t13._fld38594rref, t13._fld46441, t13._fld1173
                                                              Filter: (t13._active AND (t13._fld1173 = '0'::numeric) AND ((t13._fld46441 >= '2023-12-20 00:00:00'::timestamp without time zone) OR (t13._fld46441 = '0001-01-01 00:00:00'::timestamp without time zone)))
                                                              Buffers: shared hit=1693
                                                        ->  Hash  (cost=2908.67..2908.67 rows=6930 width=59) (actual time=47.183..47.185 rows=38538 loops=1)
                                                              Output: t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, (max(t12._period))
                                                              Buckets: 65536 (originally 8192)  Batches: 1 (originally 1)  Memory Usage: 4125kB
                                                              Buffers: shared hit=1693
                                                              ->  HashAggregate  (cost=2770.07..2839.37 rows=6930 width=59) (actual time=32.337..38.253 rows=38538 loops=1)
                                                                    Output: t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, max(t12._period)
                                                                    Group Key: t12._fld25910rref, t12._fld25911rref, t12._fld25912rref
                                                                    Batches: 1  Memory Usage: 9745kB
                                                                    Buffers: shared hit=1693
                                                                    ->  Seq Scan on public._inforg25909 t12  (cost=0.00..2493.94 rows=69031 width=59) (actual time=0.001..13.337 rows=69031 loops=1)
                                                                          Output: t12._period, t12._recordertref, t12._recorderrref, t12._lineno, t12._active, t12._fld25910rref, t12._fld25911rref, t12._fld25912rref, t12._fld25913_type, t12._fld25913_n, t12._fld25913_rrref, t12._fld25914rref, t12._fld25915, t12._fld38594rref, t12._fld46441, t12._fld1173
                                                                          Filter: (t12._active AND (t12._period <= '2023-12-20 00:00:00'::timestamp without time zone) AND (t12._fld1173 = '0'::numeric) AND ((t12._fld46441 >= '2023-12-20 00:00:00'::timestamp without time zone) OR (t12._fld46441 = '0001-01-01 00:00:00'::timestamp without time zone)))
                                                                          Rows Removed by Filter: 272
                                                                          Buffers: shared hit=1693
                                      ->  Index Scan using _inforg25917_3 on public._inforg25917 t8  (cost=0.17..1.99 rows=1 width=148) (actual time=0.003..0.003 rows=2 loops=38538)
                                            Output: t8._period, t8._recordertref, t8._recorderrref, t8._lineno, t8._active, t8._fld25918rref, t8._fld25919rref, t8._fld25920rref, t8._fld25921_type, t8._fld25921_rtref, t8._fld25921_rrref, t8._fld25922, t8._fld25923, t8._fld25924rref, t8._fld25925_type, t8._fld25925_rtref, t8._fld25925_rrref, t8._fld25926, t8._fld1173
                                            Index Cond: ((t8._fld1173 = '0'::numeric) AND (t8._fld25918rref = t12._fld25912rref) AND (t8._fld25919rref = t12._fld25910rref) AND (t8._fld25920rref = t12._fld25911rref))
                                            Filter: (t8._fld25922 < '2023-12-20 00:00:00'::timestamp without time zone)
                                            Rows Removed by Filter: 0
                                            Buffers: shared hit=169419
                                ->  Index Scan using _inforg25909_3 on public._inforg25909 t14  (cost=0.17..0.22 rows=1 width=144) (actual time=0.002..0.003 rows=3 loops=74024)
                                      Output: t14._period, t14._recordertref, t14._recorderrref, t14._lineno, t14._active, t14._fld25910rref, t14._fld25911rref, t14._fld25912rref, t14._fld25913_type, t14._fld25913_n, t14._fld25913_rrref, t14._fld25914rref, t14._fld25915, t14._fld38594rref, t14._fld46441, t14._fld1173
                                      Index Cond: ((t14._fld1173 = '0'::numeric) AND (t14._fld25910rref = t8._fld25919rref) AND (t14._fld25911rref = t8._fld25920rref) AND (t14._fld25912rref = t8._fld25918rref))
                                      Buffers: shared hit=348721
                          ->  GroupAggregate  (cost=2090.59..2090.71 rows=1 width=147) (actual time=0.001..0.002 rows=2 loops=74024)
                                Output: t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, t4._fld25921_type, t4._fld25921_rtref, t4._fld25921_rrref, (max(t4._period)), substr(max((t6._recordertref || t6._recorderrref)), 1, 4), substr(max((t6._recordertref || t6._recorderrref)), 5, 16)
                                Group Key: t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, t4._fld25921_type, t4._fld25921_rtref, t4._fld25921_rrref, (max(t4._period))
                                Buffers: shared hit=1404
                                ->  Sort  (cost=2090.59..2090.59 rows=1 width=105) (actual time=0.000..0.000 rows=2 loops=74024)
                                      Output: t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, t4._fld25921_type, t4._fld25921_rtref, t4._fld25921_rrref, (max(t4._period)), t6._recordertref, t6._recorderrref
                                      Sort Key: t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, (max(t4._period))
                                      Sort Method: quicksort  Memory: 25kB
                                      Buffers: shared hit=1404
                                      ->  Nested Loop  (cost=0.33..2090.59 rows=1 width=105) (actual time=8.615..9.617 rows=2 loops=1)
                                            Output: t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, t4._fld25921_type, t4._fld25921_rtref, t4._fld25921_rrref, (max(t4._period)), t6._recordertref, t6._recorderrref
                                            Inner Unique: true
                                            Join Filter: (t4._fld25919rref = t7._idrref)
                                            Rows Removed by Join Filter: 14
                                            Buffers: shared hit=1404
                                            ->  Nested Loop  (cost=0.33..2070.89 rows=1 width=122) (actual time=8.566..9.502 rows=2 loops=1)
                                                  Output: t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, t4._fld25921_type, t4._fld25921_rtref, t4._fld25921_rrref, (max(t4._period)), t6._recordertref, t6._recorderrref, t6._fld25919rref
                                                  Buffers: shared hit=1374
                                                  ->  GroupAggregate  (cost=0.17..2069.78 rows=1 width=83) (actual time=8.554..9.482 rows=2 loops=1)
                                                        Output: t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, t4._fld25921_type, t4._fld25921_rtref, t4._fld25921_rrref, max(t4._period)
                                                        Group Key: t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, t4._fld25921_type, t4._fld25921_rtref, t4._fld25921_rrref
                                                        Buffers: shared hit=1367
                                                        ->  Nested Loop  (cost=0.17..2069.76 rows=1 width=83) (actual time=8.545..9.474 rows=2 loops=1)
                                                              Output: t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, t4._fld25921_type, t4._fld25921_rtref, t4._fld25921_rrref, t4._period
                                                              Inner Unique: true
                                                              Join Filter: (t4._fld25919rref = t5._idrref)
                                                              Rows Removed by Join Filter: 14
                                                              Buffers: shared hit=1367
                                                              ->  Index Only Scan using _inforg25917_3 on public._inforg25917 t4  (cost=0.17..2049.78 rows=3 width=83) (actual time=8.451..9.376 rows=2 loops=1)
                                                                    Output: t4._fld1173, t4._fld25918rref, t4._fld25919rref, t4._fld25920rref, t4._fld25921_type, t4._fld25921_rtref, t4._fld25921_rrref, t4._period, t4._recordertref, t4._recorderrref, t4._lineno, t4._active
                                                                    Index Cond: ((t4._fld1173 = '0'::numeric) AND (t4._fld25921_type = '\\x08'::bytea) AND (t4._fld25921_rtref = '\\x00000273'::bytea) AND (t4._fld25921_rrref = '\\x865200155d0a1f2311ee101740b50113'::bytea) AND (t4._period <= '2023-12-20 00:00:00'::timestamp without time zone) AND (t4._active = true))
                                                                    Heap Fetches: 0
                                                                    Buffers: shared hit=1352
                                                              ->  Materialize  (cost=0.00..19.60 rows=11 width=17) (actual time=0.013..0.046 rows=8 loops=2)
                                                                    Output: t5._idrref
                                                                    Buffers: shared hit=15
                                                                    ->  Seq Scan on public._reference137 t5  (cost=0.00..19.58 rows=11 width=17) (actual time=0.022..0.086 rows=8 loops=1)
                                                                          Output: t5._idrref
                                                                          Filter: (t5._fld3616 AND (t5._fld1173 = '0'::numeric))
                                                                          Rows Removed by Filter: 175
                                                                          Buffers: shared hit=15
                                                  ->  Index Only Scan using _inforg25917_3 on public._inforg25917 t6  (cost=0.17..1.09 rows=1 width=105) (actual time=0.007..0.008 rows=1 loops=2)
                                                        Output: t6._fld1173, t6._fld25918rref, t6._fld25919rref, t6._fld25920rref, t6._fld25921_type, t6._fld25921_rtref, t6._fld25921_rrref, t6._period, t6._recordertref, t6._recorderrref, t6._lineno, t6._active
                                                        Index Cond: ((t6._fld1173 = '0'::numeric) AND (t6._fld25918rref = t4._fld25918rref) AND (t6._fld25919rref = t4._fld25919rref) AND (t6._fld25920rref = t4._fld25920rref) AND (t6._fld25921_type = '\\x08'::bytea) AND (t6._fld25921_rtref = '\\x00000273'::bytea) AND (t6._fld25921_rrref = '\\x865200155d0a1f2311ee101740b50113'::bytea) AND (t6._period = (max(t4._period))) AND (t6._active = true))
                                                        Heap Fetches: 0
                                                        Buffers: shared hit=7
                                            ->  Seq Scan on public._reference137 t7  (cost=0.00..19.58 rows=11 width=17) (actual time=0.007..0.055 rows=8 loops=2)
                                                  Output: t7._idrref, t7._version, t7._marked, t7._predefinedid, t7._parentidrref, t7._folder, t7._code, t7._description, t7._fld3600, t7._fld3615rref, t7._fld3601rref, t7._fld3599, t7._fld3603, t7._fld3604, t7._fld3605rref, t7._fld3606rref, t7._fld3607rref, t7._fld3608rref, t7._fld3609rref, t7._fld3610rref, t7._fld3611rref, t7._fld3612rref, t7._fld35461rref, t7._fld3613rref, t7._fld3614rref, t7._fld3616, t7._fld3617, t7._fld3618, t7._fld3619, t7._fld3620, t7._fld3621, t7._fld35462rref, t7._fld3623, t7._fld3602rref, t7._fld28360rref, t7._fld29737, t7._fld29738, t7._fld29784rref, t7._fld29789rref, t7._fld3622, t7._fld3624rref, t7._fld31627rref, t7._fld59074rref, t7._fld36820, t7._fld38596rref, t7._fld46618, t7._fld46619, t7._fld46620, t7._fld46621, t7._fld46622, t7._fld46623, t7._fld46624, t7._fld46625, t7._fld46626, t7._fld46627, t7._fld46628rref, t7._fld49235, t7._fld49236, t7._fld46883, t7._fld46884, t7._fld49816, t7._fld47837, t7._fld58201, t7._fld58202, t7._fld58203, t7._fld58204, t7._fld58205, t7._fld58206, t7._fld58207, t7._fld58208, t7._fld58209, t7._fld58210, t7._fld58211, t7._fld1173
                                                  Filter: (t7._fld3616 AND (t7._fld1173 = '0'::numeric))
                                                  Rows Removed by Filter: 175
                                                  Buffers: shared hit=30
                    ->  Index Scan using _document627_vt19678_skx1 on public._document627_vt19678x1 t15  (cost=0.12..0.20 rows=1 width=56) (actual time=0.006..0.007 rows=2 loops=2)
                          Output: t15._document627_idrref, t15._fld1173, t15._keyfield, t15._lineno19679, t15._fld19680rref, t15._fld19681rref, t15._fld19682, t15._fld19683rref, t15._fld19684_type, t15._fld19684_n, t15._fld19684_rrref, t15._fld19685, t15._fld19686, t15._fld38586rref
                          Index Cond: ((t15._fld1173 = '0'::numeric) AND (t15._document627_idrref = t8._fld25921_rrref))
                          Filter: ((t8._fld25920rref = t15._fld19680rref) AND (t8._fld25919rref = t15._fld19681rref))
                          Rows Removed by Filter: 2
                          Buffers: shared hit=6
              ->  Index Scan using _document627_vt19687_skx1 on public._document627_vt19687x1 t16  (cost=0.12..0.39 rows=1 width=56) (actual time=0.003..0.003 rows=0 loops=4)
                    Output: t16._document627_idrref, t16._fld1173, t16._keyfield, t16._lineno19688, t16._fld19689rref, t16._fld19690rref, t16._fld19691, t16._fld19692rref, t16._fld19693rref, t16._fld19694_type, t16._fld19694_n, t16._fld19694_rrref, t16._fld19695, t16._fld19696, t16._fld19697_type, t16._fld19697_rtref, t16._fld19697_rrref, t16._fld19698, t16._fld38587rref
                    Index Cond: ((t16._fld1173 = '0'::numeric) AND (t16._document627_idrref = t8._fld25921_rrref))
                    Filter: ((t8._fld25920rref = t16._fld19689rref) AND (t8._fld25919rref = t16._fld19690rref))
                    Buffers: shared hit=8
        ->  Index Scan using _reference137_s_hpk on public._reference137 t17  (cost=0.11..0.13 rows=1 width=34) (actual time=0.002..0.002 rows=1 loops=4)
              Output: t17._idrref, t17._version, t17._marked, t17._predefinedid, t17._parentidrref, t17._folder, t17._code, t17._description, t17._fld3600, t17._fld3615rref, t17._fld3601rref, t17._fld3599, t17._fld3603, t17._fld3604, t17._fld3605rref, t17._fld3606rref, t17._fld3607rref, t17._fld3608rref, t17._fld3609rref, t17._fld3610rref, t17._fld3611rref, t17._fld3612rref, t17._fld35461rref, t17._fld3613rref, t17._fld3614rref, t17._fld3616, t17._fld3617, t17._fld3618, t17._fld3619, t17._fld3620, t17._fld3621, t17._fld35462rref, t17._fld3623, t17._fld3602rref, t17._fld28360rref, t17._fld29737, t17._fld29738, t17._fld29784rref, t17._fld29789rref, t17._fld3622, t17._fld3624rref, t17._fld31627rref, t17._fld59074rref, t17._fld36820, t17._fld38596rref, t17._fld46618, t17._fld46619, t17._fld46620, t17._fld46621, t17._fld46622, t17._fld46623, t17._fld46624, t17._fld46625, t17._fld46626, t17._fld46627, t17._fld46628rref, t17._fld49235, t17._fld49236, t17._fld46883, t17._fld46884, t17._fld49816, t17._fld47837, t17._fld58201, t17._fld58202, t17._fld58203, t17._fld58204, t17._fld58205, t17._fld58206, t17._fld58207, t17._fld58208, t17._fld58209, t17._fld58210, t17._fld58211, t17._fld1173
              Index Cond: ((t17._fld1173 = '0'::numeric) AND (t17._idrref = t8._fld25919rref))
              Buffers: shared hit=12
Planning:
  Buffers: shared hit=4
Planning Time: 24.753 ms
Execution Time: 723.903 ms
",RowsAffected=4 
Показать


Для ЛОЖЬ консоль запросов вывалилась с ошибкой на запрос отразить план запроса.
Количество строк вызвращаемых при ЛОЖЬ = 0
15. Gilev.Vyacheslav 1912 20.12.23 21:31 Сейчас в теме
(7) "При запросе Истина, ответ через 0,7 сек, при Ложь 700 сек."
1. план ваш не смотрел, много времени копаться нет
2. Ну если у вас большое количество записей, а нужного индекса нет, то предпложу что происходит сканирование таблицы
для ИСТИНЫ записи быстро находятся, видимо их немного, а остальные записи с ложью и перебирается вся таблица
тут время будет пропорционально размеру
в более поздних версиях платформы изменился механизм "AQO — адаптивная оптимизация запросов", можете попробовать его тупо выключить , подробнее https://postgrespro.ru/docs/postgrespro/14/aqo
DROP EXTENSION aqo;
SELECT aqo_reset();
и возможно удалить строчку
shared_preload_libraries = 'aqo'
из файла postgresql.conf.
3. Также появился "параллелизм". Посмотрите его внимательней. Если там настроено на многопоточку, то настройте ради эксперимента на один поток. Хотя кажется что маловероятно дело в этом, визуально в плане не многопоточка не бросается сходу в глаза.
ALTER SYSTEM SET max_parallel_workers_per_gather TO 1; --2 это дефолтовое значение
-- значение 0 означает что не будет параллелизма, чем больше конкуренции за ресусры, больше блокировок,
-- ем выше загруженность процессора, тем меньше это значение. При одном пользователи значение будет максимальным.
-- Можно также пробовать при закрытии месяца, реструкторизации, загрузке dt в один поток 1с разрешать большие значения.
-- При многопоточной загрузке dt 1С наоборот отключать ставя 0.
ALTER SYSTEM SET max_parallel_workers TO 1;--8 - дефолтовое значение
-- рекомендуется подбирать настройку смотря на загруженность процессора, при загруженности меньше 30%
--пробуйте добавить пару ядер, перечитать настройки и оценить новую загруженность
ALTER SYSTEM SET max_worker_processes TO 1;--8 - дефолтовое значение
--обычно совпадает max_parallel_workers
ALTER SYSTEM SET parallel_leader_participation TO off;-- поумолчанию включен
-- есть смысл отключать только по указанию программиста, степень положительного или отрицательного влияния
-- ведущего зависит от типа плана запроса, числа рабочих процессов и длительности запроса.
17. user1348696 22.12.23 09:18 Сейчас в теме
(15)
Модуль AQO не устанавливался.
Значения по дефолту для:
max_parallel_workers_per_gather,
max_parallel_workers,
max_worker_processes
parallel_leader_participation
4. ActionBlog 20.12.23 13:53 Сейчас в теме
А вопрос-то в чем? Вы просто поделиться горем решили?
6. user1348696 20.12.23 13:58 Сейчас в теме
(4)
вопрос был:
Чем обусловлена ситуация - мы не умеем тюнить постгес или в свежих редакциях что то сломалось?
Могу сообщить любой параметр конфигурации SQL сервера
8. VmvLer 20.12.23 14:54 Сейчас в теме
зачем эти простыни со спецификой соединений?

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

ВЫБРАТЬ
   Т.Ставка КАК Ставка
ИЗ
    РегистрСведений.АР_СтатусыОбъектовАренды.СрезПоследних(
            &МоментВремени,
            ЗаключениеДоговора = &ЗаключениеДоговора
                И Услуга.АР_ПостояннаяЧастьОплаты = &ПостояннаяЧасть) КАК Т


Если в этом блоке все Ок вне зависимости от параметра, то тогда ныряем в дебри
11. user1348696 20.12.23 15:04 Сейчас в теме
(8)
все Ок вне зависимости от параме

ВЫБРАТЬ
	АР_СтатусыОбъектовАрендыСрезПоследних.ОбъектАренды КАК ОбъектАренды
ИЗ
	РегистрСведений.АР_СтатусыОбъектовАренды.СрезПоследних(
			&МоментВремени,
			Договор.КС_ДоговорАренды = &ДоговорАренды 
			И  Услуга.АР_ПостояннаяЧастьОплаты   = &ПостояннаяЧастьОплаты) КАК АР_СтатусыОбъектовАрендыСрезПоследних

При любом параметре запрос работает Ок

И Услуга.АР_ПостояннаяЧастьОплаты) КАК Т

И
И НЕ Услуга.АР_ПостояннаяЧастьОплаты) КАК Т

так же запрос отрабатывает без проблем
9. Captain_Pan 20.12.23 14:54 Сейчас в теме
10. VmvLer 20.12.23 14:58 Сейчас в теме
Я бы исследовал пару подзапросов, а уже потом с параметром

ВЫБРАТЬ
   Т.Ставка КАК Ставка
ИЗ
    РегистрСведений.АР_СтатусыОбъектовАренды.СрезПоследних(
            &МоментВремени,
            ЗаключениеДоговора = &ЗаключениеДоговора
                И Услуга.АР_ПостояннаяЧастьОплаты) КАК Т

;

ВЫБРАТЬ
   Т.Ставка КАК Ставка
ИЗ
    РегистрСведений.АР_СтатусыОбъектовАренды.СрезПоследних(
            &МоментВремени,
            ЗаключениеДоговора = &ЗаключениеДоговора
                И НЕ Услуга.АР_ПостояннаяЧастьОплаты) КАК Т
Показать
12. VmvLer 20.12.23 15:17 Сейчас в теме
(11) Создать временные таблицы срезов(создать индексы по необходимости) и потом их соединять что-то мешает в постгресе?
ansh15; starik-2005; +2 Ответить
13. user1348696 20.12.23 15:26 Сейчас в теме
(12)
т в пост

Это можно сделать на стороне конфигурации 1С?
(12)
16. Said-We 21.12.23 00:25 Сейчас в теме
(13)И вот это условие сделать до соединения временных таблиц, которые Вы в консоли будете пробовать.
ГДЕ
    СтатусыОбъектовАренды.ДатаНачалаАренды < &ДатаОкончания

РегистрСведений.АР_Ставки есть "Услуга", есть связь с "СтатусыОбъектовАренды.Услуга", но условия на услугу в срезе ставок нет. Почему?
Услуга - это наверняка относительно не большой справочник. Можно сразу получить все нужные и условие поменять на "Услуга В (Выбрать т.Ссылка из Справочник.Услуги как т ГДЕ...)
14. VmvLer 20.12.23 16:02 Сейчас в теме
(13) сначала в консоли запросов (в приложении)
19. starik-2005 3039 22.12.23 10:34 Сейчас в теме
Странно, что выделить два среза последних во временные таблицы предложили так мало раз, хотя вроде бы очевидное решение.

А то, что проблема решена заменой софта, - ну это такое себе решение.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот