|
v8: Пациент жалуется не то на постгрес, не то на 1С | ☑ | ||
---|---|---|---|---|
0
ask76
15.04.13
✎
11:22
|
Исходные:
Платформа 8.2.17.153, Конфигурация УПП 1.3.31.1 Сервер 1С:Предприятие на CentOS 5.9 x86 Сервер SQL Postgresql 9.1 на CentOS 5.9 x64 Используется RLS по организациям. Проблема: Трансляция запроса ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2 ДоговорыКонтрагентов.Ссылка КАК Договор ИЗ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов ГДЕ (НЕ ДоговорыКонтрагентов.ПометкаУдаления) И ДоговорыКонтрагентов.Организация = &ПарОрганизация И ДоговорыКонтрагентов.Владелец = &ПарКонтрагент И (ВЫБОР КОГДА ДоговорыКонтрагентов.Владелец.ОсновнойДоговорКонтрагента.Организация = &ПарОрганизация ТОГДА ДоговорыКонтрагентов.Ссылка = ДоговорыКонтрагентов.Владелец.ОсновнойДоговорКонтрагента ИНАЧЕ ДоговорыКонтрагентов.Ссылка <> ДоговорыКонтрагентов.Владелец.ОсновнойДоговорКонтрагента КОНЕЦ) из процедуры ПолучитьДоступныеДоговорыКонтрагента из общего модуля ЗаполнениеДокументов в запрос postgresql приводит к запросу вида ВЫБРАТЬ ПЕРВЫЕ 2 Договоры1.Ссылка ИЗ Справочники.ДоговорыКонтрагентов КАК Договоры1 ЛЕВОЕ СОЕДИНЕНИЕ Справочники.Контрагенты КАК Контрагенты2 ПО Договоры1.Владелец = Контрагенты2.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Договоры4.Ссылка КАК Ссылка, Договоры4.Организация КАК Организация ИЗ Справочники.ДоговорыКонтрагентов КАК Договоры4) КАК Договоры3 ПО (Контрагенты2.ОсновнойДоговорКонтрагента = Договоры3.Ссылка) я убрал здесь все условия, оставив только джойны и переименовал таблицы/поля в соответствии с представлением 1С. Можно видеть что у второго джойна неправильное условие соединение, благодаря которому на базе с таблицей договоров порядка 11000 записей запрос отрабатывает несколько секунд, за счет, фактически, декартового произведения таблиц. План запроса можно посмотреть здесь: http://explain.depesz.com/s/BxC Вопрос: в каком месте происходит неправильный парсинг запроса - на сервере 1С:Предприятие или сам postgres уже тупит? |
|||
1
cw014
15.04.13
✎
11:24
|
Скажи на милось, зачем тебе ЭТО???
|
|||
2
ask76
15.04.13
✎
11:27
|
ой... заголовок-то и забыл написать. Я криво сформулировал вопрос?
|
|||
3
Лефмихалыч
15.04.13
✎
11:29
|
(2) ты вообще его не сформулировал
|
|||
4
sikuda
15.04.13
✎
11:30
|
Ну сколько можно говорить: 1C практически ничего не сделала, чтобы Postgrasql у нее заработал нормально. Сделали для галочки в листовке + бесплатная sql...
|
|||
5
ask76
15.04.13
✎
11:32
|
Попробую переформулировать. По логам postgres я вижу, что запрос на языке 1С неправильно парсится в запрос на языке postgres. Вопрос: кто виноват, сервер предприятия 1С или сам postgres? Точнее, кто из них обрабатывает слово "РАЗРЕШЕННЫЕ" в запросе?
|
|||
6
Fragster
гуру
15.04.13
✎
11:34
|
вот нафига????
ДоговорыКонтрагентов.Владелец.ОсновнойДоговорКонтрагента.Организация |
|||
7
ask76
15.04.13
✎
11:38
|
(6) Это я хз. Такой вот запрос.
|
|||
8
ansh15
15.04.13
✎
15:27
|
(5) Думается, что PostgreSQL в принципе не понимает слово РАЗРЕШЕННЫЕ, поэтому, наверное, 1С выступает в качестве транслятора.
Несколько секунд, это неприемлемо много? Исправят со временем... |
|||
9
Fragster
гуру
15.04.13
✎
15:28
|
а все дело не в кривых шаблонах и кривом запросе?
|
|||
10
ask76
15.04.13
✎
15:51
|
(8) Нет, неприемлемо, к сожалению. Этот запрос вызывается при подборе основного договора при выборе контрагента в счете на оплату. Если после этого попытаться сменить договор, то система виснет уже на полторы-две минуты, т.к. там уже десять соединений. Клиент может и не дождаться.
(9) Это все типовое, под полными правами нормально работает и на pgsql и на mssql. А под обычным юзером, с ограничением по организации, - mssql нормально отрабатывает, pgsql тупит. База здоровая и времени на перебор всех вариантов просто нет. Поэтому хотелось бы экспериментировать более-менее осознанно. |
|||
11
ansh15
15.04.13
✎
16:52
|
(10) Попробуйте в качестве эксперимента поиграться параметрами в секции "Planner Method Configuration" postgresql.conf,
enable_nestloop = off или enable_mergejoin = off, например, оптимизатор будет тогда пытаться найти другой путь построения запроса, может поможет. |
|||
12
eses
15.04.13
✎
16:57
|
Мой совет : не используй postgres , это как joomla или как ненастроенный линукс или как литовская иномарка в россии
|
|||
13
eses
15.04.13
✎
16:58
|
как вообще с БД можно играться, должно работать как часы, а тут : сделай это, сделай то - может быть поможет
|
|||
14
Hmster
15.04.13
✎
16:59
|
тебе дело сказали про
ДоговорыКонтрагентов.Владелец.ОсновнойДоговорКонтрагента.Организация попробуй нормально переписать запрос |
|||
15
Fragster
гуру
15.04.13
✎
16:59
|
(13) т.е. то, что надо намазывать РЛС на 3-е вложенное левое соединение - не смущает? я про ДоговорыКонтрагентов.Владелец.ОсновнойДоговорКонтрагента.Организация
|
|||
16
MaxisUssr
15.04.13
✎
17:05
|
(0)
А какой запрос Postgre генерит? Заметил, что Postgre обличает кривые запросы (по крайней мере мои - обличал не раз, доставил тысячи мучений, после переписки запросов, которые на Sql летали бы - все становилось ОК). |
|||
17
andreynikus
15.04.13
✎
19:23
|
(0) Стандартная ошибка в запросе - соединение с подзапросом.
Перепиши с использованием временных таблиц и возможно этого будет достаточно. Ну или ПОНЯТЬ зачем нужен этот запрос, какую задачу он решает и переписать его по нормальному |
|||
18
andreynikus
15.04.13
✎
19:29
|
(10) Обычное дело когда mssql нормально обрабатывает сложные запросы, т.к. его оптимизатор любой кривой запрос старается вытянуть, но это конечно не освобождает от правильного написания запросов.
При это многие другие субд в том числе pgsql и oracle не заморачиваются со сложными запросами и выбирают для них жуткие планы исполнения. |
|||
19
ask76
17.04.13
✎
08:25
|
В общем проблема решилась откатом postgresql с 9.1 на 8.3.8 - запросы postgres генерит действительно разные и в восьмой версии их нормально отрабатывает. Таким образом, postgresql 9.1 и RLS - вещи не совместимые на данный момент.
|
|||
20
ask76
17.04.13
✎
08:27
|
(17) Совет был бы полезен, если б это была самописная конфигурация, но мы работаем с типовой УПП и переписывать каждый запрос, где в типовом коде присутствует слово "РАЗРЕШЕННЫЕ" - нет, я к этому не готов.
|
|||
21
ask76
17.04.13
✎
08:30
|
(16) запрос здесь - http://pastebin.com/G7E5STxq
|
|||
22
Fragster
гуру
17.04.13
✎
08:33
|
ну так оно 4 раза РЛС присоединяет
|
|||
23
Sammo
17.04.13
✎
08:53
|
(20) Тогда расслабтесь и получайте удовольствие.
|
|||
24
andreynikus
17.04.13
✎
18:25
|
(20) Разработчики УПП к сожалению тоже совершают ошибки
Возможно в новой версии эти запросы поправят, хотя наверняка наделают новых :) Если лень исправлять тогда конечно (20) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |