MapServer. GetFeatureInfo + MSSQL - производительность.

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Tokha
Интересующийся
Сообщения: 38
Зарегистрирован: 08 апр 2011, 09:53
Репутация: 2

MapServer. GetFeatureInfo + MSSQL - производительность.

Сообщение Tokha »

Продолжаю заниматься оптимизацией работы проекта и вот наткнулся.
Есть два вопроса.

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
Это получаем в ответ от MapServer:
GetFeatureInfo results:

Layer 'muff1'
Feature 168648833:
MAP-файл:

Код: Выделить всё

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		
Это запросы к БД, отправленные мапсервером при единственном GetFeatureInfo (тут видно два одинаковых запроса):

Код: Выделить всё

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
Это лог MapServer для данного GetFeatureInfo:
[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.
Причем, ничего не меняется, если использовать режим fcgi или не использовать. При обычном запросе слоя, к БД идет один запрос, как и нужно.


2. Если посмотреть лог MapServer для GetFeatureInfo видно, что обработка по времени занимает 0.500 секунды в то время, как даже с учетом двойных запросов к БД они обрабатываются не более 0.100 секунды. На что теряется время? Нигде никак просадок не нашел, правда MapServer и БД на разных серверах.
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей