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.