Quantcast
Viewing all articles
Browse latest Browse all 15889

SQL Server 2005 IO Problem

We have a database of 60 Gb the performance of it is very low. I want to find out if there is any IO problem with the server.

I have run the below

WITH DBIO AS
(
 SELECT
   IVFS.database_id AS db,
   CASE WHEN MF.type = 1 THEN 'log' ELSE 'data' END AS file_type,
   SUM(IVFS.num_of_bytes_read +IVFS.num_of_bytes_written) AS io,
   SUM(IVFS.io_stall) AS io_stall
 FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS IVFS
   JOIN sys.master_files AS MF
     ON IVFS.database_id = MF.database_id
     AND IVFS.file_id = MF.file_id
 GROUP BY IVFS.database_id, MF.type
)
SELECT db, file_type,
  CAST(1. *io/ (1024 *1024) AS DECIMAL(12, 2))AS io_mb,
  CAST(io_stall /1000. AS DECIMAL(12,2))AS io_stall_s,
  CAST(100.*io_stall / SUM(io_stall)OVER()
       AS DECIMAL(10,2))AS io_stall_pct,
  ROW_NUMBER()OVER(ORDER BY io_stall DESC) AS rn
FROM DBIO
ORDER BY io_stall DESC;

**************************

OUT PUT

db file_type io_mb io_stall_s io_stall_pct
16 data 327066.7 183437.94 50.29
44 data 118815.13 66027.05 18.1
2 data 213056.17 39963.53 10.96
38 data 13348.57 11457.62 3.14
44 log 63006.1 10820.08 2.97
42 data 8290.96 8362.68 2.29
43 data 21965.2 8159.32 2.24
1 data 34257.02 7038.57 1.93
4 data 20166.23 6837.4

WITH Waits AS
(
  SELECT
    wait_type,
    wait_time_ms  /1000. AS wait_time_s,
         100. * wait_time_ms / SUM(wait_time_ms)OVER()AS pct,
         ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS rn
      FROM sys.dm_os_wait_stats
      WHERE wait_type NOT IN ('CLR_SEMAPHORE','LAZYWRITER_SLEEP','RESOURCE_QUEUE','SLEEP_TASK'
,'SLEEP_SYSTEMTASK','SQLTRACE_BUFFER_FLUSH','WAITFOR', 'LOGMGR_QUEUE','CHECKPOINT_QUEUE'
,'REQUEST_FOR_DEADLOCK_SEARCH','XE_TIMER_EVENT','BROKER_TO_FLUSH','BROKER_TASK_STOP','CLR_MANUAL_EVENT'
,'CLR_AUTO_EVENT','DISPATCHER_QUEUE_SEMAPHORE', 'FT_IFTS_SCHEDULER_IDLE_WAIT'
,'XE_DISPATCHER_WAIT','SQLTRACE_INCREMENTAL_FLUSH_SLEEP', 'XE_DISPATCHER_JOIN')
)

      --filter out additional irrelevant waits

SELECT
  W1.wait_type,
  CAST(W1.wait_time_s AS DECIMAL(12,2))AS wait_time_s,
  CAST(W1.pct AS DECIMAL(12,2))AS pct,
  CAST(SUM(W2.pct)AS DECIMAL(12,2))AS running_pct
FROM Waits AS W1
  JOIN Waits AS W2
    ON W2.rn<= W1.rn
GROUP BY W1.rn, W1.wait_type, W1.wait_time_s, W1.pct
HAVING SUM(W2.pct)-W1.pct < 90-- percentage threshold
ORDER BY W1.rn;

************************

OUTPUT

wait_type wait_time_s pct running_pct
LCK_M_S 31988.02 16.23 16.23
WRITELOG 22637.25 11.49 27.72
BACKUPBUFFER 21077.48 10.7 38.42
ASYNC_IO_COMPLETION 20751.2 10.53 48.95
BACKUPIO 15845.41 8.04 57
BACKUPTHREAD 14283.64 7.25 64.24
PAGEIOLATCH_SH 13400.13 6.8 71.05
OLEDB 11090.91 5.63 76.67
ASYNC_NETWORK_IO 8114.44 4.12 80.79
IO_COMPLETION 7988.63 4.05 84.85
LCK_M_SCH_S 7455.95 3.78 88.63
SOS_SCHEDULER_YIELD 6773.13 3.44 92.07

Please help me to drill down to exact problem area.


Viewing all articles
Browse latest Browse all 15889

Trending Articles