使用效果
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执行。
文档内容是否对您有帮助?