Есть два вопроса.
1. На простой запрос GetFeatureInfo MapServer зачем-то делает два одинаковых запроса к базе данных. По логам браузера, Апача, MapServer-а - запрос как и должно быть - один, а вот судя по профайлеру, к БД зачем-то два запроса.
Привожу URL и прочую информацию.
Так запрашиваем данные:
Код: Выделить всё
http://host/cgi-bin/mapserv.exe?
map=c:/ms4w/Apache/htdocs/mapfiles/NN_fortest.map&
LAYERS=muff1&
QUERY_LAYERS=muff1&
STYLES=&
SERVICE=WMS&
VERSION=1.1.1&
REQUEST=GetFeatureInfo&
BBOX=4887149.138842%2C7610915.522552%2C4901373.131161%2C7621631.141765&
HEIGHT=675&
WIDTH=896&
FORMAT=image%2Fpng&
SRS=EPSG%3A3857&
X=217&
Y=133
MAP-файл:GetFeatureInfo results:
Layer 'muff1'
Feature 168648833:
Код: Выделить всё
LAYER
NAME "muff1"
TYPE POINT
TEMPLATE template_qq_mssql.html
STATUS OFF
DUMP TRUE
CONNECTIONTYPE PLUGIN
PLUGIN "c:\ms4w\Apache\specialplugins\msplugin_mssql2008.dll"
CONNECTION "Server=aaa;UID=bbb;PWD=ccc;Database=GEO;Integrated Security=true"
DATA "GeomCol from vMapMUFF USING UNIQUE ID USING SRID=4326"
CLASS
STYLE
COLOR 0 255 0
SIZE 5
END
END
PROJECTION
"init=epsg:4326"
END
END
Код: Выделить всё
select 504,c.name,c.description,c.definition
from master.dbo.syscharsets c
where c.id = convert(tinyint, databasepropertyex ( db_name() , 'sqlcharset'))
go
SELECT top 0 * FROM vMapMUFF
go
SELECT
convert(varchar(max), ID),
convert(varchar(max), ObjectTypeID),
convert(varchar(max), isvols),
GeomCol.STAsBinary(),
convert(varchar(36), ID)
from vMapMUFF
WHERE GeomCol.STIntersects(geometry::STGeomFromText('POLYGON((43.9325969751804 56.305451152954,43.9334526200264 56.305451152954,43.9334526200264 56.3059258320511,43.9325969751804 56.3059258320511,43.9325969751804 56.305451152954))',4326)) = 1
go
SELECT
convert(varchar(max), ID),
convert(varchar(max), ObjectTypeID),
convert(varchar(max), isvols),
GeomCol.STAsBinary(),
convert(varchar(36), ID)
from vMapMUFF
WHERE GeomCol.STIntersects(geometry::STGeomFromText('POLYGON((43.9325969751804 56.305451152954,43.9334526200264 56.305451152954,43.9334526200264 56.3059258320511,43.9325969751804 56.3059258320511,43.9325969751804 56.305451152954))',4326)) = 1
go
Причем, ничего не меняется, если использовать режим fcgi или не использовать. При обычном запросе слоя, к БД идет один запрос, как и нужно.[Tue Mar 19 09:49:44 2013].602000 CGI Request 1 on process 11008
[Tue Mar 19 09:49:45 2013].102000 mapserv request processing time (msLoadMap not incl.): 0.500s
[Tue Mar 19 09:49:45 2013].102000 msFreeMap(): freeing map at 0251C8C8.
2. Если посмотреть лог MapServer для GetFeatureInfo видно, что обработка по времени занимает 0.500 секунды в то время, как даже с учетом двойных запросов к БД они обрабатываются не более 0.100 секунды. На что теряется время? Нигде никак просадок не нашел, правда MapServer и БД на разных серверах.