ThinkGeo.com    |     Documentation    |     Premium Support

SQL 2012 Performance

hi,



I have a table with all the blocks of the country. It has this columns

[CODIGO] [varchar](254) NULL, 

[CVEGEO] [varchar](254) NULL,

[MI_STYLE] [varchar](254) NULL, 

[MI_PRINX] [int] IDENTITY(1,1) NOT NULL, 

[SP_GEOMETRY] [geometry] NULL,


PRIMARY KEY CLUSTERED 



and 2,753,940 polygons (Urban Blocks)



If i make a sqllayer and start in a very deep zoom i supose that the system make a query only for the polygons that iam looking or the polygons that are inside my viewer. But i dont think the mapsuite does that because i receive a timeout error. IS there a way to manage this problem?







Hi Rodrigo,



Thanks for your post and welcome to Map Suite forums.



Actually, not only the MsSql2008Featurelayer, almost all of the layers in Map Suite are using this strategy: only get and draw the features within the current view. As for timeout error, I am not sure if the features you are requesting are two large numbers of features.



In order to debug it, you can register the below events and should get some useful information:



ExecutingSqlStatement : we can see every T-Sql which will execute in Sql Sever.


((MsSql2008FeatureSource)stateLayer.FeatureSource).ExecutingSqlStatement += new EventHandler<ExecutingSqlStatementMsSql2008FeatureSourceEventArgs>(Default_ExecutingSqlStatement);
. . . . . .
 
        void Default_ExecutingSqlStatement(object sender, ExecutingSqlStatementMsSql2008FeatureSourceEventArgs e)
        {
            //e.SqlStatement this is the sql string.
        }

DrawingFeatures: we can get the drawing features in current view.



I guess you can try to run the T-sql String in sql server 2012 to see how long it takes.

Hope it helps.












Thank you so much Johnny, Is there a way to personalize or modify the query that is performed? i would like to personalize the query in order to have some logic on the sql server like stored procedures or triggers and  on the side of the application…IS THAT POSSIBLE? Ive already see the executequery and scalar methods on the mssql2008featuresource class. But i would like to have a method which return features already or if it is not posible what would be the best way to convert the data table return to a layer. 
  
 Thank you

Hi Rodrigo, 
  
 I guess that’s possible, you just need to take the advantage of the event “ExecutingSqlStatement” and modify the query sql script in the event to what you would like, but please note you need to check the type of the SqlStatement based on the eventArgs. 
  
 For “if it is not possible what would be the best way to convert the data table return to a layer”, can you clearify it? 
  
  
 Best Regards! 
 Johnny

Thank you so much… What is the difference between mssql2008featurelayer and mssql2008featuresurce… i guess featurelayer contains a featuresource inside, but how can i use featuresurce?

Hi Rodrigo, 
  
 In MapSuite, all the layers end with “FeatureLayer” like mssql2008featurelayer, shapeFileFeatureLayer are responsible for how to render the layer with all kinds of styles. All the featuresource like mssql2008FeatureSurce, shapeFileFeatureSource provide the data for the above layers and that’s why we can see there is always a featuresource including in such layers. 
  
 As for how to use the featureSource, we just need to convert the FeatureSource property to the corresponding featuresource explicit, for instance, ((MsSql2008FeatureSource)stateLayer.FeatureSource) 
  
 Here I collect some similar FeatureLayers and the corresponding Featuresource for you: 
 FileGeoDatabaseFeatureLayer => FileGeoDatabaseFeatureSource 
 InMemoryFeatureLayer => InMemoryFeatureSource 
 MsSql2008FeatureLayer => MsSql2008FeatureSource 
 OracleFeatureLayer => OracleFeatureSource 
 ShapeFileFeatureLayer => ShapeFileFeatureSource 
 TabFeatureLayer => TabFeatureSource 
 WfsFeatureLayer => WfsFeatureSource 
  
 Hope it helps. 
 Regards, 
 Troy