使用效果
PolarDB-X透明分布式的單表打散的工作模式就是將一個邏輯庫內的所有表,按照建表時是否顯式使用MySQL分區語法,產生如下的行為(如下圖所示):
若邏輯表沒顯式指定MySQL的分區定義,將作為單表,并被隨機分配到 PolarDB-X的不同DN節點,實現負載均衡。
若邏輯表顯式指定MySQL的分區定義,將作為分區表,各個分區均衡分布到不同的DN節點。
適用場景
由于該工作模式會將原有業務的所有MySQL單表自動打散各個DN節點,從而突破單機資源瓶頸并實現負載均衡。因此,該模式特別適合于業務應用的庫表總體數目眾多的場景,而且表間的JOIN關系越少,越適合這個模式。
在實際應用的過程中,關于透明分布式的單表打散工作模式的適用場景,可以參考最佳實踐。
使用示例
創建使用單表打散的數據庫
在PolarDB-X中,要使用透明分布式的單表打散工作模式,可以使用以下的建庫SQL:
CREATE DATABASE autodb1 MODE='auto' DEFAULT_SINGLE='on';
查看單表打散的完整的建庫語句:
mysql> show create database autodb1;
+----------+------------------------------------------------------------------------------------------------------------------+
| DATABASE | CREATE DATABASE |
+----------+------------------------------------------------------------------------------------------------------------------+
| autodb1 | CREATE DATABASE `autodb1` CHARSET = `utf8mb4` COLLATE = `utf8mb4_general_ci` MODE = 'auto' DEFAULT_SINGLE = 'on' |
+----------+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
創建多張MySQL單表并自動打散
可嘗試使用以下的建表SQL,在my_autodb
內創建多張單表:
CREATE TABLE sin_t1(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t2(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t3(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t4(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
查看單表打散后的單表實際拓撲
通過SHOW TOPOLOGY FROM #tableName
可以查看各個單表分布的實際位置:
mysql> show topology from sin_t1\G
*************************** 1. row ***************************
ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t1_HnMx
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default
1 row in set (0.02 sec)
mysql> show topology from sin_t2\G
*************************** 1. row ***************************
ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t2_IT7l
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default
1 row in set (0.01 sec)
mysql> show topology from sin_t3\G
*************************** 1. row ***************************
ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t3_HmtN
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default
1 row in set (0.01 sec)
mysql> show topology from sin_t4\G
*************************** 1. row ***************************
ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t4_ab7e
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default
1 row in set (0.01 sec)
從上述各個單表的 show topology 結果來看,可以發現 sin_t1 與 sin_t3、sin_t2 與 sin_t4 分別落在了不同的DN上,sin_t1 與 sin_t3 落在DN polardbx-storage-0-master 上,而 sin_t2 與 sin_t4 落在DN polardbx-storage-1-master上。
注意事項
單表打散后,部分表的JOIN執行性能可能會出現變化,這是因為原本同一個DN的多個單表的JOIN 由于落到不同的DN, 導致JOIN算子無法繼續下推至DN執行。
文檔內容是否對您有幫助?