ダイナミックパーティションとは、OceanBaseデータベースがV4.3.5 BP2バージョンから提供している、パーティションを自動的に管理する機能です。この機能により、テーブルは設定されたルールに基づいてパーティションを自動的に作成および削除できるようになり、運用保守を簡素化し、データの増加や期限切れに対応することが可能になります。
機能特性
TIME_UNIT(時間単位、日、月など)に基づいて定期的に新しいパーティションを作成し、データが時間範囲に応じて自動的に拡張されるようにします。- パーティションの境界は時間単位(例:
hour、day)に基づいて分割され、時間系列でデータを保存するシナリオ(ログ、取引記録など)に適しています。
- パーティションの境界は時間単位(例:
PRECREATE_TIMEを使用して将来のパーティションを事前に作成することで、データの急増によるパーティション不足の問題を回避します。EXPIRE_TIMEに基づいて定期的に期限切れのパーティションをクリーンアップし、ストレージ容量を解放します。カスタムタイムゾーン(
TIME_ZONE)をサポートし、タイムゾーン間のデータの一貫性を確保します。numberタイプのタイムスタンプの精度設定(例:BIGINT_PRECISION)をサポートし、さまざまな時間精度要件に対応します。
プリクリエーションパーティション
動的パーティション管理を実行する際、システムはTIME_UNITごとにパーティションを作成し、最大パーティション境界がnow() + precreate_timeを超えるまで続けます。最初に作成されるパーティションの境界は、既存の最大パーティション境界にTIME_UNITを加えて切り上げた値となります。
例:
テーブルtbl1を作成します:
CREATE TABLE tbl1 (col1 TIMESTAMP)
DYNAMIC_PARTITION_POLICY(
ENABLE = true,
TIME_UNIT = 'hour',
PRECREATE_TIME = '3 hour',
EXPIRE_TIME = '1 day',
TIME_ZONE = '+8:00')
PARTITION BY RANGE (col1)(
PARTITION P0 VALUES LESS THAN (TIMESTAMP '2025-04-20 13:30:00')
);
現在時刻が
2025-04-20 12:34:56の場合、一度動的パーティション管理をスケジュールした後のパーティション構成は次のとおりです:PARTITION P0 VALUES LESS THAN (TIMESTAMP '2025-04-20 13:30:00') PARTITION P2025042013 VALUES LESS THAN (TIMESTAMP '2025-04-20 14:00:00'), PARTITION P2025042014 VALUES LESS THAN (TIMESTAMP '2025-04-20 15:00:00'), PARTITION P2025042015 VALUES LESS THAN (TIMESTAMP '2025-04-20 16:00:00')既存の最大パーティション境界が現在時刻より小さい場合、プリクリエーションパーティションは過去のパーティションを補完しようとします。例えば、既存の最大パーティションが
PARTITION P0 VALUES LESS THAN (TIMESTAMP '2025-04-20 11:30:00')で、現在時刻が2025-04-20 12:34:56の場合、一度動的パーティション管理をスケジュールした後のパーティション構成は次のとおりです:PARTITION P0 VALUES LESS THAN (TIMESTAMP '2025-04-20 11:30:00'), PARTITION P2025042011 VALUES LESS THAN (TIMESTAMP '2025-04-20 12:00:00'), PARTITION P2025042012 VALUES LESS THAN (TIMESTAMP '2025-04-20 13:00:00'), PARTITION P2025042013 VALUES LESS THAN (TIMESTAMP '2025-04-20 14:00:00'), PARTITION P2025042014 VALUES LESS THAN (TIMESTAMP '2025-04-20 15:00:00'), PARTITION P2025042015 VALUES LESS THAN (TIMESTAMP '2025-04-20 16:00:00')過去のパーティション
P2025042011が補完されました。
プリクリエーションパーティションの名前
システムは、パーティション境界値と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 TIMESTAMP) DYNAMIC_PARTITION_POLICY( ENABLE = true, TIME_UNIT = 'hour', PRECREATE_TIME = '3 hour', EXPIRE_TIME = '6 hour', TIME_ZONE = '+8:00') PARTITION BY RANGE (col1)( PARTITION P0 VALUES LESS THAN (TIMESTAMP '2025-04-21 08:30:00') );現在時刻が
2025-04-21 17:58:06の場合、動的パーティション管理を一度スケジュールした後のパーティション構成は次のとおりです:PARTITION P0 VALUES LESS THAN (TIMESTAMP '2025-04-21 08:30:00.000000'), PARTITION P2025042108 VALUES LESS THAN (TIMESTAMP '2025-04-21 09:00:00.000000'), PARTITION P2025042109 VALUES LESS THAN (TIMESTAMP '2025-04-21 10:00:00.000000'), PARTITION P2025042110 VALUES LESS THAN (TIMESTAMP '2025-04-21 11:00:00.000000'), PARTITION P2025042111 VALUES LESS THAN (TIMESTAMP '2025-04-21 12:00:00.000000'), PARTITION P2025042112 VALUES LESS THAN (TIMESTAMP '2025-04-21 13:00:00.000000'), PARTITION P2025042113 VALUES LESS THAN (TIMESTAMP '2025-04-21 14:00:00.000000'), PARTITION P2025042114 VALUES LESS THAN (TIMESTAMP '2025-04-21 15:00:00.000000'), PARTITION P2025042115 VALUES LESS THAN (TIMESTAMP '2025-04-21 16:00:00.000000'), PARTITION P2025042116 VALUES LESS THAN (TIMESTAMP '2025-04-21 17:00:00.000000'), PARTITION P2025042117 VALUES LESS THAN (TIMESTAMP '2025-04-21 18:00:00.000000'), PARTITION P2025042118 VALUES LESS THAN (TIMESTAMP '2025-04-21 19:00:00.000000'), PARTITION P2025042119 VALUES LESS THAN (TIMESTAMP '2025-04-21 20:00:00.000000'), PARTITION P2025042120 VALUES LESS THAN (TIMESTAMP '2025-04-21 21:00:00.000000')時間が
2025-04-21 17:58:16の場合、再度動的パーティション管理をスケジュールした後のパーティション構成は次のとおりです:PARTITION P2025042111 VALUES LESS THAN (TIMESTAMP '2025-04-21 12:00:00.000000'), PARTITION P2025042112 VALUES LESS THAN (TIMESTAMP '2025-04-21 13:00:00.000000'), PARTITION P2025042113 VALUES LESS THAN (TIMESTAMP '2025-04-21 14:00:00.000000'), PARTITION P2025042114 VALUES LESS THAN (TIMESTAMP '2025-04-21 15:00:00.000000'), PARTITION P2025042115 VALUES LESS THAN (TIMESTAMP '2025-04-21 16:00:00.000000'), PARTITION P2025042116 VALUES LESS THAN (TIMESTAMP '2025-04-21 17:00:00.000000'), PARTITION P2025042117 VALUES LESS THAN (TIMESTAMP '2025-04-21 18:00:00.000000'), PARTITION P2025042118 VALUES LESS THAN (TIMESTAMP '2025-04-21 19:00:00.000000'), PARTITION P2025042119 VALUES LESS THAN (TIMESTAMP '2025-04-21 20:00:00.000000'), PARTITION P2025042120 VALUES LESS THAN (TIMESTAMP '2025-04-21 21:00:00.000000')期限切れパーティション
P0、P2025042108、P2025042109、およびP2025042110が削除されたことが確認できます。
注意事項
- 現行バージョンでは、
DROPパーティション操作を実行するとグローバルインデックスが無効になります。グローバルインデックスを持つテーブルについては、期限切れのパーティションを削除する機能を慎重に使用してください。 - ダイナミックパーティション管理は、スケジューリング失敗時に自動的に再試行されません。連続したスケジューリング失敗により新しいパーティションが適時に作成できず、データ書き込みに失敗することを避けるために、
PRECREATE_TIMEを大きな値に設定することを推奨します。 - クラスタのアップグレード中はDDL操作が禁止され、ダイナミックパーティション管理のスケジューリングも一時停止されます。アップグレード時間を見込んで、事前にパーティションを予約作成し、アップグレード期間をカバーすることを推奨します。
- パーティションキー列の型やパーティションルールを変更した後、新しいテーブルのスキーマがダイナミックパーティション管理の制限を満たさない場合、そのテーブル上での今後のダイナミックパーティション管理のスケジューリングは失敗します。
- 一度のスケジューリングで最大2048個のパーティションを作成できます。追加する履歴パーティションが多すぎる場合、複数回のスケジューリングが必要となり、予約作成時間を満たすことができません。
- ダイナミックパーティション管理機能は、パーティションの作成および削除のために、バックグラウンドでDDLを送信する必要があります。他のDDL操作への影響を継続的に避けるため、ダイナミックパーティションテーブルの数は多くない方が望ましいです。