|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
||||||||||||||||
Разный план запроса в консоли и JDBC31.10.2023, 12:05. Показов 2134. Ответов 29
Метки нет (Все метки)
Добрый день!
Столкнулся с такой ситуацией, использую Postgresql PRO Ent 11.7 Есть запрос вида: Кликните здесь для просмотра всего текста
Если запускать запрос из консоли, отрабатывает быстро, его план: Кликните здесь для просмотра всего текста
Но если запрос приходит с бекенда, время выполнения его сильно увеличивается и план другой: Кликните здесь для просмотра всего текста
Не могу понять, почему план меняется. Я понимаю, что какие-то параметры могли быть предопределены в драйвере JDBC, но какие именно? При том, что параметры драйвера точно не трогали, а проблема эта появилась недавно. Второе, как видно из медленного плана там очень долгий Index Scan по request_ts_base_datecreate_org. Пусть даже планировщик выбрал "ошибочный" индекс, почему он такой долгий? Размер индекса на 1 мегабайт всего лишь отличается. Это не единственный запрос в системе с другим планом, этот более частотный. Может есть у кого соображения на этот счет? Заранее спасибо.
0
|
||||||||||||||||
| 31.10.2023, 12:05 | |
|
Ответы с готовыми решениями:
29
Кодировка в консоли при работе с jdbc. Windows 10 Разный эффект от одного и того же запроса
|
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
||||||||||||||||
| 31.10.2023, 13:03 | ||||||||||||||||
|
В "быстром" запросе переданные значения приводятся к типу int
В "долгом" запросе
В самом запросе приведите типы данных select ..... where ..... r.id = any()::ineger
1
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
|
| 31.10.2023, 13:15 [ТС] | |
|
PaulWist, спасибо. Нет доступа к коду. Я могу индекс с приведем только подложить.
Непонятно только, почему он этого не делает при запуске через psql?
0
|
|
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
||
| 31.10.2023, 13:28 | ||
|
Начнем с того, что эти два запрос РАЗНЫЕ и сравнивать их нельзя.
В "быстром" запросе в ANY лежат конкретные значение, в "долгом" приходит параметр, то есть оптимизатор не знает сколько там значений (в параметре) и какие это значения, поэтому план строится из предположения, что пришедшие в параметре значения в "среднем" укладываются в статистику. ЗЫ запрос ORM генерит?
1
|
||
|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
|||
| 31.10.2023, 13:32 [ТС] | |||
|
0
|
|||
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
||||||||||||
| 31.10.2023, 15:07 | ||||||||||||
|
То есть
1
|
||||||||||||
|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
||||||
| 31.10.2023, 16:32 [ТС] | ||||||
|
PaulWist, понял вас.
Я пока что сделаю индекс: Кликните здесь для просмотра всего текста
Должно же помочь по идее? И все равно я не до конца понимаю, в ANY что сейчас приходит параметр, что и неделю назад. Неделю назад такого поведения не было, запрос работал за секунды. Из разработки ничего не меняли говорят, или могли не осознано поменять?
0
|
||||||
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
|||||||
| 31.10.2023, 16:58 | |||||||
|
Пальцем в небо (что бы всё взять из индекса, хотя всё равно полезет в таблицу ели карта видимости модифицирована)
И ещё в план добавьте explain (...... BUFFERS) результат в студию.
1
|
|||||||
|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
||||
| 31.10.2023, 17:42 [ТС] | ||||
|
Как понять если он недостаточно часто идет?
0
|
||||
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
|||||||||||||||
| 01.11.2023, 08:33 | |||||||||||||||
|
Локально: 1. Создайте ф-ию с этим запросом и 4 параметрами
Хрестоматийный пример, для поиска оптимального плана оптимизатору надо потратить 10 сек, в этом случае запрос выполнится за 1 сек, либо оптимизатор найдёт план за 1 сек, но такой запрос будет выполняться 5 сек, те в 5 раз дольше, НО суммарное время получение плана + выполнение будет в 2 раза меньше, поэтому план может быть кривой.
1
|
|||||||||||||||
|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
||
| 11.11.2023, 12:38 [ТС] | ||
|
PaulWist, здравствуйте. После того как создал те индексы, заработало быстрее. Но тоже не особо вариант, потому что видимо из-за добавление нового индекса, апдейты стали работать медленнее.
Или оптимизатор думает, что в этом столбце могут быть numeric значения?
0
|
||
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
|||
| 13.11.2023, 08:16 | |||
Сообщение было отмечено bsd9 как решение
РешениеВторое, существует "приоритет типов данных", то есть Если оператор сочетает выражения различных типов данных, тип данных с меньшим приоритетом сначала преобразуется в тип данных с большим приоритетом. . В соответствии с этим, numeric "выше/приоритетнее" int, поэтому колонка таблицы приводится к numtric. В ORM надо параметр привести к int. (если это возможно, либо поле изменить на numeric)
1
|
|||
|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
|||
| 13.11.2023, 13:11 [ТС] | |||
|
0
|
|||
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
||||||||
| 13.11.2023, 13:18 | ||||||||
1
|
||||||||
|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
|
| 13.11.2023, 16:55 [ТС] | |
|
0
|
|
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
||
| 14.11.2023, 09:26 | ||
|
Тут про типы драйвера в Arrays
1
|
||
|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
||
| 17.11.2023, 13:14 [ТС] | ||
|
ERROR: argument of AND must be type boolean, not type character varying Мне нужно запрос переписывать каким-то определенным образом или в принципе не сработает это?
0
|
||
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
|||||||
| 17.11.2023, 13:58 | |||||||
1
|
|||||||
|
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 118
|
|
| 17.11.2023, 17:28 [ТС] | |
|
0
|
|
|
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
|
|
| 17.11.2023, 20:40 | |
|
Да, у ПГ не такой продвинутый движок, те он не умеет делать Merge Interval.
1
|
|
| 17.11.2023, 20:40 | |
|
Помогаю со студенческими работами здесь
20
план выполнения запроса План выполнения запроса Объединить два запроса на выборку за разный период План выполнения запроса в MS Access План выполнения запроса: Выбор соединения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|