4

我们注意到 Geoserver 实例和 Postgres/PostGIS 之间的交互有些奇怪。

在将 Geoserver 的日志级别设置为包括开发人员调试后,我设法捕获了从 Geoserver WMS 到 PostGIS 的单个请求。

(缩短的)事件序列及其时间戳:

12:31:22,658 - SELECT query for MSG is sent to Postgres
12:32:10,315 - Rendering for MSG layer starts
12:32:10,356 - DB Connection Closed
~ 48 seconds

有趣的是,当我直接从 PgAdmin3 执行相同的查询 (MSG) 时:

SELECT "frp_mw",encode(ST_AsBinary(ST_Force_2D("the_geom")),'base64') as "the_geom" FROM "public"."af_msg_abba_datetime_today" WHERE ("the_geom" && GeometryFromText('POLYGON ((-27.67968749408379 -46.92207325648429, -27.67968749408379 -6.186892358058866, 75.67968748740275 -6.186892358058866, 75.67968748740275 -46.92207325648429, -27.67968749408379 -46.92207325648429))', 4326) AND (("frp_mw" >= -1 AND "frp_mw" <= 150) OR ("frp_mw" >= 151 AND "frp_mw" <= 300) OR ("frp_mw" >= 301 AND "frp_mw" <= 600) OR ("frp_mw" >= 601 AND "frp_mw" <= 50000)));

我在 380 毫秒内得到 6515 行。

即,如果从 PgAdmin3 查询,Postgres 能够在 380 毫秒内返回查询结果,但 Geoserver 需要大约 48 秒才能获得相同的结果集。

这可能是某种 JDBC 问题吗?

关于我们的设置的一些细节:

主 Postgres 数据库位于与 Geoserver 不同的 VM 上,但我们复制到 Geoserver VM(同一主机)上的从属 Postgres 集群。因此,Geoserver 为其查询引用了“localhost”只读 Postgres 集群。

上面显示的 380 毫秒响应时间来自从属 Postgres 集群,与 Geoserver 使用的相同。

所有基于 Linux (Ubuntu 11.10) 的。Postgres 9.1 PostGIS 1.5 地理服务器 2.1.3

4

1 回答 1

4

GeoServer 以 1000 个块为单位获取数据,渲染它们,获取下一个块,等等,以避免在许多并发请求的情况下占用大量内存。所以48s不是加载数据的时候,而是加载渲染的时候。单次加载数据更快,但无法控制内存占用。

此外,您是否在数据存储配置中使用准备好的语句?

于 2012-07-23T15:02:10.803 回答