16 KB の永続ディスクと MySQL のベストプラクティス

このドキュメントでは、物理ブロックサイズが 16 KB の永続ディスクを使用して、MySQL データベースのパフォーマンスを向上させる方法について説明します。

通常、書き込みの多い MySQL ワークロードでは、InnoDB doublewrite バッファを無効にすることでパフォーマンスを向上させることができます。MySQL の InnoDB では、欠落したページを復元できるように、ダーティページのフラッシュ プロセスで二重書き込みを行います。

ただし、16 KB のデータページの部分的な commit や欠落ページを防ぐために、エンドツーエンドで 16 KB のアトミック書き込みを実施すると、二重書き込みを行う必要はなくなります。二重書き込みを無効にすると、データベースのダーティページのフラッシュ機能が二重になり、データベースが同期フラッシュ状態になる頻度が減ります。これにより、安定性とパフォーマンスを向上させることができます。

始める前に

データベースからブロック デバイスに 16 KB のアトミック書き込みを行う

16 KB の永続ディスクを利用して、データベースからブロック デバイスに 16 KB のアトミック書き込みをエンドツーエンドで行うと、MySQL / InnoDB の二重書き込み機能を無効にし、書き込み負荷が高い場合でも、より安定したパフォーマンスを実現できます。

永続ディスクを作成して接続するには、Google Cloud Platform Consolegcloud ツールまたは API を使用します。

  1. ブロックサイズが 16 KB の永続ディスクを作成して VM に接続します。この 16 KB の永続ディスクでは、物理ブロックレベルで 16 KB の書き込みがアトミックに行われます。必須ではありませんが、データファイルを 16 KB の永続ディスクにのみ格納するように MySQL インスタンスを構成することをおすすめします。ログファイル(特に REDO ログと binlog)は、同じ VM に接続されている 4 KB の永続ディスクに格納します。これにより、ログファイルへの書き込みを高パフォーマンスで実行できます。サイズの小さいログを 16 KB の永続ディスクに書き込むと、読み取り / 変更 / 書き込みが頻繁に発生し、処理速度が低下する可能性があります。

  2. BigAlloc オプションを使用して、16 KB のディスクを ext4 ファイル システムにフォーマットします。クラスタサイズは 16 KB に設定します。BigAlloc オプションを指定した mkfs コマンドの例は次のとおりです。

    mkfs.ext4 -O bigalloc -C 16384 [...other options…]
    

    クラスタサイズに 16 KB を設定して BigAlloc を使用すると、ファイル システムにより、ディスクの 16 KB の境界に合わせてファイルが割り当てられます。

  3. VM インスタンスを作成するときに、cos-cloud プロジェクトの Google Container-Optimized OS イメージ ファミリーから OS イメージを選択します。

    使用可能な cos イメージの一覧を表示するには、次の gcloud コマンドを使用します。

    gcloud compute images list --project cos-cloud --no-standard-images
    

    バージョン 67 以上を選択してください。より良い結果を得られるように、cos-stable ファミリーからイメージを選択してください。

    cos イメージを選択すると、ファイル システムと物理ブロック デバイスの間のレイヤにより、16 KB の境界を超えて書き込みが不適切に分割されないようになります。cos イメージの認定プロセスには、この結果を確認するテストが組み込まれています。

  4. OS で max_segmentsmax_sectors_kb が正しく構成されていることを確認します。

    max_segments >= max_sectors_kb/4
    

    この 2 つの変数はすべての Google Compute Engine VM ですでに構成されています。これらの変数を VM の作成後に変更するスクリプトがない場合、ここでは何もする必要はありません。

    この 2 つの定数は、次のパスで確認できます。

    /sys/block/sd<drive letter>/queue/
    
  5. O_DIRECT を使用するように InnoDB を構成します。innodb_flush_method データベース構成に O_DIRECT を設定するか、追加します。

これで、innodb_doublewrite オプションを安全に無効にできます。

これ以外の方法でも、16 KB ブロック デバイスを使用して、16 KB のアトミック書き込みをエンドツーエンドで実現できます。たとえば、ファイル システムを使用せずにブロック デバイスを RAW デバイスとして直接使用するようにデータベースを構成する場合は、上で説明したファイル システムの構成手順をスキップできます。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント