|
postgesql долго выполняет запрос срез последних | ☑ | ||
---|---|---|---|---|
0
Rokstedi
15.09.20
✎
12:11
|
Добрый день, подскажите может кто сталкивался, конфигурация УПП, запрос к регистру цены нмоенклатуры(срез последних) с отбором по типу цен, в результате 15к записей, запрос выполняется 4минуты.
|
|||
1
mikecool
15.09.20
✎
12:12
|
админ нужен грамотный
|
|||
2
Salimbek
15.09.20
✎
12:36
|
(0) В случае с постгре - очень многое зависит и от версии УПП и от версии Платформы 1С и от версии самого постгре
|
|||
3
Cyberhawk
15.09.20
✎
12:38
|
А теперь попробуй выполнить этот же запрос без использования среза последних
|
|||
4
Rokstedi
15.09.20
✎
12:47
|
(3) хм, моментально выполняется
|
|||
5
Rokstedi
15.09.20
✎
12:47
|
(3) в чем прикол?
|
|||
6
timurhv
15.09.20
✎
12:54
|
(0) регистратор чтоли вытаскиваете?
|
|||
7
alkorolev
15.09.20
✎
13:02
|
(0) левое соединение со СрезомПоследних?
|
|||
8
Rokstedi
15.09.20
✎
13:03
|
(6) нет (7) нет. Просто срез последних одного регистра
|
|||
9
Cyberhawk
15.09.20
✎
13:04
|
(4) Покажи текст моментально выполнившегося запроса
|
|||
10
Rokstedi
15.09.20
✎
13:07
|
ВЫБРАТЬ
ЦеныНоменклатурыСрезПервых.Номенклатура, ЦеныНоменклатурыСрезПервых.ТипЦен, ЦеныНоменклатурыСрезПервых.ХарактеристикаНоменклатуры, ЦеныНоменклатурыСрезПервых.Валюта, ЦеныНоменклатурыСрезПервых.Цена, ЦеныНоменклатурыСрезПервых.ЕдиницаИзмерения, ЦеныНоменклатурыСрезПервых.ПроцентСкидкиНаценки, ЦеныНоменклатурыСрезПервых.СпособРасчетаЦены ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатурыСрезПервых ГДЕ ЦеныНоменклатурыСрезПервых.ТипЦен = &ТипЦен |
|||
11
Seriy_Volk
15.09.20
✎
13:09
|
(4) была похожая проблема на старых релизах в процедуре
ПроверитьДопустимостьЦенОтпуска(ДокументОбъект, ИмяТабличнойЧасти, Отказ) Экспорт на тот момент выкрутились изменением условия в запросе вместо | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза, ТипЦен = &ТипЦен" + НомерТипаЦен + ") КАК ЦеныКомпании" + НомерТипаЦен + " нужно | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза, ТипЦен = &ТипЦен" + НомерТипаЦен + " и Номенклатура в (&списокНоменклатуры)) КАК ЦеныКомпании" + НомерТипаЦен + " |
|||
12
Rokstedi
15.09.20
✎
13:17
|
ТТИ со всеми галочками ситуацию не исправило
|
|||
13
Rokstedi
15.09.20
✎
13:18
|
* тестирование и исправление
|
|||
14
Rokstedi
15.09.20
✎
13:20
|
как вариант попробую еще платформу обновить вечером
|
|||
15
ansh15
15.09.20
✎
13:21
|
(12) И не исправит. https://its.1c.ru/db/metod8dev/content/4208/hdoc
Теме 10 лет уже. |
|||
16
palsergeich
15.09.20
✎
13:21
|
судя по симптомам - стоит попробовать это
http://catalog.mista.ru/1c/articles/1023353/ |
|||
17
palsergeich
15.09.20
✎
13:22
|
(15) Там речь о соединении.
а в старте просто о получении. |
|||
18
Надо работать
15.09.20
✎
13:24
|
Обычный срез последних регистра сведений - вычисляемая штука, если не поставить нужную галочку в конфигураторе
|
|||
19
palsergeich
15.09.20
✎
13:26
|
(18) Это если не нужен срез на указанную дату
|
|||
20
Voronve
15.09.20
✎
13:43
|
(0) Пользуйся временными таблицами
Будет быстро и пофигу на на чем там БД крутиться и на галки в конфигураторах ВЫБРАТЬ РАЗРЕШЕННЫЕ ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.ХарактеристикаНоменклатуры, МАКСИМУМ(ЦеныНоменклатуры.Период) ПОМЕСТИТЬ втПериоды ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ГДЕ ЦеныНоменклатуры.ТипЦен = &ТипЦен СГРУППИРОВАТЬ ПО ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.ХарактеристикаНоменклатуры ; ВЫБРАТЬ РАЗРЕШЕННЫЕ втПериоды.Номенклатура, втПериоды.ХарактеристикаНоменклатуры, втПериоды.Период, втПериоды.Цена ИЗ втПериоды КАК втПериоды ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО ЦеныНоменклатуры.Номенклатура= втПериоды.Номенклатура И ЦеныНоменклатуры.ХарактеристикаНоменклатуры= втПериоды.ХарактеристикаНоменклатуры И ЦеныНоменклатуры.Период = втПериоды.Период |
|||
21
Rokstedi
15.09.20
✎
13:50
|
(17) Почитал, у меня random_page_cost=1.1 seq_page_cost=1, попробую вечером поиграться с этими параметрами
|
|||
22
Rokstedi
15.09.20
✎
13:50
|
(20) да, так норм работает
|
|||
23
DEVIce
15.09.20
✎
14:02
|
(22) Тебе еще в (7) написали, а ты ответил что нет, а оказывается что да. PG не любит соединения с вложенными запросами, а виртуальные функции именно их и генерируют, особенно срезы РС. Ты напиши реализацию среза сам и подивись на этого монстра.
|
|||
24
Rokstedi
15.09.20
✎
14:05
|
(23) так вот человек в (20) и написал свою реализацию среза последних, немного поправил и работает норм
|
|||
25
DEVIce
15.09.20
✎
14:06
|
(24) Можно было и не писать свою реализацию. Достаточно во временную таблицу помесить именно срез последних и соединяться уже с ней.
|
|||
26
DEVIce
15.09.20
✎
14:08
|
+(25) Короче, срезы использовать можно, но не надо с ними соединяться в запросе - получаем результат среза во временную таблицу и с ней соединяемся.
|
|||
27
nicxxx
15.09.20
✎
15:30
|
PREDICATE PUSHDOWN
Постгрес не проталкивает условия с "верхнего" запроса "вниз", поэтому срез строится по всем ценам. В MSSQL все ОК, запрос выполяется моментально. http://catalog.mista.ru/1c/articles/880836/ комментарий 94 |
|||
28
alkorolev
15.09.20
✎
18:29
|
(10) очевидно же, что в индекс не попадаете. Условие по номенклатуре наложить нельзя?
|
|||
29
Rokstedi
27.10.20
✎
17:05
|
(16) попробовал, не помогло. Утомился уже городить трехметровые запросы, наверное вернемся на MSSQL
|
|||
30
ansh15
28.10.20
✎
01:11
|
Люди и для MS SQL это делают http://catalog.mista.ru/1c/articles/980323/
Также некоторая формализация предлагается. |
|||
31
ansh15
28.10.20
✎
01:36
|
(30) - как дополнение к тому, что было сказано здесь ранее, а то у автора темы уже капитулянтское настроение, MS SQL...
|
|||
32
zaki
17.11.20
✎
14:51
|
(0) Решается PostgreSQL 12 версии от postgrespro и исполнении кода в базе:
DO $$ DECLARE txt text; BEGIN FOR txt IN SELECT 'DROP INDEX ' || relname || '; ' || pg_get_indexdef(relname::regclass)||';' as ddl FROM pg_catalog.pg_class WHERE relkind = 'i' and relname like '_inforg%_bydims' LOOP EXECUTE txt; END LOOP; END; $$ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |