172 похожих чатов

Всем привет! EXPLAIN SELECT "idx" FROM "geometries" WHERE "geometry" && ST_GeomFromText('POLYGON

(...)', 4326) ORDER BY "idx" DESC LIMIT 100;

Limit (cost=0.57..324664.77 rows=100 width=8)
-> Index Scan Backward using geometries_pkey on geometries (cost=0.57..591612854.78 rows=182223 width=8)
Filter: (geom && '0103000020E6100000010000000500000040C0AA1AE65BF2BF6FABA2F85DB7454040C0AA1AE65BF2BF647D72A327404640AC433F9B2A31EB3F647D72A327404640AC433F9B2A31EB3F6FABA2F85DB7454040C0AA1AE65BF2BF6FABA2F85DB74540'::geometry)
Вот такой запрос вместо индекса по геометрии берет индекс по pk, но в виду наличия фильтра видимо превращается в полный скан таблицы (работает очень медленно). Правильно было бы убрать просто ORDER BY чтобы использовался индекс по геометрии, но сам запрос формируется geoserver-ом и поправить его нельзя. Можно ли как-то зафорсить postgres-у юзать индекс по геометрии?

16 ответов

29 просмотров

Для начала — проверьте, что дело в order by , и без него (и, отдельно, без лимита ) запрос отработает по индэксу. Ну, и https://t.me/pgsql/303899

Хм. Теперь понятно. Да, опять дурацкая ситуацыя — планировщик считает данные некореллированными, а реально они там все в концэ индэкса лежат. А нельзя заставить там limit=500 сказать этому приложэнию? Ну, если нет — то можно опустить (втрое-вчетверо) оба page_cost: и seq и random. Тожэ должно проломить дурака.

Alexander-Verbitsky Автор вопроса

А, кстати, банальный вопрос — а параметры сервера из какого-нибудь конфигуратора типа cybertec применили? А то вдруг у вас там random_page_cost=4 на ssd...

Alexander-Verbitsky Автор вопроса
Ilya Anfimov
А, кстати, банальный вопрос — а параметры сервера ...

Нет не в курсе про cybertec - надо глянуть что это такое. Вполне возможно

Alexander-Verbitsky Автор вопроса
Ilya Anfimov
Два вопроса: там SSD? И show random_page_cost;

Amazon gp2, да под капотом SSD и random_page_cost именно 4 сейчас выставлен

Alexander-Verbitsky Автор вопроса
Ilya Anfimov
Два вопроса: там SSD? И show random_page_cost;

EXPLAIN (ANALYZE, BUFFERS) SELECT "idx" FROM "public"."geometries" WHERE "geometry" && ST_GeomFromText('POLYGON ((-1.147436241310075 43.4325552744184, -1.147436241310075 44.5012096699745 4, 0.8497517616434513 44.50120966997454, 0.8497517616434513 43.4325552744184, -1.147436241310075 43.4325552744184))', 4326) ORDER BY "idx" DESC LIMIT 500; Limit (cost=964870.82..964872.07 rows=500 width=8) (actual time=481.608..482.641 rows=500 loops=1) Buffers: shared hit=9851 read=27246 -> Sort (cost=964870.82..965464.26 rows=237376 width=8) (actual time=481.604..481.971 rows=500 loops=1) Sort Key: idx DESC Sort Method: top-N heapsort Memory: 60kB Buffers: shared hit=9851 read=27246 -> Index Scan using geometries_geom_idx on geometries (cost=0.55..953042.63 rows=237376 width=8) (actual time=0.343..325.720 rows=165633 loops=1) Index Cond: (geometry && '0103000020E6100000010000000500000040C0AA1AE65BF2BF6FABA2F85DB7454040C0AA1AE65BF2BF647D72A327404640AC433F9B2A31EB3F647D72A327404640AC433F9B2A31EB3F6FABA2F85DB7454040C0AA1AE 65BF2BF6FABA2F85DB74540'::geometry) Buffers: shared hit=9851 read=27246 Planning Time: 0.348 ms Execution Time: 483.017 ms (11 rows) увеличение лимита реально помогло

Alexander Verbitsky
Amazon gp2, да под капотом SSD и random_page_cost ...

Тогда банально настройте сервер по рекомендацыям — всё станет заметно легче. В частности, вероятно именно эта проблема уйдёт. Но, кстати, если вы в начале пути — то самое время поставить 14.2

Alexander-Verbitsky Автор вопроса
Ilya Anfimov
Тогда банально настройте сервер по рекомендацыям —...

Спасибо большое! Планируем в RDS все перенести. А что за рекомендации имеется в виду?

Alexander Verbitsky
Amazon gp2, да под капотом SSD и random_page_cost ...

gp2 вас покусает тем что в один прекрасный день вы не сможете снять бекап, посмотрите как минимум на io1

Alexander-Verbitsky Автор вопроса
Darafei Praliaskouski
gp2 вас покусает тем что в один прекрасный день вы...

Не знал, спасибо буду иметь в виду. Хотя тут не сильно критично ибо исходные данные у нас в gpkg лежат и всегда можно из них восстановиться.

Alexander Verbitsky
Спасибо большое! Планируем в RDS все перенести. А ...

Имелось в виду — настройки вроде http://pgconfigurator.cybertec.at/ или какого другого вменяемого конфигуратора. Там из действительно важных — shared_buffers, random_page_cost, что-то про workers и effective_cash_size. Немного. Но полезно. Да и остальные оттуда невредно.

Alexander-Verbitsky Автор вопроса
Alexander-Verbitsky Автор вопроса
Ilya Anfimov
Имелось в виду — настройки вроде http://pgconfigur...

Поднятие limit-а не для всех запросов помогает надо сказать.

Alexander Verbitsky
Поднятие limit-а не для всех запросов помогает над...

Отправляйте анализ запросов, будем думать. Но сначала — конфигуратор. Собственно, можэте попробовать set random_page_cost=1 — для этого запроса ужэ должно сработать.

Похожие вопросы

Обсуждают сегодня

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта