概要
このステートメントは、システムテナントからストレージ層のメジャーコンパクションまたはダンプ(フリーズ)を実行するために使用されます。手動メジャーコンパクションは、テナントレベルとパーティションレベルをサポートしています。手動ダンプは、テナントレベル、ゾーンレベル、サーバーレベル、ログストリームレベル、およびパーティションレベルをサポートしています。
構文
ALTER SYSTEM merge_action;
merge_action:
MAJOR FREEZE [tenant_list]
| MAJOR FREEZE tenant_list TABLET_ID = tablet_id
| MINOR FREEZE [tenant_list | TABLET_ID = tablet_id] [server_list] [zone_list] [LS [=] ls_id];
| {SUSPEND | RESUME} MERGE [tenant_list]
| CLEAR MERGE ERROR [tenant_list]
tenant_list:
TENANT [=] { all | all_user | all_meta } | tenant_name [, tenant_name ...]
server_list:
SERVER [=] ('ip:port' [, 'ip:port'...])
zone_list:
ZONE [=] ('zone_name' [, 'zone_name' ...]);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| MAJOR FREEZE | 毎日のメジャーフリーズを実行します。TENANT=allまたはTENANT=all_userを使用すると、すべてのユーザーテナント(システムテナントとMetaテナントを除く)をマージできます。all_userを使用することを推奨し、allは今後廃止されます。TENANT=all_metaを使用すると、すべてのMetaテナントをマージできます。また、TENANT=tenant_name [, tenant_name ...]を使用して特定のテナントのみをマージすることもできます。 |
| MINOR FREEZE | ダンプを実行します。 |
| {SUSPEND | RESUME} MERGE | 毎日のメジャーフリーズを一時停止または再開します。TENANT=allまたはTENANT=all_userを使用すると、すべてのテナント(システムテナントとMetaテナントを除く)の毎日のメジャーフリーズを一時停止または再開できます。all_userを使用することを推奨し、allは今後廃止されます。TENANT=all_metaを使用すると、すべてのMetaテナントの毎日のメジャーフリーズを一時停止または再開できます。また、TENANT=tenant_name [, tenant_name ...]を使用して特定のテナントのみを一時停止または再開することもできます。 |
| CLEAR MERGE ERROR | メジャーフリーズエラーをクリアします。TENANT=allまたはTENANT=all_userを使用すると、すべてのテナント(システムテナントとMetaテナントを除く)のエラーマークをクリアできます。all_userを使用することを推奨し、allは今後廃止されます。TENANT=all_metaを使用すると、すべてのMetaテナントのエラーマークをクリアできます。また、TENANT=tenant_name [, tenant_name ...]を使用して特定のテナントのみのエラーマークをクリアすることもできます。 |
| MAJOR FREEZE TENANT [=] tenant_name TABLET_ID = tablet_id | 指定されたTABLET IDによるメジャーフリーズを実行します。つまり、パーティションレベルでのマージです。
説明このステートメントは、システム(sys)テナントでのみ実行できます。 |
| tenant_name | 指定されたテナントのマージまたはダンプを実行します。 |
| TABLET_ID | 指定されたパーティションのマージまたはダンプを実行します。 |
| SERVER | 指定されたサーバーのダンプを実行します。 |
| ZONE | 指定されたゾーンのダンプを実行します。 |
| LS | 指定されたログストリームのダンプを実行します。 |
注意事項
パーティションとTabletは1対1で対応しており、パーティションレベルでのメジャーコンパクションを実行する際には、以下の点に注意する必要があります:
- 対応するパーティションがテナントレベルのコンパクションタスクを実行している場合、パーティションレベルでのコンパクションを開始することはできません。
- 対応するパーティションが適応的スケジューリングによるコンパクションタスクを実行している場合、パーティションレベルでのコンパクションを開始することはできません。
- 対応するパーティションの複数レプリカが一貫性を保っていない場合、パーティションレベルでのコンパクションを開始することはできません。
- 対応するパーティションが復旧中またはTransfer状態の場合、パーティションレベルでのコンパクションを開始することはできません。
- コンパクションタスクが一時停止されている場合、パーティションレベルでのコンパクションを開始することはできません。
- パーティションレベルでのコンパクションとは、同一パーティションの複数レプリカに対してMajor Compactionタスクを実行することであり、CPUおよびディスクI/Oを消費します。パーティションレベルでのコンパクション操作を実行する前に、現在のテナントのリソース使用状況を考慮する必要があります。また、パーティションレベルでのコンパクションコマンドが正常に実行されると、CPUやI/Oの使用率が上昇する可能性があります。
例
ストレージレイヤーのメジャーコンパクションの例
システムテナントがシステムテナントの毎日のメジャーコンパクションを開始します。
obclient> ALTER SYSTEM MAJOR FREEZE;システムテナントがすべてのユーザーテナント(システムテナントとMetaテナントを除く)のメジャーコンパクションを開始します。
obclient> ALTER SYSTEM MAJOR FREEZE TENANT = all_user;システムテナントがすべてのMetaテナントのメジャーコンパクションを開始します。
obclient> ALTER SYSTEM MAJOR FREEZE TENANT = all_meta;システムテナントが指定されたテナント
tenant1とtenant2のメジャーコンパクションを開始します。obclient> ALTER SYSTEM MAJOR FREEZE TENANT = tenant1,tenant2;
ストレージレイヤーのダンプの例
システムテナントがシステムテナントのダンプを開始します。
obclient> ALTER SYSTEM MINOR FREEZE;システムテナントがすべてのユーザーテナント(システムテナントとMetaテナントを除く)のダンプを開始します。
obclient> ALTER SYSTEM MINOR FREEZE TENANT = all_user;システムテナントがすべてのMetaテナントのダンプを開始します。
obclient> ALTER SYSTEM MINOR FREEZE TENANT = all_meta;システムテナントが指定されたテナント
tenant1とtenant2のダンプを開始します。obclient> ALTER SYSTEM MINOR FREEZE TENANT = tenant1,tenant2;システムテナントが指定されたテナント
tenant1内の指定されたパーティションのダンプを開始します。obclient> ALTER SYSTEM MINOR FREEZE tenant = tenant1 tablet_id = 1100611139453887;システムテナントが指定されたOBServerのダンプを開始します。
obclient> ALTER SYSTEM MINOR FREEZE SERVER = ('10.XXX.XXX.XXX:2882');システムテナントが指定されたテナント内の指定されたログストリームのダンプを開始します。
obclient> ALTER SYSTEM MINOR FREEZE tenant = t1 LS 1;システムテナントが指定されたテナント内の指定されたログストリームの指定されたパーティションのダンプを開始します。
obclient> ALTER SYSTEM MINOR FREEZE tenant = t1 ls 1 tablet_id = 60000;
毎日のメジャーコンパクションの一時停止または再開の例
システムテナントがすべてのユーザーテナント(システムテナントとMetaテナントを除く)の毎日のメジャーコンパクションを一時停止します。
obclient> ALTER SYSTEM SUSPEND MERGE TENANT = all_user;システムテナントが指定されたテナント
tenant1とtenant2の毎日のメジャーコンパクションを一時停止します。obclient> ALTER SYSTEM SUSPEND MERGE TENANT = tenant1,tenant2;システムテナントがすべてのMetaテナントの毎日のメジャーコンパクションを一時停止します。
obclient> ALTER SYSTEM SUSPEND MERGE TENANT = all_meta;システムテナントがすべてのユーザーテナント(システムテナントとMetaテナントを除く)の毎日のメジャーコンパクションを再開します。
obclient> ALTER SYSTEM RESUME MERGE TENANT = all_user;システムテナントが指定されたテナント
tenant1とtenant2の毎日のメジャーコンパクションを再開します。obclient> ALTER SYSTEM RESUME MERGE TENANT = tenant1,tenant2;システムテナントがすべてのMetaテナントの毎日のメジャーコンパクションを再開します。
obclient> ALTER SYSTEM RESUME MERGE TENANT = all_meta;
マージエラーマークのクリーンアップ例
システムテナントは、システムテナントとメタテナントを除くすべてのユーザーテナントのマージエラーマークをクリーンアップします。
obclient> ALTER SYSTEM CLEAR MERGE ERROR TENANT = all_user;システムテナントは、指定されたテナント
tenant1およびtenant2のマージエラーマークをクリーンアップします。obclient> ALTER SYSTEM CLEAR MERGE ERROR TENANT = tenant1,tenant2;システムテナントは、すべてのメタテナントのマージエラーマークをクリーンアップします。
obclient> ALTER SYSTEM CLEAR MERGE ERROR TENANT = all_meta;
パーティション単位でのメジャーコンパクションの実行
テーブルのTABLET IDを照会します。
例:
obclient> SELECT t1.tenant_id, t2.tenant_name, t1.database_name, t1.table_id, t1.table_name, t1.tablet_id, t1.PARTITION_NAME, t1.SUBPARTITION_NAME FROM oceanbase.CDB_OB_TABLE_LOCATIONS t1, oceanbase.DBA_OB_TENANTS t2 WHERE t1.tenant_id=t2.tenant_id AND t1.table_name = 'test_tbl1' AND t2.tenant_name = 'oracle001';実行結果は次のとおりです:
+-----------+-------------+---------------+----------+------------+-----------+----------------+-------------------+ | tenant_id | tenant_name | database_name | table_id | table_name | tablet_id | PARTITION_NAME | SUBPARTITION_NAME | +-----------+-------------+---------------+----------+------------+-----------+----------------+-------------------+ | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200008 | P1 | SP0 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200009 | P1 | SP1 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200010 | P1 | SP2 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200011 | P1 | SP3 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200012 | P2 | SP4 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200013 | P2 | SP5 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200014 | P2 | SP6 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200015 | P2 | SP7 | +-----------+-------------+---------------+----------+------------+-----------+----------------+-------------------+ 8 rows in set詳細については、oceanbase.CDB_OB_TABLE_LOCATIONSを参照してください。
メジャーコンパクションを実行します。
例:
obclient> ALTER SYSTEM MAJOR FREEZE TENANT = oracle001 TABLET_ID = 200008;
パーティションレベルのダンプを開始する
テーブルのTABLET IDを照会します。
例:
obclient> SELECT t1.tenant_id, t2.tenant_name, t1.database_name, t1.table_id, t1.table_name, t1.tablet_id, t1.PARTITION_NAME, t1.SUBPARTITION_NAME FROM oceanbase.CDB_OB_TABLE_LOCATIONS t1, oceanbase.DBA_OB_TENANTS t2 WHERE t1.tenant_id=t2.tenant_id AND t1.table_name = 'test_tbl1' AND t2.tenant_name = 'oracle001';実行結果は次のとおりです:
+-----------+-------------+---------------+----------+------------+-----------+----------------+-------------------+ | tenant_id | tenant_name | database_name | table_id | table_name | tablet_id | PARTITION_NAME | SUBPARTITION_NAME | +-----------+-------------+---------------+----------+------------+-----------+----------------+-------------------+ | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200008 | P1 | SP0 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200009 | P1 | SP1 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200010 | P1 | SP2 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200011 | P1 | SP3 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200012 | P2 | SP4 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200013 | P2 | SP5 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200014 | P2 | SP6 | | 1004 | oracle001 | SYS | 500011 | TEST_TBL1 | 200015 | P2 | SP7 | +-----------+-------------+---------------+----------+------------+-----------+----------------+-------------------+ 8 rows in set詳細については、oceanbase.CDB_OB_TABLE_LOCATIONSを参照してください。
ダンプを開始します。
例:
obclient> ALTER SYSTEM MINOR FREEZE TENANT = oracle001 TABLET_ID = 200008;