ディスクセクター
ディスクのセクタサイズは固定されており、最近のディスクでは通常512バイトまたは4096バイトです。これらのディスクには、512バイトのセクターをエミュレートするモードもあります。ディスクにはさまざまなセクター数のトラックがあります。ディスクの外側に近いトラックは、指定されたビット密度のためのより多くの余地があるため、より多くのセクターを持っています。これにより、ディスク領域をより効率的に使用できます。通常、トラックは、最近のディスクでは1,000 512バイトセクターのようなものになります。
一部のフォーマット構造は、secotrsにエラー修正情報を含めることもできます。これは、520または528バイトセクターで低レベルフォーマットされているディスクに現れます。この場合、セクターにはまだ512バイトのユーザーデータがあります。WindowsもLinuxもこれを直接サポートしていませんが、i5OS(IBM iSeries)およびさまざまなSANコントローラーはサポートしています。
通常、セクター/ヘッド/トラックは論理ブロックアドレスに変換されます。下位互換性の歴史的な問題により、オペレーティングシステム(特にIDEおよびSATAディスク上)から見たジオメトリ(ヘッドxセクターxトラック)は通常、その物理構造とほとんど関係がありません。
RAIDストライプサイズ
RAIDコントローラーは、ストライピング(RAID-5またはRAID-10など)を使用してアレイのストライプサイズを持つことができます。アレイに(例として)128kストライプがある場合、各ディスクには128kの連続したデータがあり、次のデータセットは次のディスク上にあります。通常、ディスクの1回転あたり約1つのストライプが得られると予想できるため、ストライプサイズが特定のワークロードのパフォーマンスに影響を与える可能性があります。
パーティションの調整
ディスクパーティションは、RAIDストライプと正確に位置合わせされている場合とされていない場合があり、位置合わせされていない場合、分割読み取りによりパフォーマンスが低下する可能性があります。一部のシステム(Windows 2008サーバーなど)では、ディスクボリュームのストライプサイズに合わせてパーティションが自動的に構成されます。一部(Windows 2003サーバーなど)はサポートしていません。そのためには、ストライプアライメントをサポートするパーティションユーティリティを使用する必要があります。
ファイルシステムのブロックサイズ
ファイルシステムは、特定のサイズのチャンクでストレージブロックを割り当てます。通常、これは構成可能です。たとえば、NTFSは(IIRC)4Kから64Kのアロケーションユニットをサポートします。パーティションとファイルシステムブロックのRAIDストライプへのミスアライメントにより、単一のファイルシステムブロックの読み取りで複数のディスクアクセスが生成され、ファイルシステムブロックがRAIDストライプと正しくアライメントされていれば、1つだけ必要になります。
データベースブロックサイズ
データベースは、特定のブロックサイズでテーブルまたはインデックスに領域を割り当てます。SQL Serverの場合、これは8Kであり、多くのシステムでは8Kがデフォルトです。Oracleなどの一部のシステムでは、これは構成可能であり、PostgreSQLではビルド時のオプションです。ほとんどのシステムでは、テーブルへのスペース割り当ては通常、より大きなチャンクで行われ、ブロックはそれらのチャンク内に割り当てられます。
ファイルシステムとデータアロケーションブロックのミスアラインメントは、単一のブロック書き込みに対して複数のI / Oを生成する可能性があり、これによりパフォーマンスが低下する可能性があります。
I / Oチャンキング
通常、DBMSは実際には複数のブロックのチャンクでI / Oを実行します。たとえば、SQL Serverでは、すべてのI / Oは8ブロックのチャンクで行われ、合計で64kです)。Oracleでは、これは構成可能です。PostgreSQLのドキュメントを簡単に調べても、PostgreSQLがこれを行うかどうかの具体的な説明は明らかになっていないため、このプラットフォームでどのように機能するかはわかりません。
I / Oチャンクがファイルシステムのブロックサイズよりも大きい場合、またはRAIDストライプの境界と整合していない場合、DBからのディスク書き込みにより複数のディスク書き込みが発生し、パフォーマンスが低下する可能性があります。
ディスク容量の使用
ディスク領域が浪費されることはありません。データベースI / Oは、ディスク上で1つ以上の物理I / O操作を使用して完了します。ただし、I / Oを正しく調整しないと、非効率になり、データベースの速度が低下します。調整が必要な主なものは次のとおりです。
RAIDストライプとパーティション-パーティションはRAIDストライプ境界で始まる必要があります。
ファイルシステムI / O割り当てとRAIDストライプ/パーティション境界-RAIDストライプ境界は、ファイルシステムアロケーションユニットに合わせる必要があり、ファイルシステムアロケーションユニットサイズの倍数である必要があります。
ディスク書き込みサイズとファイルシステムアロケーションユニットサイズ。データベースI / O操作とファイルシステムI / O操作の間には1対1の関係があるはずです。
ミスアライメントは、他の場合よりも大きなデータ整合性の問題を引き起こしません。データベースとファイルシステムには、ファイルシステムの操作がアトミックであることを確認するためのメカニズムがあります。通常、ディスククラッシュはデータの損失につながりますが、データの整合性の問題にはなりません。