本文檔旨在介紹分區創建策略和分區刪除策略。
分區創建策略
表如果屬于表組(tablegroup),創建分區可能會失敗或破壞負載均衡,請謹慎配置創建策略。
新建索引可能會導致表組(tablegroup)失效,因為同屬于一個表組的表必須擁有完全一致的分區,而新建分區可能會破壞這種現狀,導致表組失效。
自定義分區創建策略
自定義分區創建策略是通過 SQL 表達式來生成分區的上界,分為以下 3 個步驟:
通過 SQL 表達式獲取基準時間:基準時間是指分區生成時所依賴的起始時間。
說明以分區計劃運行的時間為起始時間:直接使用
now()
或者sysdate
。定義分區生成的間隔:分區計劃將會以此間隔作為分區生成的時間步長以生成若干個分區。您在間隔輸入框中輸入所需間隔后,ODC 通過
${INTERVAL}
表達式引用該間隔,并且將該間隔加入到步驟 1 所生成的 SQL 表達式中。生成對應分區鍵類型的分區表達式:將步驟 1 和步驟 2 生成的時間類型的 SQL 表達式轉換成對應分區鍵真實的類型(如果對應分區鍵的類型與 SQL 表達式的類型相同,可忽略此步驟)。
自定義分區創建策略中支持變量引用,目前支持的表達式如下:
表達式名 | 說明 | 示例 |
INTERVAL | 時間間隔,用以描述分區生成時的步長。ODC 在運行時會將該變量引用替換為 創建規則 > 細則 > 間隔 中的內容。 |
|
通常情況下,如果您采用 自定義 方式創建分區策略表示需要將非時間類型分區鍵按照時間類型的方式遞增生成新的分區。下表可以幫助您快速寫出正確的 SQL 表達式:
分區上界生成表達式速查表 - MySQL 模式
分區表達式樣例 | 說明 | 間隔 | 分區上界計算 SQL 表達式 |
| 按年生成 | 1 |
|
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
按日生成 | 1 |
| |
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
按日生成 | 1 |
| |
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
按日生成 | 1 |
| |
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
按日生成 | 1 |
| |
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
按日生成 | 1 |
| |
| 按年生成 | 1 |
|
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
| 按年生成 | 1 |
|
按月生成 | 1 |
| |
按日生成 | 1 |
| |
注:Unix 時間戳 | 按年生成 | 1 |
|
按月生成 | 1 |
| |
按日生成 | 1 |
|
分區上界生成表達式速查表 - Oracle 模式
分區表達式樣例 | 說明 | 間隔 | 分區上界計算 SQL 表達式 |
| 按年生成 |
|
|
| 按年生成 |
|
|
按月生成 |
|
| |
| 按年生成 |
|
|
按月生成 |
|
| |
| 按年生成 |
|
|
按月生成 |
|
| |
| 按年生成 |
|
|
按月生成 |
|
| |
按日生成 |
|
| |
| 按年生成 |
|
|
按月生成 |
|
| |
按日生成 |
|
| |
| 按年生成 |
|
|
按月生成 |
|
| |
按日生成 |
|
| |
| 按年生成 |
|
|
按月生成 |
|
| |
按日生成 |
|
| |
| 按年生成 |
|
|
按月生成 |
|
| |
按日生成 |
|
| |
| 按年生成 |
|
|
| 按年生成 |
|
|
按月生成 |
|
| |
| 按年生成 |
|
|
按月生成 |
|
| |
按日生成 |
|
|
順序遞增分區創建策略
順序遞增只針對時間類型的分區鍵。
順序遞增的基準時間可以當前時間和指定時間為準,按照用戶配置的時間間隔順序生成新的分區。
分區名生成策略
用戶可以通過不同的策略生成分區名,分區名的生成和分區的內容相關聯。
分區計劃目前提供 2 種分區名生成策略:
前綴加后綴策略:前綴是一個字符串常量,后綴是針對日期型分區表達式的引用,用戶可以通過修改前綴和后綴的內容,基準時間以及輸出格式來獲取不同的分區名。
重要該策略僅對日期型的分區鍵有效。后綴引用指定分區鍵對應的 SQL 表達式的值,由于限定了引用的分區鍵是時間類型,因此其對應的 SQL 表達式可以被轉換成時間,最后再格式化輸出為分區名的后綴部分。
自定義策略:該策略通過 SQL 表達式生成符合用戶要求的分區名。在命名表達式中可以通過
${分區鍵}
的方式引用分區鍵對應分區表達式的值。
下述為常見分區名的生成表達式速查表,ODC 僅支持速查數字類型和字符類型的分區鍵。
分區名生成表達式速查表 - MySQL 模式
待引用分區表達式示例 | 命名規則表達式 | 預覽 |
|
| P2024 |
| ||
|
| P202401 |
| ||
|
| P202401 |
| P2024_01 | |
|
| P202401 |
| P2024_01 | |
|
| P20240101 |
| ||
|
| P20240101 |
| P2024_01_01 | |
|
| P20240101 |
| P2024_01_01 | |
|
| P20240101 |
| P2024_01_01 | |
|
| P20240101 |
| P2024_01_01 | |
注:時間戳,單位:秒 |
| P2024 |
| P202401 | |
| P2024_01 | |
| P20240101 | |
| P2024_01_01 |
分區名生成表達式速查表 - Oracle 模式
待引用分區表達式示例 | 命名規則表達式 | 預覽 |
|
| P2024 |
| ||
|
| P202401 |
| ||
|
| P202401 |
| P2024_01 | |
|
| P202401 |
| P2024_01 | |
|
| P20240101 |
| ||
|
| P20240101 |
| P2024_01_01 | |
|
| P20240101 |
| P2024_01_01 | |
|
| P20240101 |
| P2024_01_01 | |
|
| P20240101 |
| P2024_01_01 |
分區刪除策略
表如果包含全局索引,刪除分區會導致全局索引失效,請謹慎操作;如果選擇重建全局索引可能因耗時較久導致業務問題,或者重建全局索引失敗導致線上問題。
重建全局索引選項僅對 Oracle 模式有效,MySQL 模式下無此選項,因 MySQL 模式下默認會重建全局索引。
分區刪除策略需要考慮預創建分區的影響,避免因為分區預創建而導致的歷史分區誤刪。例如:目標表按月分區,想保留過去 12 個月的分區,分區保留數目中輸入 12,假設此時創建策略預創建 3 個月的分區,那么實際將保留過去 9 個月和未來 3 個月的分區。
分區刪除策略是針對已經存在的分區,目前僅支持一種策略:保留最近的 N 個分區,即刪除最近 N 個分區外的其它分區。
示例:
創建
order
表且表中包含p2023_01
、p2023_02
兩個分區。CREATE TABLE `order` ( `time` date NOT NULL, `parti_key` int(11), `name` varchar(120) DEFAULT NULL ) partition by range columns(time, parti_key) (partition p2023_01 values less than ('2023-01-01', 20230101), partition p2023_02 values less than ('2023-02-01', 20230201))
為
order
表配置分區刪除策略(保留最近 1 個分區)。根據分區刪除策略形成的分區刪除語句將會刪除
p2023_01
分區。
注意事項
表如果屬于表組(tablegroup),創建分區可能會失敗或破壞負載均衡,請謹慎配置創建策略。
新建索引可能會導致表組(tablegroup)失效,因為同屬于一個表組的表必須擁有完全一致的分區,而新建分區可能會破壞這種現狀,導致表組失效。
表如果包含全局索引,刪除分區會導致全局索引失效,請謹慎操作;如果選擇重建全局索引可能因耗時較久導致業務問題,或者重建全局索引失敗導致線上問題。
重建全局索引選項僅對 Oracle 模式有效,MySQL 模式下無此選項,因 MySQL 模式下默認會重建全局索引。