メジャーコンパクションは、手動でトリガーすることも可能です。マニュアルによるメジャーコンパクションには、テナントレベルのメジャーコンパクションとパーティションレベルのメジャーコンパクションが含まれます。
適応型メジャーコンパクションが実際にスケジュールするのはパーティションレベルのメジャーコンパクションであり、システムが必要に応じて要求のあるパーティションに対してパーティションメジャーコンパクションタスクを開始します。同時に、パーティションレベルのメジャーコンパクションの使用シナリオは適応型メジャーコンパクションが解決するシナリオと同じであり、主にデータロード量が多い、頻繁なDML操作、クエリ効率が低いなどのシナリオを対象としています。適応型メジャーコンパクションの詳細については、適応型メジャーコンパクションを参照してください。業務上の必要から適応型メジャーコンパクション機能を無効にし、クエリの遅延などの問題が発生した場合は、マニュアルでパーティションレベルのメジャーコンパクションを開始することでこれらの問題を解決できます。
注意点
パーティションとTabletは一対一で対応しています。パーティション単位のメジャーコンパクションを実行する際には、以下の点に注意してください。
対応するパーティションがテナント単位のメジャーコンパクションタスクを実行中の場合、パーティション単位のメジャーコンパクションを開始できません。
対応するパーティションが適応型スケジューリングのメジャーコンパクションタスクを実行中の場合、パーティション単位のメジャーコンパクションを開始できません。
対応するパーティションの複数レプリカが不整合状態にある場合、パーティション単位のメジャーコンパクションを開始できません。
対応するパーティションが復元中またはTransfer状態にある場合、パーティション単位のメジャーコンパクションを開始できません。
メジャーコンパクションタスクが一時停止されている場合、パーティション単位のメジャーコンパクションを開始できません。
パーティション単位のメジャーコンパクションの本質は、同一パーティションの複数レプリカに対してMajor Compactionタスクを実行することであり、CPUおよびディスクI/Oを消費します。パーティション単位のメジャーコンパクション操作を実行する前に、現在のテナントのリソース使用状況を検討する必要があります。また、パーティション単位のメジャーコンパクションコマンドが正常に実行された後、CPUおよびI/Oの使用率が上昇します。
前提条件
メジャーコンパクションをトリガーする前に、グローバルメジャーコンパクションスイッチが有効になっていることを確認する必要があります。グローバルメジャーコンパクションスイッチはクラスタレベル構成パラメータenable_major_freezeによって制御され、デフォルト値はTrueで、メジャーコンパクションスイッチが有効であることを示します。
現在のクラスタでグローバルメジャーコンパクションスイッチが有効になっていない場合は、以下の手順を参照してグローバルメジャーコンパクションスイッチを有効にしてください。
rootユーザーでクラスタのsysテナントにログインします。グローバルメジャーコンパクションスイッチが有効になっているかどうかを確認します。
obclient> SHOW PARAMETERS LIKE 'enable_major_freeze';表示されている場合は無効の場合、以下のステートメントを実行してメジャーコンパクションスイッチを有効にします。
obclient> ALTER SYSTEM SET enable_major_freeze='True';構成パラメータ
enable_major_freezeの詳細については、enable_major_freezeを参照してください。
システムテナントによる手動メジャーコンパクションの開始
システムテナントは、自身、すべてのテナント、または指定したテナントに対してメジャーコンパクションを開始できます。
具体的な操作は以下のとおりです:
rootユーザーでクラスタのsysテナントにログインします。以下のコマンドを実行して、メジャーコンパクションを開始します。
テナントレベルのメジャーコンパクションの開始
SQLステートメントは以下のとおりです:
ALTER SYSTEM MAJOR FREEZE TENANT [=] all_user | all | all_meta | tenant_name [, tenant_name ...];ここで、
[=]は等号(=)がオプションであることを示します。例:
システムテナントが自身に対してメジャーコンパクションを開始する場合
obclient> ALTER SYSTEM MAJOR FREEZE;システムテナントがすべてのユーザーテナントに対してメジャーコンパクションを開始する場合
obclient> ALTER SYSTEM MAJOR FREEZE TENANT = all_user;または
obclient> ALTER SYSTEM MAJOR FREEZE TENANT = all;説明
OceanBaseデータベースでは、バージョンV4.2.1から、
TENANT = all_userとTENANT = allの意味は同じです。有効範囲をすべてのユーザーテナントに設定する必要がある場合は、TENANT = all_userの使用を推奨します。TENANT = allは今後廃止され、使用されなくなります。システムテナントがすべてのMetaテナントに対してメジャーコンパクションを開始する場合
obclient> ALTER SYSTEM MAJOR FREEZE TENANT = all_meta;システムテナントが指定したテナントに対してメジャーコンパクションを開始する場合
obclient> ALTER SYSTEM MAJOR FREEZE TENANT = tenant1,tenant2;
パーティションレベルのメジャーコンパクションの開始
指定したテナントに対してパーティションレベルのメジャーコンパクションを開始するSQLステートメントは以下のとおりです:
ALTER SYSTEM MAJOR FREEZE TENANT [=] tenant_name TABLET_ID = tablet_id;ここで、
tablet_idはシステムテナントがビューCDB_OB_TABLE_LOCATIONSをクエリすることで取得できます。ビューCDB_OB_TABLE_LOCATIONSの各フィールドの詳細については、oceanbase.CDB_OB_TABLE_LOCATIONSを参照してください。システムテナントがテナント
tenant1に対してパーティションレベルのメジャーコンパクションを開始する例は以下のとおりです:obclient> ALTER SYSTEM MAJOR FREEZE TENANT = tenant1 TABLET_ID = 200001;注意
パーティションレベルのメジャーコンパクションコマンドは、テナントレベルのメジャーコンパクションおよび適応型スケジューリング戦略によって開始されるメジャーコンパクションと相互排他関係にあります。コマンドの実行が成功したからといって、パーティションのメジャーコンパクションが正常に開始されたことを意味するわけではありません。
GV$OB_MERGE_INFOビューで指定したパーティション内のACTION='MEDIUM_MERGE'のメジャーコンパクション情報を確認するか、GV$OB_TABLET_COMPACTION_HISTORYビューで指定したパーティション内のTYPE='MEDIUM_MERGE'のメジャーコンパクション情報を確認することで、メジャーコンパクションが正常に開始されたかどうかを確認できます。メジャーコンパクション情報の確認方法の詳細については、メジャーコンパクション情報の確認を参照してください。
ユーザーテナントによる手動でのメジャーコンパクションの開始
ユーザーテナントは、自身のテナントに対してのみ、テナントレベルおよびパーティションレベルのメジャーコンパクション操作を実行できます。
ユーザーテナントのテナント管理者がデータベースにログインします。
自身のテナントに対してテナントレベルのメジャーコンパクションを開始します。
テナントのメジャーコンパクションを開始する
obclient> ALTER SYSTEM MAJOR FREEZE;パーティションレベルのメジャーコンパクションを開始する
ステートメントは以下のとおりです:
ALTER SYSTEM MAJOR FREEZE TABLET_ID = tablet_id;ここで、
tablet_idはビューDBA_OB_TABLE_LOCATIONSをクエリすることで取得できます。ビューDBA_OB_TABLE_LOCATIONSの各フィールドの詳細については、DBA_OB_TABLE_LOCATIONSを参照してください。例:
obclient> ALTER SYSTEM MAJOR FREEZE TABLET_ID = 200001;注意
パーティションレベルのメジャーコンパクションコマンドは、テナントレベルのメジャーコンパクションおよび適応型スケジューリング戦略によって開始されるメジャーコンパクションと相互排他関係にあります。コマンドの実行が成功したからといって、パーティションのメジャーコンパクションが正常に開始されたことを意味するわけではありません。ユーザーテナントは、ビュー
GV$OB_TABLET_COMPACTION_HISTORYを参照し、指定したパーティション内のTYPE='MEDIUM_MERGE'のメジャーコンパクション情報を確認することで、メジャーコンパクションが正常に開始されたかどうかを確認できます。メジャーコンパクション情報の確認方法の詳細については、メジャーコンパクション情報の確認を参照してください。