SSD: det självklara valet för transaktionsloggar?

2012-05-28

I takt med att mina kunder köper disksystem som kan hantera SSD-diskar brukar idén om att lägga transaktionsloggar på dem dyka upp. Jag är av åsikten att det dock kan vara en dålig idé:

Tyvärr lider SSD-diskar av att skrivoperationer på block som inte är tomma kan bli rejält dyra. Enligt Guy Harrison på Quest Software som gjort en hel del tester på SSD och skriv/läsprestanda så tar en läsoperation cirka 25 mikrosekunder. En skrivoperation på ett tomt block kostar mer men inte orimligt mycket – cirka 250 mikrosekunder. En skrivoperation på ett block som innehåller data däremot – uppåt 2000 mikrosekunder (eller ännu värre). Detta på grund av att disken behöver rensa det gamla datat innan det nya datat flyttar in - något som disken inte alltid lyckas med inom rimlig tid.
Större tillverkare av dedikerade SSD-disksystem (RamSan, Virident, FusionIO och kompani) har algoritmer för att se till att skrivning alltid sker på tomma block, och sedan låter man en garbage collectionrutin ta hand om att städa i efterhand. Denna typ av garbage collection finns generellt sett inte i ett vanligt SAN med SSD-diskar, varför diskprestandan kan plötsligt bli katastrofalt dålig om skrivlasten börjar drabba block som måste rensas ut innan de kan användas.
Det största problemet för transaktionsloggar är inte hög skrivtid per se – ja, det drar ner prestandan, men det är i alla fall konsekvent. Det stora problemet med SSD, skrivningar och eventuellt icke tomma block är att prestandan KAN gå ner dramatiskt utan någon uppenbar anledning, något som databaser inte trivs med.

På Oracle är det lättare att differentiera logggtrafik från redodata, då Oracle kör med dels en transaktionslogg (REDO LOG) och dels ett separat tablespace för undo-data (UNDO Tablespace). SQL Server buntar ihop båda två till TRANSACTION LOG. Oracles REDO LOG är i princip enbart skrivning (läsning vid recovery, eller eventuellt om man har någon form av log shipping, motsv), men SQL Servers TRANSACTION LOG är både skriv och läs.

En kontinuerlig ström av skrivoperationer är precis vad en skrivcache är lämpad att hantera – därmed kommer en normal magnetisk disk sannolikt leverera en högre och mer konsekvent prestanda än en SSD-disk för just transaktionsloggar.