Introduction
Help — My disk performance (RAID how/why what to put where)
Help — My disk performance II (Physical connections to the SAN)
Help — My disk performance III (Partitioning and compression)
Help — My disk performance IV (filegroups and files)
Help — My disk performance V (Monitoring)
This post will wrap-up some additional monitoring topics, and a few other odds and ends leftover from the other posts in this series.
Jumping right in, there are a few quick-checks relative to IO utilization that you can see from the database side using DMV’s.
Two Quick-Check DMV’s
sys.dm_io_pending_io_requests — If you have a large quantity of pending IO, this is an early indicator that you will see other metrics above the allowable limits for you disk configuration. This is by no means a guarantee that you have an issue, however, is a good (quick) sanity check.
sys.dm_io_virtual_file_stats — I started the discussion about hotspots and how files are filled by SQL Server back in part IV of this series. This view provides lots of insight into how things are being allocated on a per-file basis.
This sql is intended as a starting point … not a final solution, your usage will depend largely on how many databases you want to look at, how to report the data, etc. The intent here is to show some output from a very useful and versatile DMV.
1) Create a table to grab the results from when done
CREATE TABLE #tmp_file_io
( dbname VARCHAR(256),
type_desc VARCHAR(50),
file_name VARCHAR(256),
read_xfer_ms INT,
write_xfer_ms INT )
2) setup some variables
DECLARE @count INT,
@num_files INT
SET @count = 1
3) How many files do we need to look at?
SELECT @num_files = (SELECT Count(*)
FROM sys.database_files)
4) Go collect the data
WHILE @COUNT <= @num_files
BEGIN
INSERT INTO #tmp_file_io
(dbname,
type_desc,
file_name,
read_xfer_ms,
write_xfer_ms)
SELECT Db_name(6) AS dbname, <–obvious hardcode here, if your looping over databases, etc
b.type_desc,
b.name,
io_stall_read_ms / num_of_reads AS ‘disk read xfer ms’,
io_stall_write_ms / num_of_writes AS ‘disk write xver ms’
FROM sys.Dm_io_virtual_file_stats(6, @count) a
INNER JOIN sys.database_files b
ON @count = b.file_id
SET @count = @count + 1
END
As a result of this, you will have a table with the IO rates by file. You will be happy that you followed some sort of naming convention when you created the files, because this will quickly point out issues within a filegroup caused by autogrowth of files, or uneven allocation to files. You don’t want to have gone through all the efforts to balance IO across 8 files, and then, by way of uneven allocation, have all the IO concentrated on a single file. Again, this query (by itself) does not tell you if you have a problem, you need to review this for trends as the data is collected from instance start. If you know you have queries that regularly access multiple years of data, across a large cross section of data, you would expect to see reasonably even distribution of IO across all the files in the filegroup.
There is certainly more detail, more script and more to write on this topic, and at some point, I am sure that I will continue with this series. For now, I am going to wrap this one up. There are a few things that I mentioned as I went through this series, and will be posting on all of these in the not too distant future.
The “outstanding” topics that I touched upon, but will be covered in the future include:
–Indepth look at compression
–Resource Governor – How to
–Automated index reorg/rebuild
–Query tuning and explain plans
–Memory configuration, and considerations
–SSIS… modular design, dimension loading, etc.
Trackbacks/Pingbacks
[…] Help – My disk performance VI […]
[…] Help – My disk performance VI […]
[…] performance IV (filegroups and files) Help — My disk performance V (Monitoring) Help — My disk performance VI (Additional monitoring and […]
[…] performance IV (filegroups and files) Help — My disk performance V (Monitoring) Help — My disk performance VI (Additional monitoring and […]