sqlio.exe jak správně testovat sql

Možná už jste někdy potřebovali ověřit zda má sql server dobře nakonfigurované diskové úložiště. Pokud ano, pak jste jistě uvažovali jak na to. Které nástroje použít, s jakými parametry případně co vám výsledky napoví.

Vhodným nástrojem může být sqlio.exe který doporučuje microsoft.

@echo off
sqlio -kW -s60 -frandom -t8 -o8 -b8 -LS -Fparam.txt timeout /T 60
sqlio -kR -s60 -frandom -t8 -o8 -b8 -LS -Fparam.txt timeout /T 60
pause

Zajímavými parametry jsou

-kW / -kR – budeme číst nebo zapisovat

-f random – typ zápisu random nebo seqential – pro sql server random

-s time – délka průběhu testu

timeout /T 60 – prodleava mezi diskovými požadavky u které microsoft doporučuje optimálně 60 sec.

 

Pokud ladíte problémy s disky v rámci SQL Serveru, pak by vám měla pomoci také zajímavá SQL procedura sys.dm_io_virtual_file_stats :

select 
 CASE WHEN [num_of_reads] = 0 THEN 0 ELSE ([io_stall_read_ms]/[num_of_reads]) END [ReadLatency],
 CASE WHEN [io_stall_write_ms] = 0 THEN 0 ELSE ([io_stall_write_ms]/[num_of_writes]) END [WriteLatency],
 CASE WHEN ([num_of_reads] = 0 AND [num_of_writes] = 0) THEN 0 ELSE ([io_stall]/([num_of_reads] + [num_of_writes])) END [Latency],
 --avg bytes per IOP
 CASE WHEN [num_of_reads] = 0 THEN 0 ELSE ([num_of_bytes_read]/[num_of_reads]) END [AvgBPerRead],
 CASE WHEN [io_stall_write_ms] = 0 THEN 0 ELSE ([num_of_bytes_written]/[num_of_writes]) END [AvgBPerWrite],
 CASE WHEN ([num_of_reads] = 0 AND [num_of_writes] = 0) THEN 0 ELSE (([num_of_bytes_read] + [num_of_bytes_written])/([num_of_reads] + [num_of_writes]))  END [AvgBPerTransfer],
    DB_NAME(database_id) [DB]
from sys.dm_io_virtual_file_stats (null, null) 
order by latency desc

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *