Вход | Регистрация
 

postgesql долго выполняет запрос срез последних

postgesql долго выполняет запрос срез последних
Я
   Rokstedi
 
15.09.20 - 12:11
Добрый день, подскажите может кто сталкивался, конфигурация УПП, запрос к регистру цены нмоенклатуры(срез последних) с отбором по типу цен, в результате 15к записей, запрос выполняется 4минуты.
   mikecool
 
1 - 15.09.20 - 12:12
админ нужен грамотный
   Salimbek
 
2 - 15.09.20 - 12:36
(0) В случае с постгре - очень многое зависит и от версии УПП и от версии Платформы 1С и от версии самого постгре
   Cyberhawk
 
3 - 15.09.20 - 12:38
А теперь попробуй выполнить этот же запрос без использования среза последних
   Rokstedi
 
4 - 15.09.20 - 12:47
(3) хм, моментально выполняется
   Rokstedi
 
5 - 15.09.20 - 12:47
(3) в чем прикол?
   timurhv
 
6 - 15.09.20 - 12:54
(0) регистратор чтоли вытаскиваете?
   alkorolev
 
7 - 15.09.20 - 13:02
(0) левое соединение со СрезомПоследних?
   Rokstedi
 
8 - 15.09.20 - 13:03
(6) нет (7) нет. Просто срез последних одного регистра
   Cyberhawk
 
9 - 15.09.20 - 13:04
(4) Покажи текст моментально выполнившегося запроса
   Rokstedi
 
10 - 15.09.20 - 13:07
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПервых.Номенклатура,
    ЦеныНоменклатурыСрезПервых.ТипЦен,
    ЦеныНоменклатурыСрезПервых.ХарактеристикаНоменклатуры,
    ЦеныНоменклатурыСрезПервых.Валюта,
    ЦеныНоменклатурыСрезПервых.Цена,
    ЦеныНоменклатурыСрезПервых.ЕдиницаИзмерения,
    ЦеныНоменклатурыСрезПервых.ПроцентСкидкиНаценки,
    ЦеныНоменклатурыСрезПервых.СпособРасчетаЦены
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатурыСрезПервых
ГДЕ
    ЦеныНоменклатурыСрезПервых.ТипЦен = &ТипЦен
   Seriy_Volk
 
11 - 15.09.20 - 13:09
(4) была похожая проблема на старых релизах в процедуре
ПроверитьДопустимостьЦенОтпуска(ДокументОбъект, ИмяТабличнойЧасти, Отказ) Экспорт

на тот момент выкрутились изменением условия в запросе
вместо
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза, ТипЦен = &ТипЦен" + НомерТипаЦен + ") КАК ЦеныКомпании" + НомерТипаЦен + "
нужно
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза, ТипЦен = &ТипЦен" + НомерТипаЦен +  " и Номенклатура в (&списокНоменклатуры)) КАК ЦеныКомпании" + НомерТипаЦен + "
   Rokstedi
 
12 - 15.09.20 - 13:17
ТТИ со всеми галочками ситуацию не исправило
   Rokstedi
 
13 - 15.09.20 - 13:18
* тестирование и исправление
   Rokstedi
 
14 - 15.09.20 - 13:20
как вариант попробую еще платформу обновить вечером
   ansh15
 
15 - 15.09.20 - 13:21
(12) И не исправит. https://its.1c.ru/db/metod8dev/content/4208/hdoc
Теме 10 лет уже.
   palsergeich
 
16 - 15.09.20 - 13:21
судя по симптомам - стоит попробовать это
http://catalog.mista.ru/1c/articles/1023353/
   palsergeich
 
17 - 15.09.20 - 13:22
(15) Там речь о соединении.
а в старте просто о получении.
   Надо работать
 
18 - 15.09.20 - 13:24
Обычный срез последних регистра сведений - вычисляемая штука, если не поставить нужную галочку в конфигураторе
   palsergeich
 
19 - 15.09.20 - 13:26
(18) Это если не нужен срез на указанную дату
   Voronve
 
20 - 15.09.20 - 13:43
(0) Пользуйся временными таблицами
Будет быстро и пофигу на на чем там БД крутиться и на галки в конфигураторах
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.ХарактеристикаНоменклатуры,
    МАКСИМУМ(ЦеныНоменклатуры.Период)
ПОМЕСТИТЬ втПериоды
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
    ЦеныНоменклатуры.ТипЦен = &ТипЦен
СГРУППИРОВАТЬ ПО
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.ХарактеристикаНоменклатуры
;

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    втПериоды.Номенклатура,
    втПериоды.ХарактеристикаНоменклатуры,
    втПериоды.Период,
    втПериоды.Цена
ИЗ
    втПериоды КАК втПериоды
    
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    ПО ЦеныНоменклатуры.Номенклатура= втПериоды.Номенклатура
        И ЦеныНоменклатуры.ХарактеристикаНоменклатуры= втПериоды.ХарактеристикаНоменклатуры
        И ЦеныНоменклатуры.Период = втПериоды.Период
   Rokstedi
 
21 - 15.09.20 - 13:50
(17) Почитал, у меня random_page_cost=1.1 seq_page_cost=1, попробую вечером поиграться с этими параметрами
   Rokstedi
 
22 - 15.09.20 - 13:50
(20) да, так норм работает
   DEVIce
 
23 - 15.09.20 - 14:02
(22) Тебе еще в (7) написали, а ты ответил что нет, а оказывается что да. PG не любит соединения с вложенными запросами, а виртуальные функции именно их и генерируют, особенно срезы РС. Ты напиши реализацию среза сам и подивись на этого монстра.
   Rokstedi
 
24 - 15.09.20 - 14:05
(23) так вот человек в (20) и написал свою реализацию среза последних, немного поправил и работает норм
   DEVIce
 
25 - 15.09.20 - 14:06
(24) Можно было и не писать свою реализацию. Достаточно во временную таблицу помесить именно срез последних и соединяться уже с ней.
   DEVIce
 
26 - 15.09.20 - 14:08
+(25) Короче, срезы использовать можно, но не надо с ними соединяться в запросе - получаем результат среза во временную таблицу и с ней соединяемся.
   nicxxx
 
27 - 15.09.20 - 15:30
PREDICATE PUSHDOWN
Постгрес не проталкивает условия с "верхнего" запроса "вниз", поэтому срез строится по всем ценам.
В MSSQL все ОК, запрос выполяется моментально.
http://catalog.mista.ru/1c/articles/880836/
комментарий 94
   alkorolev
 
28 - 15.09.20 - 18:29
(10) очевидно же, что в индекс не попадаете. Условие по номенклатуре наложить нельзя?


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