In administering SQL Server databases, the DBA is often presented with the task of identifying resource bottlenecks on the system and the sources of those bottlenecks. Also, the DBA is challenged with the task of identifying why specific queries take significant time to execute or affect the performance of other queries on the system. This allows the DBA to find opportunities to tune queries and improve their performance and the overall performance impact on the system. In this blog we will explore identifying if any disk I/O bottlenecks are present that impact query performance on the system. Such action would allow a DBA to further deal with the I/O bottleneck. Let us learn about Monitoring SQL Server.
Download Diagnostic Manager if you want to run along with the example demonstrated in this blog post. .
Introducing Extended Events for IO monitoring
The applications, users have worked with the System Administrator on slow-performing application issues. They suspect that slow disk I/O is impacting the performance of database queries. You may be asked to verify if this is the case and you can use SQL Server Extended Events to find if any queries are experiencing on disk I/O waits.
CREATE EVENT SESSION [XEvent_IO_Tracker] ON SERVER ADD EVENT sqlos.wait_info(ACTION(sqlserver.session_id,sqlserver.sql_text) WHERE (([package0].[equal_uint64]([wait_type],(68)) OR [package0].[equal_uint64]([wait_type],(66)) OR [package0].[equal_uint64]([wait_type],(67)) OR [package0].[equal_uint64]([wait_type],(182))) AND [package0].[greater_than_uint64]([duration],(0)) AND [package0].[equal_uint64]([opcode],(1)) AND [sqlserver].[is_system]=(0))) ADD TARGET package0.event_file(SET filename=N'C:\Temp\XeventIObottleneck.xel') WITH (MAX_MEMORY=4096 KB, EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY=30 SECONDS, MAX_EVENT_SIZE=0 KB, MEMORY_PARTITION_MODE=NONE, TRACK_CAUSALITY=OFF, STARTUP_STATE=OFF); GO ALTER EVENT SESSION [XEvent_IO_Tracker] ON SERVER STATE = START; GO
Let’s verify that the session is actively running and capturing data by executing the following DMV query:
SELECT * FROM sys.dm_xe_sessions WHERE name = 'XEvent_IO_Tracker';
The next step is to induce an IO operation and capture using our XEvent. Open a New Query window and copy and paste the following T-SQL command.
DBCC DROPCLEANBUFFERS GO USE AdventureWorks2012 GO SELECT COUNT_BIG(*) FROM [Production].[ProductInventory] a CROSS JOIN [Production].[ProductInventory] b CROSS JOIN [Production].[ProductInventory] c CROSS JOIN [Production].[ProductInventory] d WHERE a.Quantity > 300
Once the query completes, go back to the other query window and execute the following command to stop the Extended Event session:
ALTER EVENT SESSION [XEvent_IO_Tracker] ON SERVER STATE = STOP GO
In Object Explorer, expand the plus next to XEvent_IO_Tracker and right-click on the package0.event_file and select View Target Data:
In the above example, I used the “View Live Data” feature of Extended Events to look at the data. We can see the type of lock and the actual query too.
This is a great start, but resource constraint inside SQL Server can be of various types and IO is just one of the resource.
Diagnostic Manager does more than the eye can see
There are a number of standard tools like PAL that can be used for monitoring SQL Server. I took a look at the new Diagnostics Manager from Idera to understand what it does. It has been like a Pandora box for monitoring point of view. Some of the things that struck my eye are:
When it comes to active server monitoring, it is important to understand that things can go wrong. We are always dealing with limited resources CPU, Memory, IO, throughput, Network etc. As an intelligent DBA, it is critical for us to know when the CPU is peaking, when the backups happen, when the services stop abruptly, when logs files expand and more. I found most of these are already configured and readily and are available to extend using configuration and templates.
I sort of like the starter out-of-box templates readily available to get started with this tool.
Standard OOB Reporting
The next stand out I found was the ability which is available inside SQL Server Management Studio. A set of standard reports. It is surely beyond ~30+ reports neatly categorized under “Server”, “Virtualization” and “Activity” headings.
I will not get into each of these reports but things like forecast based on existing and historical data is something caught my eye and has been worth a mention. With limited disk capacity, it is critical to know when to increase the hardware configuration based on usage pattern is critical. With SQL Server 2014, it is critical to add the capability of how In-Memory tables sizing will work and how memory needs to be accounted. If these get added, then this can be a great asset for DBA’s running on the latest versions.
I think this is the strength of this tool. It allows standard configured values for known standard resources and gives us the flexibility to create additional counters / values to monitor. This is like opening a can of worms for many. But I am pleasantly surprised that the standard templates are exhaustive enough to start with.
I wish these standard templates have some additional recommendations for monitoring some complex environments like SQL Server AlwaysOn using multiple AG’s health, Database Mirroring status, Cluster Resources health and basic activities like backup operations on databases. Though simple tasks like disk monitoring, PLE, Memory, CPU, Network, Waits etc are quite essential – the servers of today are doing way more work than the eye can meet.
Monitor with guidance
Who doesn’t require some help when it comes to monitoring workloads like SQL Server? I personally liked the concept of reference range values when working with SQL Server performance counters.
Instead of me trying to monitor, track and look at each performance counters, I would love to see how I can bring my own counters and ranges from tools like PAL in the future. The ability to import and if required to export can be of great help.
Some of the salient points that caught my eye and worth a mention in the new versions are:
- Monitoring of both Physical and Virtual environments of SQL Server.
- Ability to monitor query from specific application.
- Ability to look at historic data to troubleshoot past issues on the server.
- Track database growth so that we can make corrective planning on capacity on servers.
- Can look at data on mobile devices like iPhone, Android, Blackberry or Tablet to view real-time and historical SQL Server performance data.
- Management pack available for Microsoft’s System Center Operations Manager (SCOM).
- TempDb monitoring, CPU, Memory, WaitStats and more.
You can download Diagnostic Manager from here.
This blog post is to show you that most of the SQL Server work that we do as DBA is identify a needle in a haystack. Trust me with tools like Idera’s Diagnostics Manager, we are overwhelmed with information that we need to know – yet there is more to explore, enhance and extend what the tool gives out of the box. The best learning experience one can get is by knowing what all the tool does and trying to understand how some of these have been implemented ourselves.
Reference: Pinal Dave (https://blog.sqlauthority.com)