動的パーティションは、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が削除されたことが確認できます。
注意点
- 現在のバージョンでは、
DROPパーティション操作を実行するとグローバルインデックスが無効になります。グローバルインデックスを持つテーブルについては、期限切れパーティションの削除機能を慎重に使用してください。 - 動的パーティション管理のスケジューリングが失敗した場合、自動的に再試行されません。連続するスケジューリング失敗により新しいパーティションがタイムリーに作成できず、データ書き込みに失敗することを避けるため、
PRECREATE_TIMEを大きな値に設定することを推奨します。 - クラスタのアップグレード中はDDL操作が禁止され、動的パーティション管理のスケジューリングは一時停止されます。推定されるアップグレード時間に基づき、アップグレードウィンドウをカバーするように、事前にパーティションを作成することを推奨します。
- パーティションキー列の型やパーティションルールを変更した後、新しいテーブルスキーマが動的パーティション管理の制限を満たさない場合、その後の動的パーティション管理によるこのテーブルへのスケジューリングは失敗します。
- 1回のスケジューリングで最大2048個のパーティションを作成できます。補完が必要な履歴パーティションが多すぎる場合、予定された時間までに準備するには複数回のスケジューリングが必要です。
- 動的パーティション管理機能は、バックグラウンドでDDLを送信してパーティションの作成と削除を行います。他のDDL操作に継続的に影響を与えないように、動的パーティション管理対象のテーブルは多くすべきではありません。