web-dev-qa-db-ja.com

innodb_io_capacityのセットアップ

MariaDBサーバーのinnodb_io_capacityオプションを構成したい。ドキュメントで私は次を見つけました:

より高速なハードドライブ、RAID構成、およびソリッドステートドライブ(SSD)は、より高い値から恩恵を受けます。

誰かが値を設定した経験がありますか?値はどの単位で測定されますか? IOPSですか?

たとえば、私のセットアップは:

  • Samsung NVMe SSD
    • 500.000 IOPSの読み取り
    • 400.000 IOPSの書き込み

innodb_io_capacityの現在の値は2000で、innodb_io_capacity_max3000に設定されています。

ハードディスクのIOPS値が非常に高いため(オペレーティングシステムのプロセスが原因でXがマイナスされているため)、innodb_io_capacity500.000まで設定できると思いますか?

innodb_read_io_threads設定はinnodb_io_capacityパラメータにどのように影響しますか?私の現在の値は16スレッドです(Intel Xeon E5-1660v4 [8x 3.2 Ghz]を搭載)

1
Thomas Z.

基本的なGoogle-Fuは次の情報を生成しました:

innodb_io_capacity 変数は、バッファープールからのページのフラッシュなど、InnoDBバックグラウンドタスクで使用可能な1秒あたりのI/O操作数(IOPS)を定義します変更バッファからデータをマージします。

InnoDBフォアグラウンドタスクにIOPSが必要なため、これをSSDディスクの最大IOPS値に設定しません。これは、パラメータのドキュメントのすぐ下にあるリンクでもコメントされています。

Innodb_io_capacity変数の設定については、セクション 14.8.8「InnoDB I/O容量の設定」 を参照してください。

これは以下につながります:

InnoDBマスタースレッドと他のスレッドは、バックグラウンドでさまざまなタスクを実行します。それらのほとんどは、バッファープールからダーティページをフラッシュしたり、変更バッファーから適切なセカンダリインデックスに変更を書き込んだりするなど、I/O関連です。 InnoDBは、サーバーの通常の動作に悪影響を与えない方法でこれらのタスクを実行しようとします。利用可能なI/O帯域幅を推定し、利用可能な容量を利用するようにアクティビティを調整しようとします。

innodb_io_capacity変数は、InnoDBで使用可能な全体的なI/O容量を定義します。これは、システムが1秒間に実行できるI/O操作数(IOPS)にほぼ設定する必要があります。 innodb_io_capacityが設定されている場合、InnoDBは設定された値に基づいてバックグラウンドタスクに使用可能なI/O帯域幅を推定します。

innodb_io_capacityには100以上の値を設定できます。デフォルト値は200です。通常、100前後の値は、最大7200 RPMのハードドライブなどのコンシューマレベルのストレージデバイスに適しています。より高速なハードドライブ、RAID構成、およびソリッドステートドライブ(SSD)は、より高い値から恩恵を受けます。

理想的には、設定をできるだけ低くしますが、バックグラウンドアクティビティが遅れるほど低くはしません。値が高すぎる場合、データはバッファプールとバッファの変更が早すぎるため、キャッシングを行うと大きなメリットが得られません。 I/Oレートが高いビジーシステムでは、高い値を設定して、サーバーが行の変更率が高いことに関連するバックグラウンドメンテナンス作業を処理できるようにすることができます。一般に、InnoDB I/Oに使用されるドライブ数の関数として値を増やすことができます。たとえば、複数のディスクまたはSSDを使用するシステムの値を増やすことができます。

innodb_read_io_threads パラメータに続けます...

InnoDBは、バックグラウンドスレッドを使用して、さまざまなタイプのI/O要求を処理します。 innodb_read_io_threadsおよびinnodb_write_io_threads構成パラメーターを使用して、データページの読み取りおよび書き込みI/Oを処理するバックグラウンドスレッドの数を構成できます。これらのパラメーターは、それぞれ読み取り要求と書き込み要求に使用されるバックグラウンドスレッドの数を示します。サポートされているすべてのプラットフォームで有効です。これらのパラメータの値は、MySQLオプションファイル(my.cnfまたはmy.ini)で設定できます。値を動的に変更することはできません。 これらのパラメーターのデフォルト値は4で、許容値の範囲は1-64です

これらの構成オプションの目的は、ハイエンドシステムでのInnoDBのスケーラビリティを高めることです。 各バックグラウンドスレッドは、最大256の保留中のI/O要求を処理できます。バックグラウンドI/Oの主なソースは、先読み要求です。 InnoDBは、ほとんどのバックグラウンドスレッドが作業を均等に共有するように、受信リクエストの負荷のバランスをとろうとします。 InnoDBは、同じ範囲から同じスレッドへの読み取り要求の割り当ても試み、要求が合体する可能性を高めます。 ハイエンドのI/Oサブシステムがあり、SHOW ENGINE INNODB STATUS出力に64×innodb_read_io_threadsの保留中の読み取り要求がある場合、innodb_read_io_threadsの値を増やすことでパフォーマンスを向上させることができます。

これは、パラメータが実際には互いに関連していないと解釈します。各パラメーターは、システムのパフォーマンスに基づいて個別に構成できます。

1