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(root@sys)[(none)]> 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テナントにログインします。以下のステートメントを実行して、現在のディスクに事前割り当てられている空き容量を確認します。
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以外の値に設定します。設定例は以下のとおりです:
ALTER SYSTEM SET datafile_maxsize='4TB';ALTER SYSTEM SET datafile_next='1TB';設定が成功した後、以下のステートメントを実行して、自動拡張設定が有効になっているか確認します。
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 の値を組み合わせて自動的に拡張し、ディスクの割り当てを最大限に削減します。