SQL Centre of Excellence

Five preconference's are open for #SqlSatDublin for Friday 19th of September, 2014.

At €299 for a whole day workshop with industry experts from around the globe this will be the best whole day training SQL training you will find in Ireland for 2014.

Revenue from this training day all goes to help deliver #SqlSatDublin, Irelands largest SQL Server event in 2014.

Click on the link below to view more details.

You can read more and book these whole day workshops at:

http://www.prodata.ie/events/SqlSat310/

and you can sign of the FREE SQL Saturday event at

http://www.sqlsaturday.com/310/

We are also super excited that we have the final pre-conference workshop to announce shortly which you will not want to miss if you are developing or deploying solutions on the cloud platform. Stay tuned…

I’m a huge fan of RML utilities for SQL DB Engine workload analysis. Its a fantastic tool fro being able to capture a trace and point  a finger at offending users, applications, batches, queries and even see plans and resource usage.

You can download RML from this link

http://www.microsoft.com/en-us/download/details.aspx?id=4511

One issue is that the Report viewer hyperlinks don't work out of the box on Windows 8.1. A Patch is needed for the SSRS 2012 Report viewer component which you can download here.

https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=37409

The quality of RML utilities is one of the biggest reasons that our SQL consultants (including myself) are slow to adopt extended events in a mainstream fashion. While extended events can have great instrumentation they still lack the presentation layer and analytics that RML brings. Who knows, maybe we can convince CSS to write an extended  events version of RML utilities – that would change the scene over night!

Its no secret that optimising distinct count in SSAS/MOLAP is painful. the normal optimisation stuff is covered in various papers such as:

- INI file settings to increase PageSize

- Separate Measure Groups

- Trying to partition by the distinct count item so that each partitions min and max values don't cross over.

We recently did all this for a customer but noticed one annoying thing. When we fired up SQL Profiler and ran a simple query we are flooding with “Progress Report End” noise, hitting the same partition.

image

In the case of one customer this generated over a million profiler events even though they only had 150 or so partitions. On the blown up adventure works cube with 150 million rows this generates some 1,500 events when there are only four partitions!

I chatted with Microsoft CSS and Alex Whittles who has done some interesting benchmarks on Distinct Count (http://www.purplefrogsystems.com/blog/2014/03/analysis-services-tabular-or-multidimensional-a-performance-comparison/)

The reason for this seeming annoying flood is that the Distinct Count outputs a progress report message PER SEGMENT and it pretty much has to scan all segments.  I’m cool with it having to scan all the segments (this is part of the challenge of the algorithm), but does it “really” have to give a message to profiler every 64k or so…

So far feedback from MS is that this behaviour is by design. I can’t help but think that such verbose instrumentation must hurt performance somewhere.

If you do notice this. Don’t panic – its by design. of course there are many funky ways to avoid a physical distinct count but that’s another blog!

 

A filed a connect item to ask if the product team can tone down the verbosity on events for Distinct Count. Please up vote if you come across this.

https://connect.microsoft.com/SQLServer/feedback/details/878199/progress-report-flooding-with-distinct-count-molap

Bitmap Indexes (*.map files) play an important role within Analysis Services. They provide a mechanism for the storage engine sub cube event to efficiently locate the relevant segments within the fact file without having to scan the whole thing. This is how you can have a 20 GB *.fact file in the partition but still get storage engine events of only 50ms or so.

However, it can be a best practise to turn off Bitmap Indexes in a few scenarios:

a) Where the attribute is not used much.

b) Where the attribute is really just a related property of an existing attribute

c) where the cardinality of the attribute is pretty much the same as the key

Further reading on this is below

http://www.mssqltips.com/sqlservertip/2567/ssas--best-practices-and-performance-optimization--part-3-of-4/

http://www.ssas-info.com/analysis-services-papers/1216-sql-server-2008-white-paper-analysis-services-performance-guide

One word of warning is when you turn off/on the bitmap indexes by adjusting the AttributeHierarchyOptimized property this may not actually have the desired effect.

The key thing we need to be aware of is that this AttributeHierarchyOptimized Attribute can be set in TWO places and just changing it in the shared dimension may not actually change it for your cube:

  • Once in the shared dimension
  • Once in the cube dimension

1) Changing AttributeHierarchyOptimized on the shared dimension

image

 

2) Changing AttributeHierarchyOptimized on the a cube dimension

image

 

This caused havoc on a recent tuning project where we turned off too many bitmap indexes in the normal dimension editor and then didn’t realise that when we turned them back on in the same place they were now stuck in the cube in the “off” state.

Now this behaviour is pretty much by design. The intention is that turning off bitmap indexes in the shared dimension will turn them off for all cubes, but if you leave them on you are free to turn them off on specific cubes. however it can lead to some confusion!

Page List

Page List