Hello list,

we are still trying to tune our Mapserver/Oracle Spatial Database performance. Some facts about our data are:

=> DATA 210 000 Rows (WGS84, SRID 8307)
     - In 137 000 The Geom-column is filled (2D, only Point Geometry)

We created the following Insert-Metadata-statement for the spatial index/data:

INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID)
VALUES ('GDI_KD_STAMM',        'GEOM',
      MDSYS.SDO_DIM_ARRAY
(MDSYS.SDO_DIM_ELEMENT('X', -31.250000000, 46.180000000, 0.000000050), MDSYS.SDO_DIM_ELEMENT('Y', 27.640000000, 78.910000000, 0.000000050)
                         ),
      8307
      );


Our statement for creating the spatial index (R-type index):

CREATE INDEX "GDI"."IDX_GDI_KD_STAMM" ON "GDI"."GDI_KD_STAMM" ("GEOM") INDEXTYPE IS "MDSYS"."SPATIAL_INDEX" PARAMETERS ('TABLESPACE=GDII SDO_INDX_DIMS=2 LAYER_GTYPE=POINT SDO_NON_LEAF_TBL=TRUE');


Our used Mapserver version (Windows):

MapServer version 4.8.3 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=PDF OUTPUT=SWF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER SUPPO RTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPO RTS=THREADS SUPPORTS=GEOS INPUT=JPEG INPUT=POSTGIS INPUT=ORACLESPATIAL INPUT=OGR
INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG


Extract from our used mapfile with one example layer (whole mapfile contains 8 layers):


#######################################################
#         KARTA.GO mapfile GDI_____                   #
#######################################################

NAME "Kunden"
STATUS ON
SIZE 640 490
EXTENT 1689025 3960945 7079493 8188877 UNITS meters

PROJECTION
"init=epsg:31467"
END

IMAGECOLOR 255 255 255

SYMBOLSET "../icons/symbset"
FONTSET "../fonts/font.list"
SHAPEPATH "../data"


######################################################
#      Start web interface definition            #
######################################################

WEB
METADATA
WMS_ONLINERESOURCE "http://******/cgi-bin/mapserv.exe?map=C:/Programme/Apache_Group/Apache2/htdocs/gdi/mapfiles/kunden.map";
WMS_SRS "epsg:31467"
WMS_TITLE "Kunden"
WMS_FEATURE_INFO_MIME_TYPE "gml"
WMS_ABSTRACT "GDI Kunden"
END
END

#######################################################
#                 Layer Example:                      #
#######################################################

### aktive Kunden ##################################

LAYER
NAME "Aktiv"
STATUS ON
TYPE Point
TEMPLATE "../attributformulare/sst.html"
TOLERANCE 6
TOLERANCEUNITS Pixels
DUMP TRUE
CONNECTIONTYPE oraclespatial
CONNECTION "***/[EMAIL PROTECTED]"
DATA "GEOM FROM GDI_KD_STAMM USING UNIQUE KD_NR SRID 8307"

FILTER "KD_AUSG_SEIT IS NULL"
PROCESSING "CLOSE_CONNECTION=DEFER"

PROJECTION
 "init=epsg:4326"
END

SYMBOLSCALE 6000000
METADATA
 "WMS_SRS" "epsg:4326"
 "WMS_TITLE" "Aktiv"
 "WMS_FEATURE_INFO_MIME_TYPE" "gml"
 "WMS_EXTENT" "1689025 3960945 7079493 8188877"
 "GML_INCLUDE_ITEMS" "KD_NR"
END

CLASSITEM "KD_NR"
LABELITEM "KD_NR"

CLASS
 EXPRESSION /./
 MAXSCALE 10000000
 MINSCALE 150001
 MINSIZE 3
 MAXSIZE 8
 SYMBOL "circle"
 OUTLINECOLOR 21 86 255
 COLOR 21 86 255
END

CLASS
 EXPRESSION /./
 MAXSCALE 150000
 MINSCALE 0
 MAXSIZE 25
 MINSIZE 25
 SYMBOL "circle"
 OUTLINECOLOR 21 86 255   COLOR 255 255 254

 LABEL
  FORCE TRUE
  POSITION cc
  ANGLE 0
  TYPE TRUETYPE
  FONT verdana
  MINSIZE 6
  MAXSIZE 6
  COLOR 0 0 0
  OUTLINECOLOR 255 255 254
 END
END

END

#################
# Some other Layers
#################

END


We tried a lot of things (partitioning with spatial index, OGR connection, tuning indexes) to get to a better performance, but nothing really worked. For testing we removed the filter in layer data and fetched all rows from the table. There was no difference in performance time to the case with filter in use. We would be greatful for any new idea to improve the performance.











Fernando Simon schrieb:
Hi Sebastian,
    The Oracle Spatial driver try to be very fast to request data from
database. Its use the OCI to connect directly in the Oracle core API,
without use any middle ware/interface.
    To execute fast requests it try to use the database operators, like
SDO_FILTER and SDO_RELATE. Another important thing is that the oracle
Spatial driver apply your actual extent to restrict the data from
database, to just retrieve the data that are inside of the extent (this
just occur to draw the map, not for query).
     The driver can just uses data from SDO_GEOMETRY object, another
kind of the object cannot uses the Maporaclespatial but the OGR. A hint
with the database connect is use the connection pool, to do this you
just need to add the "PROCESSING CONNECTION=DEFER" in you layer (all
with the connection). This little change will force the Mapserver to
store the connection handler until the end of your request, this help
when the login cost is high.
     As Bart and Michael wrote, exist two way how to see the SQL. The
first is using the DEBUG flags, with this way you can see all the SQL's
that  driver execute. The second is  just change the connection to see
the SQL that retrive the data from database. An important thing is just
use the debug (first way) in a development state, because will increase
a lot the time to process and finish the request.
     In the database side you can to improve the performance with little
things. When you create the index you need to use an extent (MBR) that
represent all you data, but just it. If you define a generic MBR (like
-180, -90 180 90) will be very bad because not help the optimizer to
find your data. In the 9.2 manual (item 1.7) have a good explanation
about the spatial index methods. The Mapserver driver is very dependent
of a good index to be fast, if your table have a poor index will be
worst than without the index.
     If you are using geodetic data the Oracle Spatial operations will
be more slow, and if you have complex data will be worst. This occurs
because the Oracle Spatial need to consider the world surface to
represent the data, need to execute more mathematical calculus to
delivery your data.
     Another thing to improve is use some Oracle ways. The Oracle Server
can store a clone of you table in memory to help and execute the
requests more fast, this help when your table not change a lot and is
very used. ( I don't remember if it's possible to use this in the 9i
version)
     Sorry the delay to reply your message, I was out last week. If you
have more doubts you can contact me and the list. We will try to help
you with the best hints.
     Best regards.

------------------------------------------------------------------------
Fernando Simon
Mapserver and Oracle Spatial developer
G10 - Laboratorio de Computacao Aplicada - Brazil
http://www.univali.br/g10 - UNIVALI/CTTMAR
------------------------------------------------------------------------

Rahkonen Jukka wrote:
Hi Sebastian,

Do you have a feeling that your Oracle is especially slow at the moment? How 
many features your typical query is giving back?
I am using a polygon layer with 1.2 million polygons, all in one partition and 
I think that MapServer works quite well with it with pure spatial queries. Of 
course it gets slow if the query returns many thousand features, but that is 
another thing that must be handled by using more genaralised layers for 
far-zoom-out cases.  What really can make Oracle slow are attribute joins 
without proper indices.
MapServer is somewhat slower than GeoServer with the same data and I believe 
that is mostly because GeoServer utilises connection pooling better.

I found results from a quick test I made once by having both MapServer and 
Geoserver running on the same computer and sending request to Oracle layer with 
different routes.

Test cases:
1) Polygons from Oracle 9i spatial table through MapServer WMS and native 
Oracle connection
2) Same polygons through MapServer, but through by accessing them through 
GeoServer WFS service (running on the same computer)
3) Same polygons again through MapServer, but now cascading through GeoServer 
WMS service (running on the same computer)
4) Same polygons but this time directly through the GeoServer WMS

I got this kind of results presented as throughput requests/minute
1) 200 requests / minute (60 % processor load)
2) 112  requests / minute (100%  processor load)
3) 87 requests / minute (75% processor load)
4) 300 requests / minute (85% processor load)

Regards,

-Jukka Rahkonen-
-----Alkuperäinen viesti-----
Lähettäjä: UMN MapServer Users List [mailto:[EMAIL PROTECTED] Puolesta Sebastian Schmitz
Lähetetty: 11. joulukuuta 2006 11:32
Vastaanottaja: [email protected]
Aihe: Re: [UMN_MAPSERVER-USERS] tune mapserver on oraclespatial

Hi
thanks for help with step 1 of my question - getting the SQL Mapserver uses. My Mapserver (4.8.3) does not print anything but failed to draw layer onto the screen, but setting debug flag and setting an MS_ERRORFILE env-variable worked out fine. So, now I have the SQL I may as well post it here and ask for comments on tuning options for a large table (300.000 rows):

SELECT KUNNR, GEOM FROM (< subselect >) WHERE SDO_FILTER( GEOM, MDSYS.SDO_GEOMETRY(2003, 8307,
NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_AR
RAY(4.04520417,48.6727777,9.82231387,51.398884)
),
        'querytype=window') = 'TRUE'

Our current idea is to partition the table by x and y values from SDO_GEOMETRY and put spatial indices onto each of these partitions. Status quo is that we only have one spatial index for the whole table..

Feedback appreciated

Cheers

Sebastian




Michael Smith schrieb:
One of the easiest ways is to just introduce a small syntax
error in
your data statement (change the tablename or something). Then Mapserver will print the spatial sql statement to the screen (using the cgi version)

Mike Smith

--
KARTA.GO Gesellschaft für raumbezogenes Informationsmanagement mbH

Siemensstraße 8
53121 Bonn

Sebastian Schmitz
Projektleiter

fon: +49 (0) 228 / 9 45 99 91
fax: +49 (0) 228 / 9 45 99 93
[EMAIL PROTECTED]
http://www.kartago.de
________________________________________________________


--
KARTA.GO Gesellschaft für raumbezogenes Informationsmanagement mbH

Siemensstraße 8
53121 Bonn

Sebastian Schmitz
Projektleiter

fon: +49 (0) 228 / 9 45 99 91
fax: +49 (0) 228 / 9 45 99 93
[EMAIL PROTECTED]
http://www.kartago.de
________________________________________________________

Reply via email to