我们在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)));我在380ms内得到了6515行。
如果从PgAdmin3查询,Ie Postgres能够在380ms内返回查询结果,但Geoserver需要大约48秒才能获得相同的结果集。
这是不是某种JDBC问题?
关于我们的设置的一些详细信息:
Master Postgres数据库与Geoserver位于不同的VM上,但我们复制到Geoserver VM (同一主机)上的从属Postgres集群。因此,Geoserver在其查询中引用了'localhost‘只读Postgres集群。
上面显示的380ms响应时间来自从Postgres集群,与Geoserver正在使用的集群相同。
全部基于Linux (Ubuntu 11.10)。Postgres 9.1 PostGIS 1.5地理服务器版本2.1.3
发布于 2012-07-23 23:02:11
GeoServer以1000个块为单位获取数据,呈现它们,获取下一个块,依此类推,以避免在有许多并发请求的情况下占用大量内存。因此,48不是加载数据的时候,而是加载和渲染数据的时候。单次加载数据速度更快,但无法控制内存占用。
此外,您是否在数据存储配置中使用预准备语句?
https://stackoverflow.com/questions/11608122
复制相似问题