[Mapserver-dev] Re: mapsde.c

Howard Butler hobu at iastate.edu
Mon Oct 18 20:34:08 EDT 2004


Paul,

This afternoon Brock and I implemented a couple of small changes to prevent 
this from happening.  The behavior we defined is that if the user did not 
set a version, no version queries are done (instead of defaulting to 
SDE.DEFAULT).  We still need to have the ability to set the version to 
SDE.DEFAULT, however.

If no version is specified, then the query returned to MapServer will be 
the data in SDE just as they were originally loaded (for the most part, 
users could have also compressed their edits back into the main table as 
well).  If SDE.DEFAULT is specified, then that version will be used to 
query, just like any other version.

Brock tested these changes and saw a 8-10% increase in rendering time 
(turning off all of the versioned query stuff).  Each layer was making 
extra trips to the db to find out version information, and the cleanup was 
costing a bit extra as well.

Brock and I will continue to work on the changes tomorrow, and if they seem 
to be behaving, we'll check them in.

SE_DEFAULT_STATE_ID is a *special* state_id that I've only seen come up if 
the SDE server *doesn't* support versioned queries (like SDE for Coverages, 
for example).  It is not related to the version SDE.DEFAULT, even though 
their names are scarily similar.  SDE.DEFAULT's state_id will move around 
as the users make and post their edits to the database (hence the query for 
the info struct, even though SDE.DEFAULT wasn't explicitly specified).  The 
changes that Brock and I made mean that if no version was specified, 
nothing is done with respect to versions and no default version is assumed.

Howard


At 07:03 PM 10/18/2004, Paul Ramsey wrote:
>I have a suspicion that some of the version handling code might be making 
>us slower than we need to be.
>
>In particular, here we check for a version, and use SDE.DEFAULT if there 
>is not one provided, then we go and do SE_version_get_info() which will 
>later provide us with a state_id. But, if our version is SDE.DEFAULT, 
>isn't our state_id == SE_DEFAULT_STATE_ID. So we don't need to do the 
>version_get_info(), and we also do not need to do the tests for 
>SE_stateinfo_is_open(), or the SE_stream_set_state() and all the stuff 
>preceding it.
>
>These are questions, not statements, I could be completely wrong in my 
>interpretation.
>
>   if (numparams < 3){
>     // User didn't specify a version, we'll use SDE.DEFAULT
>     if (layer->debug)
>       msDebug("msSDELayerOpen(): Layer %s did not have a"
>               "specified version.  Using SDE.DEFAULT.\n", layer->name);
>       status = SE_version_get_info(sde->connection, "SDE.DEFAULT", version);
>   }
>   else {
>     if (layer->debug)
>       msDebug("msSDELayerOpen(): Layer %s specified version %s.\n",
>               layer->name,
>               params[2]);
>     status = SE_version_get_info(sde->connection, params[2], version);
>   }
>
>Paul
>
>Brock Anderson wrote:
>
>>Now that FastCGI and the SDE connection pooling code seem to work,
>>I've had a chance to do some performance tests on the new and
>>improved MapServer. Some early results show that Mapserver is about
>>1-2 seconds faster per getMap request than it was with regular CGI,
>>but it is still much slower than ArcIMS for simple getMap requests. I
>>was testing with a map that had three fairly simple layers; ArcIMS
>>returns in ~800ms, MapServer in about 1600ms.
>>It looks like msSDELayerOpen() and msSDELayerClose() account for much
>>of that difference. I added some debugging statements to the code,
>>which revealed:
>>In msSDELayerOpen():
>>SE_version_get_info() takes 20 - 30ms
>>SE_layer_get_info() takes ~100ms
>>SE_stream_set_state() takes ~10ms
>>the code inside the block:
>>   if (!(sde->state_id == SE_DEFAULT_STATE_ID)){
>>    ...
>>   }
>>takes 20 - 100ms
>>In msSDELayerClose()
>>SE_stream_free() takes 20 - 30ms
>>These may seem like minor performance hits, but they occur for each 
>>layer, and those numbers become quite significant.  I especially
>>worry about the way we handle state ids, and I wonder if we are doing
>>it efficiently.  Frank and Howard: do either of you have ideas for
>>how mapsde.c could be streamlined?
>_______________________________________________
>Mapserver-dev mailing list
>Mapserver-dev at lists.gis.umn.edu
>http://lists.gis.umn.edu/mailman/listinfo/mapserver-dev




More information about the mapserver-dev mailing list