web-dev-qa-db-ja.com

MySQL InnoDBext3ブロックサイズ

InnoDBを使用したMySQL5.6のext3ファイルシステムのブロックサイズに関する推奨事項を探しています。

CentOS5.4の実行VM VMware ESXi 5、VMFS 5データストア、NetApp FibreChannel LUN(4kチャンクサイズ)。O_DIRECT、innodb_flush_log_at_trx_commit = 2、14Gバッファープール、およびdbの使用= OLTP大量のデータを処理する大きなクエリがときどき発生します。テーブルの中には、数GB以上のものもあれば、非常に小さいものもあります。テーブルファイルとibdataファイルは1つのファイルシステムにあり、binlogsとib_logfilesは別のファイルシステムにあるため、ブロックサイズが異なります。

InnoDBが16kのブロックサイズを使用していることを理解していますが、これはユーザーが構成できないため、ext3のブロックサイズをデフォルトの4kではなく、一致するように設定する価値があるかどうか疑問に思います。

ありがとう!

2
carillonator

ファイルシステムのブロックサイズがInnoDBに悪影響を与えることはありません。ファイルシステムのオーバーヘッドが非常に小さいため、CPUにバインドされたパフォーマンスのほんの一部については話していません。心配する必要があるのは、IOパフォーマンスです。

MysqlがディスクからInnodDBページを読み取る必要がある場合、ファイルのiノード構造にアクセスします。 ext3 iノードには、15ブロックへの参照が含まれています。最初の12は、データブロックを直接指します。残りの3つはブロックを指し、他のブロック参照を含みます。これも直接または間接の場合があります。

したがって、InnoDBページがファイルの最初(12 * 4)= 48KBにある場合、2 IO操作:iノード用に1、データブロック用に2番目、最初にある場合は2番目にフェッチされます。 (12 * 4 + 1024)* 4 = 4.2MB、3 ops、(12 + 1024 + 1024 ^ 2)* 4 = 4GB-4 ops、(12 * bs + 1024 + 1024 ^ 2 + 1024 ^ 3)* 4 = 4TB-5オペレーション。

1024は、4kブロック内の4バイトブロック参照の数です。

ext blocks

先読み(書き込みの事前割り当て)とキャッシュにより、この数が減り、一度に複数のブロックの読み取り/書き込みが可能になります。

4kのブロックサイズはLinuxメモリのページサイズと同じであるため、ページキャッシュのコーディングが容易になります。

Innodbページが最初に書き込まれるとき、ext3は8つのシーケンシャルブロック(32kb)を事前に割り当て、そのうちの4つを書き込み、他の4つは破棄されます(またはもう1つのページに使用されます)。このページへのすべての変更は同じブロックに保存されます。

1ブロックはディスクに保存するデータの最小単位であるため、ブロックサイズを小さくすると、ディスク領域を節約できるという利点しかありません。

それを増やすと(それを行うためのカーネルパッチがいくつかあります)、非常に大きなファイルのパフォーマンスは向上しますが、ご想像のとおり、それほどではありません。ほとんどの場合、1つのInnoDBページのデータブロックがディスク上に順番に配置され、1回の操作で読み取り/書き込みが行われるため、これをInnoDBページサイズに一致させることは意味がありません。

5
DukeLion

気にしないでください、ext2/3で利用可能なブロックサイズは1K、2K、4Kだけのようです。

mke3fs(8)のマニュアルページ から

       -b block-size
          Specify  the  size  of  blocks in bytes.  Valid block size vales are 1024, 2048 and 4096 bytes per block.
1
carillonator