Sektor Disk
Disk memiliki ukuran sektor tetap, biasanya 512 byte atau 4096 byte pada beberapa disk modern; disk ini juga akan memiliki mode di mana mereka meniru sektor 512 byte. Disk akan memiliki trek dengan jumlah sektor yang bervariasi; trek lebih dekat ke bagian luar disk memiliki lebih banyak sektor karena mereka memiliki lebih banyak ruang untuk kepadatan bit yang diberikan. Ini memungkinkan penggunaan ruang disk yang lebih efisien; biasanya sebuah trek akan memiliki sekitar 1.000 sektor 512 byte pada disk modern.
Beberapa struktur pemformatan juga dapat menyertakan informasi koreksi kesalahan dalam detik, yang memanifestasikan dirinya dalam disk yang diformat level rendah dengan sektor 520 atau 528 byte. Dalam hal ini sektor ini masih memiliki 512 byte data pengguna. Baik Windows maupun Linux tidak mendukung ini secara langsung, meskipun i5OS (IBM iSeries) dan berbagai pengontrol SAN melakukannya.
Biasanya sektor / kepala / trek diterjemahkan ke dalam alamat blok logis; karena masalah historis dengan kompatibilitas ke belakang, geometri (kepala x sektor x trek) dilihat oleh sistem operasi (terutama pada disk IDE dan SATA) biasanya tidak ada hubungannya dengan struktur fisiknya.
Ukuran garis RAID
Pengontrol RAID dapat memiliki ukuran stripe untuk array menggunakan striping (misalnya RAID-5 atau RAID-10). Jika array memiliki (untuk exmaple) 128k strip, setiap disk memiliki 128k data yang berdekatan, dan kemudian set data berikutnya adalah pada disk berikutnya. Biasanya Anda dapat memperoleh sekitar satu strip per putaran disk, sehingga ukuran strip dapat memengaruhi kinerja pada beban kerja tertentu.
Penyelarasan Partisi
Partisi disk mungkin atau mungkin tidak sejajar dengan garis RAID, dan dapat menyebabkan penurunan kinerja karena terbaca jika tidak selaras. Beberapa sistem (mis. Server Windows 2008) akan secara otomatis mengkonfigurasi partisi untuk menyelaraskan dengan ukuran garis volume disk. Beberapa (misalnya server Windows 2003) tidak akan, dan Anda harus menggunakan utilitas partisi yang mendukung penyelarasan stripe untuk memastikannya.
Ukuran Blok Sistem File
Sistem file akan mengalokasikan blok penyimpanan dalam potongan dengan ukuran tertentu. Secara umum ini dapat dikonfigurasi - misalnya NTFS akan mendukung unit alokasi dari (IIRC) 4K ke 64K. Ketidaksejajaran partisi dan blok sistem file ke garis-garis RAID dapat menyebabkan pembacaan blok sistem file tunggal untuk menghasilkan beberapa akses disk di mana hanya satu yang diperlukan jika blok sistem file disejajarkan dengan benar dengan garis-garis RAID.
Ukuran Blok Database
Basis data akan mengalokasikan ruang dalam tabel atau indeks dalam beberapa ukuran blok yang diberikan. Dalam kasus SQL Server ini adalah 8K, dan 8K adalah default pada banyak sistem. Pada beberapa sistem seperti Oracle, ini dapat dikonfigurasi, dan pada PostgreSQL ini adalah opsi build-time. Pada sebagian besar sistem, alokasi ruang untuk tabel biasanya dilakukan dalam chunk yang lebih besar, dengan blok yang dialokasikan di dalam chunk tersebut.
Ketidaksejajaran blok sistem file dan alokasi data dapat menghasilkan banyak I / O untuk penulisan blok tunggal, yang dapat mendorong penalti kinerja.
I / O Chunking
Biasanya DBMS benar-benar akan melakukan I / O dalam potongan lebih dari satu blok. Misalnya, pada SQL Server, semua I / O dilakukan dalam potongan 8 blok, total 64k). Pada Oracle ini dapat dikonfigurasi. Inspeksi kasual dari dokumen PostgreSQL tidak mengungkapkan deskripsi spesifik apakah PostgreSQL melakukan ini, jadi saya tidak yakin bagaimana cara kerjanya pada platform ini.
Ketika potongan I / O lebih besar dari ukuran blok sistem file atau tidak selaras dengan batas RAID stripe, penulisan disk dari DB dapat menyebabkan banyak penulisan disk, yang menghasilkan penalti kinerja.
Penggunaan ruang disk
Tidak ada ruang disk yang terbuang - database I / O akan menggunakan satu atau lebih operasi I / O fisik pada disk untuk menyelesaikan - tetapi I / O yang disetel secara salah dapat menghasilkan inefisiensi yang akan memperlambat basis data. Hal-hal utama yang harus selaras adalah:
Garis-garis dan partisi RAID - partisi harus dimulai pada batas garis RAID.
Alokasi Filesystem I / O dan batas raid / partisi raid - batas RAID stripe harus sejajar dengan unit alokasi sistem file, dan harus merupakan kelipatan dari ukuran unit alokasi sistem file.
Ukuran penulisan disk dan ukuran unit alokasi sistem file. Seharusnya ada hubungan 1: 1 antara operasi I / O basis data dan operasi sistem I / O sistem file.
Misalignment tidak menciptakan masalah integritas data yang lebih besar daripada yang seharusnya ada. Basis data dan sistem file memiliki mekanisme untuk memastikan operasi sistem file bersifat atomik. Umumnya disk crash akan mengakibatkan hilangnya data tetapi tidak masalah integritas data.