コンパクションはマニュアルによっても実行できます。マニュアルコンパクションには、テナントレベルのコンパクションとパーティションレベルのコンパクションが含まれます。
適応型コンパクションが実際にスケジュールするのはパーティションレベルのコンパクションであり、システムが必要なパーティションに対して適時にパーティションコンパクションタスクを開始します。同時に、パーティションレベルのコンパクションの使用シナリオは適応型コンパクションが解決するシナリオと同じであり、主にデータ量が多い、頻繁な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'のメジャーコンパクション情報を確認し、メジャーコンパクションが正常に開始されたかどうかを確認できます。メジャーコンパクション情報の確認方法の詳細については、メジャーコンパクション情報の確認を参照してください。