混合分區原理如下圖所示:

混合分區的基本原理是將分區表中的分區儲存在不同的儲存介質上,以達到冷熱資料分離管理的目的。比如將熱資料存放區在本地PFS上,冷資料存放區在OSS上,這樣可以極大地降低冷資料的儲存成本,且不影響熱資料的查詢效能,也不影響對熱資料執行DML操作。
說明
建立混合分區表功能目前處於灰階階段。如需使用,請前往配額中心,根據配額IDpolardb_mysql_hybrid_partition
找到配額名稱,在對應的操作列單擊申請來開通該功能。
注意事項
建立的混合分區表至少需要包含一個在InnoDB引擎上建立的分區。
建立包含二級分區的混合分區表時,一級分區的引擎必須和表的引擎保持一致,且二級分區至少需要包含一個在InnoDB引擎上建立的分區。
混合分區表的分區類型目前僅支援RANGE
和LIST
類型。
暫不支援對混合分區表中的OSS分區執行DML操作(包括INSERT
、UPDATE
、DELETE
和LOAD
)。
叢集版本為PolarDB MySQL版8.0.2.2.17版本及以上時,支援對混合分區表執行ADD和DROP操作。其它版本暫不支援對混合分區表執行ADD和DROP操作。
參數說明
使用混合分區表時,您可以根據實際使用情境在PolarDB叢集的参数配置中設定以下參數。
參數 | 說明 |
loose_hybrid_partition_query_mix_engine_enabled | 查詢混合分區表時,是否查詢非InnoDB引擎中的分區資料。取值如下: |
建立混合分區
您可以通過已有的OSS Server來建立混合分區,如果當前不存在OSS Server,您可以通過以下文法來建立OSS Server:
CREATE SERVER oss_server_name
FOREIGN DATA WRAPPER oss
OPTIONS(EXTRA_SERVER_INFO '{"oss_endpoint": "<my_oss_endpoint>",
"oss_bucket": "<my_oss_bucket>", "oss_access_key_id": "<my_oss_access_key_id>",
"oss_access_key_secret": "<my_oss_access_key_secret>", "oss_prefix":"<my_oss_prefix>", "oss_sts_token": "<my_oss_sts_token>"}');
說明
叢集版本為PolarDB MySQL版8.0.2版本且Revision version為8.0.2.2.6及以上時,支援使用my_oss_sts_token
參數。
參數說明如下表所示:
參數 | 類型 | 備忘 |
oss_server_name | 字串 | OSS server名稱。 說明 該參數為全域參數,且全域唯一。該參數不區分大小寫,最大長度不超過64個字元,超過64個字元的名稱會被自動截斷。您可以將OSS server名稱指定為帶引號的字串。 |
my_oss_endpoint | 字串 | OSS對應地區的網域名稱。 說明 如果是從阿里雲的主機訪問資料庫,應該使用內網網域名稱(即帶有“internal”的網域名稱),避免產生公網流量。 |
my_oss_bucket | 字串 | 資料檔案所在OSS的bucket,需要通過OSS預先建立。 |
my_oss_access_key_id | 字串 | OSS帳號ID。 |
my_oss_access_key_secret | 字串 | OSS帳號KEY。 |
my_oss_prefix | 字串 | OSS路徑首碼。用於指定資料檔案的存放路徑。不能包含特殊字元,也不可為空。 |
my_oss_sts_token | 字串 | OSS臨時訪問憑證。擷取OSS臨時訪問憑證詳情請參見擷取臨時訪問憑證。 說明 my_oss_sts_token 參數值有預設的到期時間。如果my_oss_sts_token 已到期,您需要通過以下命令重設EXTRA_SERVER_INFO 中的全部參數值。
ALTER SERVER server_name OPTIONS(EXTRA_SERVER_INFO '{"oss_endpoint": "<my_oss_endpoint>",
"oss_bucket": "<my_oss_bucket>", "oss_access_key_id": "<my_oss_access_key_id>",
"oss_access_key_secret": "<my_oss_access_key_secret>", "oss_prefix":"<my_oss_prefix>", "oss_sts_token": "<my_oss_sts_token>"}');
|
建立混合分區表,樣本如下:
CREATE TABLE t2(a1 INT, a2 VARCHAR(30), a3 VARCHAR(256))
CONNECTION = "oss_server_name"
PARTITION BY RANGE(a1)
(
PARTITION p1 values less than (1000) ENGINE = CSV,
PARTITION p2 values less than (2000) ENGINE = CSV,
PARTITION p3 values less than (3000) ENGINE = INNODB
);
查詢混合分區
您可以通過以下兩種方式來查詢不同引擎的分區資料。
在控制台將 hybrid_partition_query_mix_engine_enabled
參數設定為ON,執行查詢語句時,查詢結果中就會包含非InnoDB分區的資料。樣本如下:
其中,t1
表示需要查詢的混合分區表。
在控制台將 hybrid_partition_query_mix_engine_enabled
參數設定為OFF,查詢指定分區中的資料。樣本如下:
SELECT * FROM t1 partition (p1);
其中,t1
表示需要查詢的混合分區表,p1
表示需要查詢的分區。