GCP

提供:MySQL Practice Wiki

移動: 案内, 検索

GCP - Global Checkpointとは、MySQL Clusterで利用されるチェックポイント処理の一つである。GCPは全ての変更履歴を保存する。いわゆるREDOログと同じであると考えれば良い。クラスタ全体がクラッシュした時は、最新のLCPに対してGCPの内容を追加することでリカバリが行われる。LCP+GCP=最新の状態、というわけである。GCPを実行する間隔はTimeBetweenGlobalCheckpointsで調整することができる。デフォルトは2秒である。不幸にもクラスタ全体がクラッシュしてしまった場合には、最大2秒間の更新が失われることになってしまう。

GCPは一番古いLCPが削除されるまで保持される。MySQL Cluster 6.2では3世代分のLCPが保存されるので、それに合わせてGCPの容量を大きくする必要がある。つまり、LCP<--->LCP<--->LCP<--->最新の状態に至るまでの更新をGCP内に保持する必要があるのである。倍のマージンを見込んだ場合、GCPに必要な容量は次の式で算出できる。

LCPに掛かる時間 × 単位時間あたりの更新量 × (version >= 6.3 ? 2 : 3) × 2

GCPのサイズはNoOfFragmentLogFilesとFragmentLogFileSizeで調整することができる。GCPは4つのファイルがセットになって構成される。各ファイルのサイズはFragmentLogFileSizeであり、そのセットがNoOfFragmentLogFiles個作成されるわけである。従って、GCPの合計サイズは次の式で算出される。

FragmentLogFileSize × NoOfFragmentLogFiles × 4

デフォルトはFragmentLogFileSize=16MB、NoOfFragmentLogFiles=16なので1024MB=1GBである。DataMemoryが大きくなるとLCPにも時間がかかるようになるので、GCPも大きくしよう。

MySQL Cluster 6.2で、micro-GCPという機能が追加された。micro-GCPはGCPをより細かく実行する機能であり、MySQL Clusterレプリケーションの性能を向上させるためのものである。GCPとの違いは、ディスクへのフラッシュを行うかどうかであり、micro-GCPではフラッシュは行われない。micro-GCPを実行すると、Epochが生成される。Epochとはトランザクション(更新)の集合である。生成されたEpochには連番がついており、Epochの順番に適用することで更新の整合性が保たれる。micro-GCPの間隔は、TimeBetweenEpochsで調整する。デフォルトは100ミリ秒である。micro-GCPが完了した時点で、全ての更新はスレーブ側へ送信可能な状態となる。micro-GCPが追加される以前は、GCPごとにスレーブへのデータ転送が行われたが、micro-GCPが追加されたことにより、より短い間隔でデータ転送をできるようになった。その結果、スレーブの遅延が軽減されるというわけである。

micro-GCPはTimeBetweenEpochsごとに行われるが、現在実行中のCOMMITが完了するのを待つ。COMMITに時間がかかってしまう場合、例えばディスクテーブルへ大量に更新を行ったりすると、タイムアウトが発生する可能性がある。タイムアウトが発生すると、データノードが自ら停止してしまう。タイムアウトの間隔はTimeBetweenEpochsTimeoutで調整することができるので、ディスクテーブルを利用している場合にはタイムアウト値を延ばしておくといい。デフォルトは4秒、最大32秒である。

個人用ツール