Idag ska vi titta på hur vi kan testa disk prestanda med SQLIO som är ett litet konsol program som kan laddas ner kostnadsfritt från Microsoft.
SQLIO är ett litet konsolprogram som kan laddas ner kostnadsfritt från Microsoft:
http://www.microsoft.com/en-us/download/details.aspx?id=20163
Namnet till trots så har det ingen koppling till SQL Server och kan användas helt fristående. Om du kör i ett SAN som används av andra system bör du meddela din SAN-administratör eftersom belastningen kan påverka andra, tänk även på att om server du testar på påverkas.
Gör så här för att komma igång:
- Ladda ner från ovan URL.
- Installera i valfri mapp på server som ska testas, programmet är 32 bitars och fungerar i Windows 2000 och nyare.
- Öppna param.txt och justera sökväg till testfil till den disk du ska testa. De sista siffrorna anger storlek på testfil, 102400 = 100 GB. Kommentar börjar med #. Jag rekommenderar att du använder en fil som är minst 3 ggr så stor som cache minnet i SAN/kontroller.
- Kör create.cmd för att skapa filen (tar ett tag) eller snabbare starta Powershell och kör "FSUTIL.EXE file createnew D:testfile.dat (100GB)" och " FSUTIL.EXE file setvaliddata D:testfile.dat (100GB)". Eftersom powershell-metoden använder fast init är den mycket snabbare.
- Skapa en kommando fil med dina tester, nedan är 8 tester blandat random och sekventiellt, läs/skriv samt olika buffer storlekar.
sqlio -kW -t8 -s120 -o8 -frandom -b8 -BH -LS d:TestFile.dat
sqlio -kR -t8 -s120 -o8 -frandom -b8 -BH -LS d:TestFile.dat
sqlio -kW -t8 -s120 -o8 -frandom -b64 -BH -LS d:TestFile.dat
sqlio -kR -t8 -s120 -o8 -frandom -b64 -BH -LS d:TestFile.dat
sqlio -kW -t8 -s120 -o8 -fsequential -b8 -BH -LS d:TestFile.dat
sqlio -kR -t8 -s120 -o8 -fsequential -b8 -BH -LS d:TestFile.dat
sqlio -kW -t8 -s120 -o8 -fsequential -b64 -BH -LS d:TestFile.dat
sqlio -kR -t8 -s120 -o8 -fsequential -b64 -BH -LS d:TestFile.dat
- Glöm inte justera sökväg till testfilen så att det passar disk som ska testas. Parametrar till SQLIO:-k (W)rite eller (R)ead
-t antal trådar. Jag rekommenderar en tråd / CPU core.
-s hur många sekunder testet kör
-o antal utstående förfrågningar dvs hur mycket som står i kö justera denna för att nå optimal belastning
-f random eller sequential,
-b storlek på I/O paket i KB
-B buffer N=Ingen Y=både hård/mjukvaru buffer H=hårdvaru buffer S=mjukvaru buffer
-LS visa latency information - Kör din testfil och spara ner resultat i en textfil, justera filnamn beroende på inställningar:test.cmd > result_servernamn_settings_date_time.txtAnvänd förslagsvis Resource Monitor för att övervaka disk prestanda, här ser vi att sqlio.exe skriver 981 mb/sekund (nej det är inte en mekanisk disk…)
- Öppna textfilen med resultat och leta upp ”IOs/sec”, ”MBs/sec” samt ”Avg Latency(ms)”. Gjorde du 8 tester så har du alltså 8 resultat i filen, förslagsvis sparar du ner nyckelvärden till en Excel och gör lite tjusiga diagram. Upprepa med olika inställningar och diskar. Är det möjligt testa även olika RAID nivåer. Generellt gäller att använda RAID1 för tlog och RAID5 för data för att få en bra kombination av prestanda och ekonomi.
/Fredrik