onsdag 5 augusti 2020

SQL i Azure VM

Har på senare tid sett kunder som satt upp SQL i Azure VM. Ofta med perfomance problem som följd. I denna artikel vill jag beskriva hur viktigt det är att göra det rätt när det gäller disk och typ av VM. 
Jag upplever att man inte riktigt vet vilka VM typer man skall använda och inte heller hu man skall konfigurera diskarna för optimal perfomance.

I denna artikel beskrivs best practices kring att sätta upp och konfigurera VM i Azure.

Beskrivning kring diskar och vad dom klara av finns i denna artikel https://docs.microsoft.com/sv-se/azure/virtual-machines/windows/disks-types 
Titta man på tex Premium SSD disken P30 som få ses som ett rätt vanligt val för en standard SQL så skall den klara 5000 IOP-s och det är helt ok. Men vad är svarstiderna på denna disktyp? Dokumentet säger "Premium SSD disks are designed to provide low single-digit millisecond latencies and target IOPS and throughput described in the preceding table 99.9% of the time." Det kan då tyckas att det skall vara ok. Men efter att sett flera kunders installationer där man satt upp datadisken med en disk så är jag inte helt övertygad. Ser ofta dåliga svarstider med ett genomsnitt på 20-30 ms och stora spikar. Vad händer då med svarstiderna om man gör enligt Microsofts bets practices och stripa fler diskar? Jag vet att man generellt kan ökar IOPS-en upp till vad VM typen sen klara av och lite kring vad lasten är på övriga diskar. Jag blev nyfiken och beslöt göra ett test kring det för att se skillnad i främst svarstider men också generellt benchmarking.

För testet så använder jag en VM E8as_v4 (8 VCPU and 64GB RAM). Servern är uppsatt enligt best practices med Tempdb på den lokala temporära disken som varje VM har. Transactionsloggen på egen disk av samma typ som datadisken, utan någon cache konfigurerad. Datadisken är sen en P30 i ena fallet och två P30 mjukvarustripade i Windows i andra fallet.
Sen har jag kört HammerDB från en annan VM i samma Azure nät. Det olika testerna är från 1 upp till 256 simulerade användare. HammerDB är konfigurerad med 80 Warehouses (8 cores * 10).  Nedan ses antalet TPM/sec med en disk respektive två och tre stripade diskar. Testade också olika cache inställningar på datadisken men just i detta fall spelade detta mindre roll. Fler än två diskar spelade troligen ingen roll pga av valet av VM skulle jag tro.

Som man ser så är det en betydande performance skillnad på konfigurationerna.


Nedan syns skillnaden på svarstiderna mellan två respektive en disk. Man kan tydligt se att svarstiden ligger stabilt med två diskar medans konfigureringen med en disk inte alls klara av lasten. (Den svarta linjen).




Min slutsats kring detta är att man förmodligen inte kan använda enbart en disk för datadisken om du skall ha någorlunda acceptabla svarstider på disk.