OceanBaseデータベースは、ディスクデータファイルの実際の使用状況に基づいて自動的に拡張できます。
背景
OceanBaseデータベースでは、データを格納するファイル名はblock_fileであり、このblock_fileファイルは/OBServerノードのインストールディレクトリ/store/sstableディレクトリに配置されます。このファイルは、各OBServerノードが起動した後に作成されます。また、block_fileファイルのサイズは構成パラメータdatafile_sizeまたはdatafile_disk_percentageによって制御されます。OceanBaseデータベースのデータファイルディレクトリの詳細については、OBServerノードのインストールディレクトリ構造を参照してください。
OceanBaseデータベースV4.2.0以前のバージョンでは、システムは主にプリアロケーション方式を採用し、データファイルが可能な限り連続したディスク領域を確保できるよう、データファイル用に一定量のディスク容量を事前に割り当てています。これにより、他のアプリケーションによるディスクの占有によるディスクリソース不足を防ぐことができます。しかし、このプリアロケーション方式では大量のディスク容量が占有され、たとえその容量が使用されていなくても解放されることはありません。
プリアロケーションされた大量のディスク容量が解放されないという問題を解決するため、V4.2.0以降のバージョンから、OceanBaseデータベースはデータファイルのディスク容量を段階的に使用するユーザー設定オプションを導入しました。具体的には、システムがまずデータファイルに適切なディスク容量をプリアロケーションし、その後、実際のディスク使用状況およびユーザーの設定に基づいて自動的に拡張します。
関連構成パラメータ
OceanBaseデータベースでは、主に以下の構成パラメータを組み合わせて使用することで、ディスク上のデータファイルの自動拡張を実現します:
datafile_size:データファイルが占有するディスク上の利用可能な領域サイズを設定します。デフォルト値は0Mです。クラスタレベルの構成パラメータdatafile_sizeの詳細については、datafile_size を参照してください。datafile_disk_percentage:ディスク上のデータファイルがディスク全体の容量に占める割合を設定します。デフォルト値は0です。クラスタレベルの構成パラメータdatafile_disk_percentageの詳細については、datafile_disk_percentage を参照してください。datafile_next:ディスク上のデータファイルの自動拡張のステップサイズを設定します。デフォルト値は0であり、増加を開始しないことを意味します。自動増加を有効にする必要がある場合は、0以外の値に設定する必要があります。クラスタレベルの構成パラメータdatafile_nextの詳細については、datafile_next を参照してください。datafile_maxsize:ディスク上のデータファイルの自動拡張の最大容量を設定します。デフォルト値は0であり、自動拡張を開始しないことを意味します。クラスタレベルの構成パラメータdatafile_maxsizeの詳細については、datafile_maxsize を参照してください。
上記の構成パラメータを設定する際には、以下の点に注意する必要があります:
datafile_sizeとdatafile_disk_percentageはどちらもデータファイルが占有するディスク容量を設定するために使用でき、どちらか一方を選択して設定することができます。その他の場合:両方の構成パラメータが設定されている場合、つまり
datafile_sizeとdatafile_disk_percentageが同時に0以外の値に設定されている場合は、datafile_sizeで設定された値が優先されます。両方の構成パラメータが設定されていない場合、つまり
datafile_sizeの値がOMでdatafile_disk_percentageの値が0の場合、システムはログとデータが同一ディスクを共有するかどうかに基づいて、データファイルがそのディスク全体の容量に占める割合を自動的に計算します。具体的には:ログとデータが同一ディスクを共有する場合、データファイルがそのディスク全体の容量に占める割合は60%になります。
ログとデータがそれぞれ専用のディスクを使用する場合、データファイルがそのディスク全体の容量に占める割合は90%になります。
datafile_maxsizeを設定する際には、その値が現在のデータファイルが占有するディスク容量datafile_size(またはdatafile_disk_percentage) より大きい必要があります。設定した値が現在のデータファイルが占有するディスク容量より小さい場合、自動拡張はトリガーされません。datafile_maxsizeの値が現在のディスクの最大利用可能容量を超える場合、実際のディスクの利用可能なサイズが最大値となります。datafile_nextについて:datafile_nextが1G以下の値に設定されている場合、datafile_nextの値はmin (1G, datafile_maxsize * 10%)となります。datafile_nextが1Gを超える値に設定されている場合、datafile_nextの値はmin (datafile_next, ディスク残存容量)となります。
注意事項および使用制限
ディスクデータファイルの自動拡張機能を設定する際は、ステップサイズ
datafile_nextの初期値をdatafile_maxsizeの約20%に設定し、頻繁な拡張を避けることを推奨します。データファイルの自動拡張を有効にした後は、同一マシン上で同時にデプロイされる他のアプリケーションの容量計画を適切に行い、実際に拡張可能な最大容量が設定された
datafile_maxsizeより小さくなる問題を防ぐ必要があります。現在、ディスクデータファイルの動的縮小はサポートされていません。
自動拡張機能を有効にしたくない場合は、
datafile_nextまたはdatafile_maxsizeの値を0Mに設定するか、デフォルト値の0のままにしてください。その場合、システムは元のプレアロケーション方式に従って、データファイル用にディスク容量の一部を予約します。
データファイルの自動拡張を有効にするにはどうすればよいですか
ステップ1:現在の構成パラメータの値を確認する
ディスクデータファイルの動的拡張を設定する前に、各構成パラメータの値を確認し、各パラメータの設定状況を把握する必要があります。
rootユーザーでクラスタのsysテナントにログインします。以下のコマンドを実行して、各構成パラメータの値を確認します。
obclient> SHOW PARAMETERS LIKE '%datafile_%';
ステップ2:ディスクデータファイルの動的拡張を設定する
各構成パラメータの値を取得した後、実際の使用シナリオに応じて構成パラメータの値を変更することで、ディスクデータファイルの自動拡張を実現できます。
クラスタ起動時に、datafile_size(またはdatafile_disk_percentage)、datafile_next、datafile_maxsizeが設定済みの場合
OceanBaseデータベースをデプロイし、OceanBaseクラスタを起動する際に、datafile_size(またはdatafile_disk_percentage)、datafile_next、およびdatafile_maxsizeを0以外の値に設定した場合、次のことが適用されます。
datafile_maxsizeの値がdatafile_sizeの値より大きい場合、またはdatafile_maxsizeの値がdatafile_disk_percentageに基づいて計算されたディスク容量よりも大きい場合、クラスタ起動後に自動スケールアップが有効になります。datafile_maxsizeの値がdatafile_sizeの値より小さい場合、またはdatafile_maxsizeの値がdatafile_disk_percentageに基づいて計算されたディスク容量よりも小さい場合、datafile_maxsizeの値をdatafile_sizeより大きい値に変更してから、データファイルの自動スケールアップを有効にする必要があります。
クラスタ起動時に、datafile_size(またはdatafile_disk_percentage)のみが設定されている場合
OceanBaseデータベースをデプロイし、OceanBaseクラスタを起動する際に、datafile_sizeまたはdatafile_disk_percentageの値のみを設定した場合、手動でdatafile_maxsizeとdatafile_nextの値を設定し、datafile_maxsizeの値がdatafile_sizeより大きいか、またはdatafile_disk_percentageに基づいて計算されたディスク容量よりも大きいことを確認するだけで済みます。
クラスタ起動時に、datafile_size(またはdatafile_disk_percentage)、datafile_next、datafile_maxsizeが設定されていない場合
OceanBaseデータベースをデプロイし、OceanBaseクラスタを起動する際にdatafile_size(またはdatafile_disk_percentage)、datafile_next、datafile_maxsizeなどが設定されていない場合は、以下の手順を参照して、ディスクデータファイルの自動拡張を有効にできます。
注意
クラスタの初回起動時に datafile_size または datafile_disk_percentage を設定するかどうかは、主にディスクの初期データファイルサイズに影響します。
具体的な操作は以下のとおりです:
rootユーザーでクラスタのsysテナントにログインします。以下のステートメントを実行して、現在のディスクに事前割り当てられた領域を確認します。
obclient> SELECT data_disk_allocated/1024/1024/1024 AS datafile_G FROM oceanbase.GV$OB_SERVERS;クエリ結果の例は次のとおりです。
+-------------------+ | datafile_G | +-------------------+ | 1770.000000000000 | +-------------------+ 1 row in setクエリ結果によると、現在のディスクデータファイルの事前割り当て領域サイズ
data_disk_allocatedは1770GB、約1.7TBです。GV$OB_SERVERSビューのその他のフィールドの説明については、GV$OB_SERVERSを参照してください。前のステップで得られた結果に基づいて、
datafile_maxsizeの値をdata_disk_allocatedよりも大きい値に設定し、同時にdatafile_nextを0以外の値に設定します。設定例は以下のとおりです:
obclient> ALTER SYSTEM SET datafile_maxsize='4TB';obclient> ALTER SYSTEM SET datafile_next='1TB';設定が成功した後、以下のステートメントを実行して、自動拡張設定が有効になっているかどうか再度確認します。
obclient> SELECT data_disk_allocated/1024/1024/1024 AS datafile_G, data_disk_capacity/1024/1024/1024 AS datafile_max_G FROM oceanbase.GV$OB_SERVERS;クエリ結果の例は次のとおりです。
+-------------------+-------------------+ | datafile_G | datafile_max_G | +-------------------+-------------------+ | 1770.000000000000 | 4096.000000000000 | +-------------------+-------------------+ 1 row in setクエリ結果によると、現在のディスクデータファイルの自動拡張の最大上限領域
data_disk_capacityの値は設定したdatafile_maxsizeの値であり、かつdata_disk_capacityの値がdata_disk_allocatedの値よりも大きいため、自動拡張設定が成功しています。
次のステップ
設定が完了すると、システムはデータファイルの実際の使用状況に基づき、datafile_next および datafile_maxsize の値を組み合わせて自動的に拡張し、ディスクの割り当てを最大限に抑えます。