Settori del disco
Un disco ha una dimensione di settore fissa, normalmente 512 byte o 4096 byte su alcuni dischi moderni; questi dischi avranno anche una modalità in cui emulano settori a 512 byte. Il disco avrà tracce con un numero variabile di settori; le tracce più vicine all'esterno del disco hanno più settori in quanto hanno più spazio per una data densità di bit. Ciò consente un utilizzo più efficiente dello spazio su disco; in genere una traccia avrà qualcosa come 1.000 settori da 512 byte su un disco moderno.
Alcune strutture di formattazione possono anche includere informazioni sulla correzione degli errori nei secotrs, che si manifestano nei dischi formattati a basso livello con settori a 520 o 528 byte. In questo caso il settore ha ancora 512 byte di dati utente. Né Windows né Linux lo supportano direttamente, anche se i5OS (IBM iSeries) e vari controller SAN lo fanno.
Normalmente il settore / head / track viene tradotto in un indirizzo di blocco logico; a causa di problemi storici di compatibilità con le versioni precedenti, la geometria (teste x settori x tracce) vista dal sistema operativo (in particolare sui dischi IDE e SATA) normalmente ha poco a che fare con la sua struttura fisica.
Dimensione della striscia RAID
Un controller RAID può avere una dimensione di striping per un array usando lo striping (ad esempio RAID-5 o RAID-10). Se l'array ha (per esempio) una striscia da 128k, ogni disco ha 128k di dati contigui e quindi il prossimo set di dati si trova sul disco successivo. Normalmente ci si può aspettare di ottenere circa uno stripe per giro del disco, quindi la dimensione dello striping può influire sulle prestazioni su determinati carichi di lavoro.
Allineamento delle partizioni
Una partizione del disco può o meno allinearsi esattamente con una striscia RAID e può causare un peggioramento delle prestazioni a causa delle letture divise se non è allineata. Alcuni sistemi (ad esempio il server Windows 2008) configureranno automaticamente le partizioni per allinearle alle dimensioni della striscia del volume del disco. Alcuni (ad es. Server Windows 2003) non lo faranno e devi usare un'utilità di partizione che supporti l'allineamento delle strisce per assicurarti che lo facciano.
Dimensione blocco file system
Il file system assegnerà blocchi di archiviazione in blocchi di una determinata dimensione. Generalmente questo è configurabile, ad esempio NTFS supporterà unità di allocazione da (IIRC) da 4K a 64K. Il disallineamento di partizioni e blocchi del file system alle strisce RAID può causare la lettura di un singolo blocco del file system in modo da generare più accessi al disco in cui ne sarebbe necessario solo uno se i blocchi del file system fossero allineati correttamente con le strisce RAID.
Dimensione blocco database
Il database allocherà lo spazio in una tabella o indice in una determinata dimensione di blocco. Nel caso di SQL Server questo è 8K e 8K è l'impostazione predefinita su molti sistemi. Su alcuni sistemi come Oracle, questo è configurabile e su PostgreSQL è un'opzione di build-time. Sulla maggior parte dei sistemi, l'allocazione dello spazio alle tabelle viene normalmente eseguita in blocchi più grandi, con blocchi allocati all'interno di tali blocchi.
Il disallineamento del file system e dei blocchi di allocazione dei dati può generare più I / O per una singola scrittura del blocco, il che può determinare una penalità di prestazione.
I / O Chunking
Normalmente un DBMS eseguirà effettivamente il suo I / O in blocchi di più di un blocco. Ad esempio, su SQL Server, tutto l'I / O viene eseguito in blocchi di 8 blocchi, 64k in totale). Su Oracle questo è configurabile. L'ispezione casuale dei documenti PostgreSQL non rivela una descrizione specifica del fatto che PostgreSQL faccia questo, quindi non sono sicuro di come funzioni su questa piattaforma.
Quando il blocco I / O più grande della dimensione del blocco del file system o è disallineato con i limiti dello stripe RAID, una scrittura su disco dal DB può causare scritture su disco multiple, il che genera una penalità delle prestazioni.
Utilizzo dello spazio su disco
Non viene sprecato spazio su disco - il completamento dell'I / O del database utilizzerà una o più operazioni di I / O fisico sul disco per il completamento - ma l'I / O erroneamente ottimizzato può generare inefficienze che rallenteranno il database. Le cose principali che devono essere allineate sono:
Strisce e partizioni RAID: la partizione deve iniziare su un limite di strisce RAID.
Allocazione I / O del filesystem e limiti della partizione / striscia raid: un limite della striscia RAID deve allinearsi con un'unità di allocazione del filesystem e deve essere un multiplo della dimensione dell'unità di allocazione del filesystem.
Dimensione di scrittura del disco e dimensione dell'unità di allocazione del filesystem. Dovrebbe esserci una relazione 1: 1 tra le operazioni di I / O del database e le operazioni di I / O del filesystem.
Il disallineamento non crea un problema di integrità dei dati maggiore di quanto sarebbe altrimenti presente. Il database e il file system dispongono di meccanismi per garantire che le opzioni del file system siano atomiche. Generalmente un arresto del disco comporterà la perdita di dati ma non problemi di integrità dei dati.