我們注意到Geoserver實例和Postgres/PostGIS之間的交互中存在一些奇怪的現象。Geoserver - 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)));
我得到6515行中380毫秒。
如果從PgAdmin3查詢,Postgres能夠在380毫秒內返回查詢結果,但Geoserver需要大約48秒才能獲得相同的結果集。
這也許是一種JDBC問題?
我們設置一些細節:
主Postgres數據庫是從利用Geoserver一個單獨的虛擬機,但我們複製對利用Geoserver VM(同一主機)的從屬的Postgres集羣。所以Geoserver正在引用'localhost'只讀Postgres羣集來查詢它。
上面顯示的380 ms響應時間來自從屬Postgres羣集,與Geoserver使用的相同。
所有基於Linux(Ubuntu 11.10)的。 Postgres 9.1 PostGIS 1.5地理服務器2.1.3
您是否將pgadmin中的所有6k行下載到客戶端,或只有前100個? – 2012-07-23 08:54:40
我在一個單獨的查詢窗口中執行查詢,然後我認爲它將所有行都返回給客戶端。 – Ries 2012-07-23 10:32:27