Geoserver создает медленные PSQL-запросы - PullRequest
0 голосов
/ 28 февраля 2019

Я испытываю некоторую медлительность с Geoserver + PostGIS.Фильтрация слоя требует от Geoserver огромного количества времени для рендеринга плиток.

Например, у меня есть массив идентификаторов, которые необходимо показать, поэтому я создаю CQL_FILTER, например

CQL_FILTER="id IN ('1', '2')"

IЯ проверил регистратор запросов в PSQL, и запрос выглядит так:

SELECT "objectid",encode(ST_AsBinary(ST_Force2D("the_geom")),'base64') as "the_geom" FROM "public"."table" WHERE ((("id" = '1' AND "id" IS NOT NULL ) OR ("id" = '2' AND "id" IS NOT NULL )

Конечно, мне нужно запросить сотни идентификаторов, и запрос PSQL занимает около 30 секунд.Но если я просто сделаю этот запрос:

SELECT "objectid",encode(ST_AsBinary(ST_Force2D("the_geom")),'base64') as "the_geom" FROM "public"."table" WHERE id IN ('1', '2')

, запрос завершится через ~ 1 с.Есть ли способ «оптимизировать» способ, которым GeoServer записывает запросы?

Я пытался оптимизировать сервер PSQL путем увеличения размеров кэша, оптимизации для M2 SSD и предварительного прогрева

Спасибо!

Редактировать:

Удаление строк с нулевым идентификатором, добавление оператора NOT NULL в столбец внутри PSQL и перезагрузка слоя внутри GeoServer удалили "id" IS NOT NULL из запроса, и время запроса равнополовина того, что было раньше, но все еще недостаточно.Это действительно должен быть простой запрос IN.

1 Ответ

0 голосов
/ 01 марта 2019

Обновление PSQL до 10.2 решило проблему, индекс по-прежнему не используется в запросе ИЛИ, но работает в 10 раз быстрее.

...