OceanBaseデータベースは、データファイルの実際の使用状況に応じて自動的に拡張できます。
背景
OceanBaseデータベースでは、データを格納するファイルは 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 の値を考慮して自動的に拡張し、ディスクの割り当てを最小限に抑えます。