本文為您介紹如何開啟自動分區和自動分區的表現形式。
使用效果
PolarDB-X透明分布式的自動分區的工作模式,就是將一個邏輯庫內的所有MySQL單表(沒有顯式使用MySQL分區文法的表),預設按如下方式決定資料分割配置:
自動使用表的主鍵(如無顯式指定主鍵,系統會添加預設主鍵
_drds_implicit_id_)進行水平資料分割。表中所有索引都會根據自動分區規則轉換為全域索引,並按索引列進行水平資料分割。
說明
系統自動分區後的預設分區數不支援手動修改。
適用情境
自動分區後,普通索引會轉為全域索引,這可能會導致表的寫入效能下降(寫入操作需要通過分散式交易維護全域索引表與主表的一致性),所以自動分區資料庫更適合於對效能要求不高的基於MySQL單機資料庫開發的應用(比如,一些新開發且需要快速上線的應用)。通常,這類型的業務的庫表數目不多,應用的查詢情境相對簡單(比如按表主鍵點查)。
在實際應用的過程中,關於透明分布式的自動分區工作模式的適用情境的細節,可以參考最佳實務。
前提條件
自動分區僅支援AUTO模式資料庫,即建庫SQL時必須指定
MODE='AUTO',樣本如下:CREATE DATABASE db_name MODE='AUTO';AUTO模式資料庫預設是手動分區,需手動設定全域如下參數才能使用自動分區:
SET GLOBAL AUTO_PARTITION = true;
樣本
建立使用自動分區的資料庫
在PolarDB-X中,要使用自動分區的建表模式,可以使用以下的建庫SQL:
CREATE DATABASE autodb2 MODE='AUTO';由於目前AUTO庫透明分布式的預設的工作模式是手動分區,還需手動執行以下的全域開關方可開啟自動資料分割函數:
SET GLOBAL AUTO_PARTITION=true;建立多張MySQL單表並自動分區
執行如下SQL,建立包含主鍵索引(idx_name)的表:
CREATE TABLE auto_t1(
id BIGINT NOT NULL auto_increment,
bid INT,
name VARCHAR(30),
birthday datetime,
PRIMARY KEY(id),
INDEX idx_name(name)
);查看自動分區表的完整建表SQL
SHOW FULL CREATE TABLE auto_t1;結果如下:
CREATE PARTITION TABLE `auto_t1` (
`id` bigint NOT NULL AUTO_INCREMENT,
`bid` int DEFAULT NULL,
`name` varchar(30) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
GLOBAL INDEX /* idx_name_$578c */ `idx_name` (`name`)
PARTITION BY KEY(`name`,`id`)
PARTITIONS 16,
LOCAL KEY `_local_idx_name` (`name`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE = utf8mb4_0900_ai_ci
PARTITION BY KEY(`id`)
PARTITIONS 16說明
如上所示,之前的普通索引idx_name被系統按照自動分區規則轉換為了全域索引,並且以主鍵id為分區鍵進行了分區。