Una scheda tecnica confronta megabyte al secondo, e un server web non legge quasi mai un file grande da cima a fondo. Legge migliaia di piccoli pezzi insieme - righe, pagine di indice, file di sessione - ed è una misura completamente diversa.
Il numero che conta
- Un disco a piatti - qualche centinaio di operazioni al secondo, perché un braccio fisico deve spostarsi.
- Un SSD SATA - decine di migliaia, limitate da un'interfaccia pensata per i dischi a piatti.
- L'NVMe - centinaia di migliaia, in dialogo diretto con il processore su molte code insieme.
La profondità di coda è la differenza vera: il SATA ha una coda da 32; l'NVMe ha migliaia di code, profonde migliaia. Venti worker PHP che chiedono qualcosa tutti nello stesso istante sono esattamente quella forma.
Dove si sente
- Un database che fa tante piccole letture: quasi ogni pagina di un CMS.
- Le sessioni e le cache scritte come file.
- Un backup, un'importazione o una cancellazione grande, dove tutto il lavoro è fatto di piccole operazioni.
Dove non si sente
Se l'insieme di lavoro sta in memoria, il disco viene appena sfiorato e l'NVMe cambia pochissimo. Comprare archiviazione più veloce quando la risposta è più RAM è un errore comune e costoso.
Misuri il suo
fio --name=rand --rw=randread --bs=4k --size=1G --numjobs=4 --iodepth=32 --runtime=30 --time_based --group_reporting
Questo misura piccole letture casuali in profondità, che è lo schema prodotto da un database. I test sequenziali misurano qualcosa che il suo server non fa mai.
Guardi prima l'iowait:
top, il valore %wa. Vicino a zero vuol dire che l'archiviazione non è il suo collo di bottiglia, qualunque disco ci sia.
