La regola empirica che uso per l'IO del disco è:
75 IOP per mandrino per SATA.
150 IOP per mandrino per FC / SAS
1500 IOP per mandrino per SSD.
Oltre agli IOP per array, vengono considerati anche gli IOP per terabyte. Non è raro finire con un pessimo rapporto IOP per TB se si fa SATA + RAID6. Questo potrebbe non sembrare troppo, ma spesso finirai con qualcuno che individua "spazio libero" su un array e vuoi usarlo. È comune per le persone acquistare concerti e ignorare gli iop, quando è vero il contrario nella maggior parte dei sistemi aziendali.
Quindi aggiungere il costo della penalità di scrittura per RAID:
- 2 per RAID1, RAID1 + 0
- 4 per RAID5 (o 4)
- 6 per RAID6.
La penalità di scrittura può essere parzialmente mitigata dalle grandi cache di scrittura e nelle giuste circostanze. Se hai un sacco di I / O di scrittura sequenziale (come i registri DB) puoi ridurre in modo significativo tali penali di scrittura su RAID 5 e 6. Se riesci a scrivere una riga intera (ad esempio un blocco per mandrino) non devi leggere per calcolare la parità.
Assumi un set RAID 6 8 + 2. Nel normale funzionamento per un singolo IO di scrittura è necessario:
- Leggi il blocco 'aggiornato'.
- Leggi il primo blocco di parità
- Leggi il secondo blocco di parità
- Ricalcola la parità.
- scrivere tutti 3. (6 IO).
Con una scrittura nella striscia intera memorizzata nella cache, ad esempio 8 "blocchi" consecutivi delle dimensioni della striscia RAID, è possibile calcolare la parità sull'intero lotto, senza bisogno di una lettura. Quindi hai solo bisogno di 10 scritture: una per ogni dato e due parità.
Questo rende la tua penalità di scrittura 1.2.
È inoltre necessario tenere presente che scrivere IO è facile da memorizzare nella cache, non è necessario scaricarlo immediatamente sul disco. Funziona con un limite di tempo morbido - fintanto che in media le scritture in entrata non superano la velocità del mandrino, sarà tutto in grado di funzionare alla "velocità della cache".
D'altra parte, l'IO di lettura presenta un vincolo di difficoltà: non è possibile completare una lettura fino a quando i dati non sono stati recuperati. Gli algoritmi di cache di lettura e caricamento della cache diventano importanti a quel punto: i modelli di lettura prevedibili (ad es. Sequenziali, come si otterrebbe dal backup) possono essere previsti e precaricati, ma i modelli di lettura casuali non possono.
Per i database, in genere suggerirei di presumere che:
la maggior parte dell'IO del "database" è una lettura casuale. (ad es. non valido per l'accesso casuale). Se puoi permetterti il sovraccarico, RAID1 + 0 è buono, perché i dischi con mirroring danno due fonti di letture.
la maggior parte dell'IO 'log' è in scrittura sequenziale. (ad es. buono per la memorizzazione nella cache e contrariamente a quanto suggeriranno molti DBA, probabilmente si desidera RAID50 anziché RAID10).
Il rapporto tra i due è difficile è difficile da dire. Dipende da cosa fa il DB.
Poiché l'IO di lettura casuale è il caso peggiore per la memorizzazione nella cache, è dove l'SSD fa davvero la sua parte - molti produttori non si preoccupano della memorizzazione nella cache dell'SSD perché si tratta comunque della stessa velocità. Quindi, specialmente per database e indici temporanei, SSD offre un buon ritorno sugli investimenti.