動的パーティションは、OceanBaseデータベースが提供するパーティションの自動管理機能であり、テーブルが事前設定されたルールに基づいて自動的にパーティションを作成および削除できるようにし、運用保守を簡素化し、データの増加や期限切れに対応します。
機能と特徴
TIME_UNIT(時間、日、月など)ごとに定期的に新しいパーティションを作成し、データが時間範囲に応じて自動的に拡張されることを保証します。- パーティションの境界は時間単位(
hour、dayなど)で分割され、時系列データを格納するシナリオ(ログ、取引記録など)に適しています。
- パーティションの境界は時間単位(
PRECREATE_TIMEを使用して将来のパーティションを事前作成し、データの急増によるパーティション不足を回避します。EXPIRE_TIMEに基づいて定期的に期限切れのパーティションをクリーンアップし、ストレージ容量を解放します。カスタムタイムゾーン(
TIME_ZONE)をサポートし、タイムゾーンをまたいだデータの一貫性を確保します。bigint型のタイムスタンプの精度設定(BIGINT_PRECISIONなど)をサポートし、異なる時間精度要件に対応します。
事前作成されるパーティション
動的パーティション管理を実行する際、システムはTIME_UNIT間隔でパーティションを作成し続けます。最大パーティションの境界がnow() + precreate_timeを超えるまで行われ、最初に作成されるパーティションの境界は、現存する最大パーティションの境界をTIME_UNITで切り上げた値となります。
例:
テーブルtbl1を作成します:
CREATE TABLE tbl1 (col1 DATETIME)
DYNAMIC_PARTITION_POLICY(
ENABLE = true,
TIME_UNIT = 'hour',
PRECREATE_TIME = '3 hour',
EXPIRE_TIME = '1 day',
TIME_ZONE = '+8:00')
PARTITION BY RANGE COLUMNS (col1)(
PARTITION P0 VALUES LESS THAN ('2025-04-23 17:30:00')
);
もし現存する最大パーティションの境界が現在時刻
2025-04-23 16:24:56より大きい場合、動的パーティション管理を1回スケジュールした後のパーティションは次のとおりです:PARTITION P0 VALUES LESS THAN ('2025-04-23 17:30:00'), PARTITION P2025042317 VALUES LESS THAN ('2025-04-23 18:00:00'), PARTITION P2025042318 VALUES LESS THAN ('2025-04-23 19:00:00'), PARTITION P2025042319 VALUES LESS THAN ('2025-04-23 20:00:00')もし現存する最大パーティションの境界が現在時刻より小さい場合、事前作成されるパーティションは過去のパーティションを補完しようと試みます。例えば、現存する最大パーティションが
PARTITION P0 VALUES LESS THAN ('2025-04-23 15:30:00')、現在時刻が2025-04-23 16:26:56の場合、動的パーティション管理を1回スケジュールした後のパーティションは次のとおりです:PARTITION P0 VALUES LESS THAN ('2025-04-23 15:30:00'), PARTITION P2025042315 VALUES LESS THAN ('2025-04-23 16:00:00'), PARTITION P2025042316 VALUES LESS THAN ('2025-04-23 17:00:00'), PARTITION P2025042317 VALUES LESS THAN ('2025-04-23 18:00:00'), PARTITION P2025042318 VALUES LESS THAN ('2025-04-23 19:00:00'), PARTITION P2025042319 VALUES LESS THAN ('2025-04-23 20:00:00')過去のパーティション
P2025042315が補完されました。
事前作成されるパーティションの名前
システムは、パーティションの境界値とTIME_UNITに基づいて、自動生成されるパーティション名を決定します。パーティション名のプレフィックスはPです。
TIME_UNIT |
パーティションの上限 |
パーティション名 |
|---|---|---|
| hour | 2024-03-04 05:00:00 | P2024030404 |
| day | 2024-03-05 00:00:00 | P20240304 |
| week | 2024-03-11 00:00:00 | P2024_10(ISO 8601 第 10 周) |
| month | 2024-04-01 00:00:00 | P202403 |
| year | 2025-01-01 00:00:00 | P2024 |
期限切れパーティションの削除
動的パーティション管理を実行すると、システムは EXPIRE_TIME に基づいて、パーティションの上限 < now() - expire_time のすべての期限切れパーティションを削除します。
例:
テーブル
tbl2を作成します。CREATE TABLE tbl2 (col1 DATETIME) DYNAMIC_PARTITION_POLICY( ENABLE = true, TIME_UNIT = 'hour', PRECREATE_TIME = '3 hour', EXPIRE_TIME = '6 hour', TIME_ZONE = '+8:00') PARTITION BY RANGE COLUMNS (col1)( PARTITION P0 VALUES LESS THAN ('2025-04-21 08:30:00') );現在時刻が
2025-04-21 17:56:06の場合、動的パーティション管理を1回スケジュールした後のパーティション構成は次のとおりです:PARTITION P0 VALUES LESS THAN ('2025-04-21 08:30:00'), PARTITION P2025042108 VALUES LESS THAN ('2025-04-21 09:00:00'), PARTITION P2025042109 VALUES LESS THAN ('2025-04-21 10:00:00'), PARTITION P2025042110 VALUES LESS THAN ('2025-04-21 11:00:00'), PARTITION P2025042111 VALUES LESS THAN ('2025-04-21 12:00:00'), PARTITION P2025042112 VALUES LESS THAN ('2025-04-21 13:00:00'), PARTITION P2025042113 VALUES LESS THAN ('2025-04-21 14:00:00'), PARTITION P2025042114 VALUES LESS THAN ('2025-04-21 15:00:00'), PARTITION P2025042115 VALUES LESS THAN ('2025-04-21 16:00:00'), PARTITION P2025042116 VALUES LESS THAN ('2025-04-21 17:00:00'), PARTITION P2025042117 VALUES LESS THAN ('2025-04-21 18:00:00'), PARTITION P2025042118 VALUES LESS THAN ('2025-04-21 19:00:00'), PARTITION P2025042119 VALUES LESS THAN ('2025-04-21 20:00:00'), PARTITION P2025042120 VALUES LESS THAN ('2025-04-21 21:00:00')時刻が
2025-04-21 17:56:16の場合、再度動的パーティション管理を1回スケジュールした後のパーティション構成は次のとおりです:PARTITION P2025042111 VALUES LESS THAN ('2025-04-21 12:00:00'), PARTITION P2025042112 VALUES LESS THAN ('2025-04-21 13:00:00'), PARTITION P2025042113 VALUES LESS THAN ('2025-04-21 14:00:00'), PARTITION P2025042114 VALUES LESS THAN ('2025-04-21 15:00:00'), PARTITION P2025042115 VALUES LESS THAN ('2025-04-21 16:00:00'), PARTITION P2025042116 VALUES LESS THAN ('2025-04-21 17:00:00'), PARTITION P2025042117 VALUES LESS THAN ('2025-04-21 18:00:00'), PARTITION P2025042118 VALUES LESS THAN ('2025-04-21 19:00:00'), PARTITION P2025042119 VALUES LESS THAN ('2025-04-21 20:00:00'), PARTITION P2025042120 VALUES LESS THAN ('2025-04-21 21:00:00')期限切れパーティション
P0、P2025042108、P2025042109、P2025042110が削除されたことが確認できます。
注意事項
V4.3.5 BP2 より前のバージョンからアップグレードしたテナントでは、
DROPパーティション操作を実行するとグローバルインデックスが無効になります。グローバルインデックスを持つテーブルについては、期限切れパーティション削除機能の使用には注意してください。説明
V4.3.5バージョンでは、OceanBaseデータベースはV4.3.5 BP2バージョンから、テナントレベルの隠れた構成パラメータ
_ob_enable_truncate_partition_preserve_global_indexを導入しました。これは、TRUNCATE/DROPでメインテーブルのパーティション(以下、パーティションDDLと略称)を処理する際に、グローバルインデックスを無効にしないかどうかを制御します。- アップグレードしたテナントでは、この隠れた構成パラメータのデフォルト値は
Falseであり、TRUNCATE/DROPでメインテーブルのパーティションを処理するとグローバルインデックスが無効になることを意味します。 - 新規テナントではデフォルト値が
Trueであり、TRUNCATE/DROPでメインテーブルのパーティションを処理してもグローバルインデックスが無効にならないことを意味します。
- アップグレードしたテナントでは、この隠れた構成パラメータのデフォルト値は
動的パーティション管理は、スケジュールに失敗した場合、自動的に再試行されません。連続するスケジュール失敗により新しいパーティションがタイムリーに作成できず、結果としてデータ書き込みに失敗するのを避けるため、
PRECREATE_TIMEを大きな値に設定することを推奨します。クラスタのアップグレード中はDDL操作が禁止され、動的パーティション管理のスケジューリングは一時停止されます。アップグレード時間を見積もった上で、アップグレード期間中に予めパーティションを作成し、その期間をカバーすることを推奨します。
パーティションキー列の型やパーティションルールを変更した後、新しいテーブルのスキーマが動的パーティション管理の制限を満たさない場合、その後の動的パーティション管理のスケジューリングは失敗します。
1回のスケジューリングで最大2048個のパーティションを作成できます。補完が必要な履歴パーティションが多すぎる場合、予定された作成時間を満たすために複数回のスケジューリングが必要になる可能性があります。
動的パーティション管理機能は、バックグラウンドでDDLを送信してパーティションの作成と削除を行います。他のDDL操作に継続的に影響を与えないように、動的パーティション管理対象のテーブルは多くすべきではありません。