Hi List,
While optimisations are on our minds (who needs holidays anyway?), I thought I’d bring up a function that seems to be particularly slow. Namely the “isometric” one.
Same parameters as before (single test instance, 1 thread, coming from Oracle).
I’m getting GeoServer to render this png:
http://maps.warwickshire.gov.uk/misc/with-isometric.png
There are about 9000 buildings on there.
My response times for this layer using jmeter average 8500ms! Now, much of that is Oracle (booo!), however I’ve noticed that it seems to take considerably longer when I’m using the “isometric” function than some of my other stylings that don’t use that.
If I disable just the isometric effect (so comment out the below; the features are still rendering, but just without going through the isometric function):
se:Geometry
<ogc:Function name=“isometric”>
ogc:PropertyNameSDO_GEOMETRY</ogc:PropertyName>
ogc:Literal2</ogc:Literal>
</ogc:Function>
</se:Geometry>
My request time drops to 7300ms - a significant saving.
(Optimisation for me - The output is almost identical at that scale - http://maps.warwickshire.gov.uk/misc/without-isometric.png - so I’ll turn it off at that scale in the future.)
There’s also an offset function which is being used here - disabling that results in absolutely no difference.
But even for a small subset of those (i.e., zoomed in), the isometric thing severely bogs down rendering.
========
Something related I noticed in the Geoserver logs while investigating this:
2013-12-31 17:44:08,379 DEBUG [org.geotools.jdbc] - SELECT OSMMSTYLE_NAME,SDO_GEOMETRY as SDO_GEOMETRY FROM OSMM.OS_MM_TOPOGRAPHIC_AREA WHERE (SDO_FILTER(SDO_GEOMETRY, ?, ‘mask=anyinteract querytype=WINDOW’) = ‘TRUE’ AND (OSMMSTYLE_NAME = ? OR OSMMSTYLE_NAME = ? OR OSMMSTYLE_NAME = ? OR OSMMSTYLE_NAME = ?))
2013-12-31 17:44:08,379 DEBUG [org.geotools.data.oracle.sdo] - Using layer SRID: 27700
2013-12-31 17:44:08,379 DEBUG [org.geotools.jdbc] - Setting parameter 1 as MDSYS.SDO_GEOMETRY(2003,27700,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(431115.10000000003,265345.6461141951,432915.5,267131.3538858049))
2013-12-31 17:44:08,379 DEBUG [org.geotools.jdbc] - 1 = POLYGON ((431115.10000000003 265345.6461141951, 431115.10000000003 267131.3538858049, 432915.5 267131.3538858049, 432915.5 265345.6461141951, 431115.10000000003 265345.6461141951))
2013-12-31 17:44:08,379 DEBUG [org.geotools.jdbc] - 2 = buildingFill
2013-12-31 17:44:08,379 DEBUG [org.geotools.jdbc] - 3 = structureFill
2013-12-31 17:44:08,379 DEBUG [org.geotools.jdbc] - 4 = buildingFill
2013-12-31 17:44:08,379 DEBUG [org.geotools.jdbc] - 5 = structureFill
201
Note that GeoServer has appended OR clauses for buildingFill and structureFill twice (I guess because they’re in separate FeatureTypeStyles). I’m sure Oracle optimises that out, but it might be worth doing it on the GeoServer end anyway.
Unfortunately they’re locking up the building now, so I can’t do any further testing until Thursday. I can create JIRA’s for these if desired.
And Happy New Year all!
Jonathan
This transmission is intended for the named addressee(s) only and may contain sensitive or protectively marked material up to RESTRICTED and should be handled accordingly. Unless you are the named addressee (or authorised to receive it for the addressee) you may not copy or use it, or disclose it to anyone else. If you have received this transmission in error please notify the sender immediately. All email traffic sent to or from us, including without limitation all GCSX traffic, may be subject to recording and/or monitoring in accordance with relevant legislation.