SQLIO.exe is a tool provided by Microsoft that can be used to determine the I/O capacity of a given configuration.
Installation:->
Step 1. Configure Param.txt
The
first step is to modify the file param.txt to tell SQLIO
where
to find its test file which is named testfile.dat.
Parameter |
Description |
Values |
file name |
Name of the test file |
R:\testfile.dat |
number of threads |
Size of the thread pool. |
8 |
mask |
Affinity mask to bind operations against this
file to particular CPU's. I don't use this and just use 0x0 for all CPU's |
0x0 |
file size |
The size in MB. This should be roughly the size
of your database and always larger than your cache, unless you want to test
just the cache. I usually use 20 GB. |
20480 |
Step 2. Create Testfile
The next step is to run SQLIO once, so that
it can create the testfile.dat
sqlio -kW -s5 -fsequential -o4 -b64 -Fparam.txt
Switch |
Description |
Example |
-d |
The drive or drives to work on. There should
already be a testfile.dat on that drive as specified in the param.txt. There
can be multiple drive letters, such as in "-dEFG". I test only one
drive at a time. |
-DL |
-B |
Controls buffering. N for no buffering, H for
only hardware controller buffering, S for Windows software buffering, or Y
for both hardware and software buffering. To match what SQL Serve is doing,
use -BH for just hardware buffering. |
-BH |
-k |
Operation to perform. W for write, R for read |
-kW |
-f |
Random or Sequential I/O. -frandom chooses
the block randomly across the file. -fsequential reads or
writes sequentially. There are additional choices for testing specific block
sizes |
-frandom |
-t |
Threads to run simultaneously. |
0 |
-o |
Outstanding requests on each thread. SQL Server
threads issue read requests and then wait, so their typical depths is 1.
However, the Lazy Writer issues many write requests. So a switch of
"-o8" would always keep 8 I/O operations queued on each thread.
You'll have to work on balancing the number of threads and the number of
outstanding requests on each thread in order to keep the disk sub system
busy. I usually increase this number until the disks become saturated. |
0 |
-s |
Seconds to run. This should be long enough to
fill any cache and then build the queue to it's maximum before processing
levels into a steady state. 90 seconds is usually sufficient to get a good
picture of what the disks are capable of |
90 |
-b |
Block size of each I/O in kilobytes. SQL Server
reads and writes to data files in 64K blocks. |
0 |
Now Testing Time. All the test I have done on Clota-Lab03
Write Test
Random
Writes Test (Perform 4 times as below)
sqlio -dR -BH -kW -frandom -t1 -o1 -s90 -b64 testfile.dat
sqlio -dR -BH -kW -frandom -t2 -o1 -s90 -b64 testfile.dat
sqlio -dR -BH -kW -frandom -t4 -o1 -s90 -b64 testfile.dat
sqlio -dR -BH -kW -frandom -t8 -o1 -s90 -b64 testfile.dat
Note: I am getting different
results based on t values.
==CPU Config
CPU
Cores 2
Sockets
2
Core per
Socket 1
sqlio -dR -BH -kW -frandom -t1 -o1 -s90 -b64 testfile.dat
IOs/sec: 2670.30
MBs/sec: 166.89
sqlio -dR -BH -kW -frandom -t2 -o1 -s90 -b64 testfile.dat
IOs/sec: 4154.49
MBs/sec: 259.65
sqlio -dR -BH -kW -frandom -t4 -o1 -s90 -b64 testfile.dat
Test Result 1
IOs/sec: 4125.65
MBs/sec: 257.85
Test Result 2
IOs/sec: 1553.31
MBs/sec: 97.08
Test Result 3
IOs/sec: 1830.55
MBs/sec: 114.40
sqlio -dR -BH -kW
-frandom -t8 -o1 -s90 -b64 testfile.dat
Test Result 1
IOs/sec: 1567.55
MBs/sec: 97.97
Test Result 2
IOs/sec: 1185.25
MBs/sec: 74.07
==CPU Config
CPU
Cores 2
Sockets
2
Core per
Socket 1
sqlio -dR -BH -kW
-frandom -t1 -o1 -s90 -b64 testfile.dat
IOs/sec: 2658.63
MBs/sec: 166.16
sqlio -dR -BH -kW
-frandom -t2 -o1 -s90 -b64 testfile.dat
IOs/sec: 4373.91
MBs/sec: 273.36
sqlio -dR -BH -kW
-frandom -t4 -o1 -s90 -b64 testfile.dat
Test Result 1
IOs/sec: 3711.18
MBs/sec: 231.94
Test Result 2
IOs/sec: 5792.05
MBs/sec: 362.00
Test Result 3
IOs/sec: 3534.93
MBs/sec: 220.93
sqlio -dR -BH -kW
-frandom -t8 -o1 -s90 -b64 testfile.dat
Test Result 1
IOs/sec: 2967.46
MBs/sec: 185.46
Test Result 2
IOs/sec: 3558.57
MBs/sec: 222.41
@t1
@t2
@t8
@b=4 (Block size 4KB)
Note: Here IO pre second are more
but throughput per second is less.
Read Test
Random Reads Test
No comments:
Post a Comment
If you have any doubt or question, please contact us.