我们注意到 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