Sql-server – Performance Tuning ETL

data-warehouseindex-tuningmonitoringperformancesql server

I administer a datawarehouse running on SQL Server 2016. This datawarehouse has most of its ETL processing done during a nightly load, except for a few SSIS packages that run throughout the day, then SSAS processing done afterward, so when I arrive in the morning, there's no active monitoring I can perform.

The processing of this nightly load fluctuates, sometimes more than expected, but with the current monitoring setup, there is none other than a sp_whoisactive loaded into a table every 30 minutes, it makes it difficult to try and tune this process. I can obviously look to the plan cache but with the nightly ETL taking about 6 hours, the plan cache does not hold all of the plans used for the night.

Has anyone come across any performance monitoring/logging tools, the cheaper the better, that have been useful when trying to investigate and tune nightly loads like this? I'm most interested in looking for information to help tune indexes or see when/where I have CPU or memory bottlenecks.

Best Answer

For SSIS you can implement logging on the packages. A good place to start looking would be at the ProcessInput and PrimeOutput steps of the components within the packages. The PipelineComponentTime event will be useful to check for these steps, as it records the time spent in each of them. You can read more about logging for SSIS here.

For SSAS you can use Extended Events to monitor the performance while the processing is being done. The ProgressReportEnd and ResourceUsage events are two that you may want into look into examing during the times the cubes are processed, and well as the RequestProcessBegin and RequestProcessEnd events. This link will further outline the use of Extended Events in SSAS.