本文介紹了如何免費體驗PolarDB-X的透明分布式特性。
背景
PolarDB-X推出"透明分布式"系列能力,從連接、開發到管理行為均最大限度保留單機MySQL的使用體驗,讓用戶的分布式改造周期大幅縮短,研發運維團隊的原有技術棧最大限度保留。
PolarDB-X具備從單機到分布式的平滑演進能力,支持通過DDL將一張大表動態調整為分布式的分區表,結合分布式事務、以及兼容MySQL Binlog的數據回流,可完成單機到分布式的快速改造。本體驗從PolarDB-X的Auto Partition,以及兼容MySQL Binlog的CDC能力兩個方面演示透明分布式能力。
基于自動化拆分和分布式Online DDL,保證單機MySQL平滑演進到分布式
引入全局Binlog回流單機MySQL,確保分布式可上可下
阿里云提供了數據庫解決方案功能體驗館,提供真實免費的PolarDB分布式版實例環境和開箱即用的測試方法,您可以在線快捷體驗PolarDB-X的透明分布式能力。
影響
本功能體驗不涉及生產環境的部署,因此不會影響業務。
費用
本次體驗中,由于體驗涉及到的資源不歸屬于您,因此不會產生任何費用,您可以放心體驗。
體驗內容
體驗環境
在本免費體驗中,阿里云提供了預置環境供您操作體驗,預置環境的詳情如下:
集群:提供了一個PolarDB-X實例。具體如下:
內核版本:V5.4.18-17034692
計算節點規格:4核16GB
計算節點數量:2個
存儲節點規格:4核16GB
存儲節點數量:2個
兼容性:MySQL 5.7
提供了一臺安裝了Sysbench壓測工具的壓測機,向PolarDB-X實例運行壓測任務。壓測細節如下:
測試模式:oltp_point_select_k,即對k字段進行僅含分區鍵的單點等值查詢
說明本體驗中用到的Sysbench壓測模式相比標準oltp_point_select模式進行了一定調整:標準oltp_point_select模式為對ID字段進行點查,而oltp_point_select_k模式則是對k字段進行點查。
壓測數據表大小:1張表,每張表10000條數據
壓測并發線程數:4線程
壓測持續時間:一共1分鐘
觀測指標
觀測表的物理分布,可以按主鍵進行拆分。
觀測改變分區鍵后與使用主鍵進行分區的性能對比。指標為TPS(Transactions Per Second),即數據庫每秒執行的事務數,以COMMIT成功次數為準。該指標可用于觀測集群性能。
觀測CDC后的數據一致性。
操作步驟
進入瑤池解決方案體驗館。
單擊核心功能體驗,然后單擊透明分布式功能體驗的免費體驗按鈕,進入如下頁面:
單擊頁面下方創建免費體驗任務按鈕。
稍等片刻后,單擊刷新任務列表,可以看到您創建的體驗任務已開始。
單擊查看詳情,進入實時查詢情況頁面,并單擊啟動任務。
說明請根據頁面按鈕提示,手動點擊按鈕執行每一步操作。若在倒計時結束時沒有手動點擊執行,則會自動執行對應操作。
首先我們來體驗PolarDB-X的Auto Partitioning特性。
單擊切換到壓測庫,切換到PolarDB-X主庫mydb。
use mydb;
單擊查看壓測表,自動執行如下命令,查看所用到的壓測表sbtest1的建表語句。
show create table sbtest1;
返回結果如下:
+---------+-----------------------------------------------------+ | Table | Create Table | +---------+-----------------------------------------------------+ | sbtest1 | CREATE TABLE `sbtest1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `k` int(11) NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE = InnoDB AUTO_INCREMENT = 10001 DEFAULT CHARSET = utf8 | +---------+-----------------------------------------------------+ 1 row in set (0.01 sec)
單擊查看物理DN,自動執行如下命令,查看表在存儲節點的分布情況。
show storage;
返回結果如下:
+------------------------------+--------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+ | STORAGE_INST_ID | LEADER_NODE | IS_HEALTHY | INST_KIND | DB_COUNT | GROUP_COUNT | STATUS | DELETABLE | DELAY | ACTIVE | +------------------------------+--------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+ | pxc-xdb-m-hzrth7pjc07vyb5509 | 11.197.3.159:3406 | true | META_DB | 2 | 2 | 0 | false | 1 | 10 | | pxc-xdb-s-hzrth7pjc07vyb3208 | 11.197.8.96:3247 | true | MASTER | 3 | 4 | 0 | false | 0 | 10 | | pxc-xdb-s-hzrth7pjc07vyb44da | 10.127.205.70:3039 | true | MASTER | 3 | 3 | 0 | true | 0 | 10 | +------------------------------+--------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+ 3 rows in set (0.02 sec)
單擊查看表的分布,自動執行如下命令:
show topology from sbtest1;
返回結果如下:
+------+-------------------+--------------------+----------------+-------------------+-------------+------------------------------+-------------------+ | ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | PHY_DB_NAME | DN_ID | STORAGE_POOL_NAME | +------+-------------------+--------------------+----------------+-------------------+-------------+------------------------------+-------------------+ | 0 | MYDB_P00000_GROUP | sbtest1_R8tg_00000 | p1 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 1 | MYDB_P00001_GROUP | sbtest1_R8tg_00001 | p2 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 2 | MYDB_P00000_GROUP | sbtest1_R8tg_00002 | p3 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 3 | MYDB_P00001_GROUP | sbtest1_R8tg_00003 | p4 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 4 | MYDB_P00000_GROUP | sbtest1_R8tg_00004 | p5 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 5 | MYDB_P00001_GROUP | sbtest1_R8tg_00005 | p6 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 6 | MYDB_P00000_GROUP | sbtest1_R8tg_00006 | p7 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 7 | MYDB_P00001_GROUP | sbtest1_R8tg_00007 | p8 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 8 | MYDB_P00000_GROUP | sbtest1_R8tg_00008 | p9 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 9 | MYDB_P00001_GROUP | sbtest1_R8tg_00009 | p10 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 10 | MYDB_P00000_GROUP | sbtest1_R8tg_00010 | p11 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 11 | MYDB_P00001_GROUP | sbtest1_R8tg_00011 | p12 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 12 | MYDB_P00000_GROUP | sbtest1_R8tg_00012 | p13 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 13 | MYDB_P00001_GROUP | sbtest1_R8tg_00013 | p14 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 14 | MYDB_P00000_GROUP | sbtest1_R8tg_00014 | p15 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 15 | MYDB_P00001_GROUP | sbtest1_R8tg_00015 | p16 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | +------+-------------------+--------------------+----------------+-------------------+-------------+------------------------------+-------------------+ 16 rows in set (0.00 sec)
單擊查看壓測表數據分布,自動執行如下命令:
select TABLE_SCHEMA,TABLE_NAME,STORAGE_INST_ID,PHYSICAL_TABLE,PARTITION_NAME as p_name,TABLE_ROWS as row from information_schema.TABLE_DETAIL where table_schema='mydb' and table_name= 'sbtest1' ;
返回結果如下:
+--------------+------------+------------------------------+--------------------+--------+------+ | TABLE_SCHEMA | TABLE_NAME | STORAGE_INST_ID | PHYSICAL_TABLE | p_name | row | +--------------+------------+------------------------------+--------------------+--------+------+ | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00000 | p1 | 610 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00001 | p2 | 632 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00002 | p3 | 680 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00003 | p4 | 686 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00004 | p5 | 576 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00005 | p6 | 682 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00006 | p7 | 627 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00007 | p8 | 609 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00008 | p9 | 633 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00009 | p10 | 632 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00010 | p11 | 593 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00011 | p12 | 606 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00012 | p13 | 586 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00013 | p14 | 598 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_MXlT_00014 | p15 | 609 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_MXlT_00015 | p16 | 641 | +--------------+------------+------------------------------+--------------------+--------+------+ 16 rows in set (0.02 sec)
可以看到,表sbtest1的建表語句中,并未指定任何分區定義(如分區鍵、分區策略等)。但從其拓撲分布和數據分布可以看到,PolarDB-X能夠自動選擇分區鍵(默認為主鍵)并對表及其索引進行水平分區。
單擊啟動壓測,并等待30秒后進行后續操作。
啟動壓測后,我們來體驗PolarDB-X在改變分區鍵前后的性能對比。
單擊修改分區鍵,自動執行如下命令,將分區方式變更為k列:
alter table sbtest1 partition by hash(k) partitions 8;
單擊再次查看表的分布,自動執行如下命令:
show topology from sbtest1;
返回結果如下:
+------+-------------------+-------------------------+----------------+-------------------+-------------+------------------------------+-------------------+ | ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | PHY_DB_NAME | DN_ID | STORAGE_POOL_NAME | +------+-------------------+-------------------------+----------------+-------------------+-------------+------------------------------+-------------------+ | 0 | MYDB_P00000_GROUP | sbtest1_mewg_qpne_00000 | p1 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 1 | MYDB_P00001_GROUP | sbtest1_mewg_qpne_00001 | p2 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 2 | MYDB_P00000_GROUP | sbtest1_mewg_qpne_00002 | p3 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 3 | MYDB_P00001_GROUP | sbtest1_mewg_qpne_00003 | p4 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 4 | MYDB_P00000_GROUP | sbtest1_mewg_qpne_00004 | p5 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 5 | MYDB_P00001_GROUP | sbtest1_mewg_qpne_00005 | p6 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | | 6 | MYDB_P00000_GROUP | sbtest1_mewg_qpne_00006 | p7 | | mydb_p00000 | pxc-xdb-s-hzrth7pjc07vyb3208 | | | 7 | MYDB_P00001_GROUP | sbtest1_mewg_qpne_00007 | p8 | | mydb_p00001 | pxc-xdb-s-hzrth7pjc07vyb44da | | +------+-------------------+-------------------------+----------------+-------------------+-------------+------------------------------+-------------------+ 8 rows in set (0.00 sec)
單擊再次查看壓測表數據分布,自動執行如下命令:
select TABLE_SCHEMA,TABLE_NAME,STORAGE_INST_ID,PHYSICAL_TABLE,PARTITION_NAME as p_name,TABLE_ROWS as row from information_schema.TABLE_DETAIL where table_schema='mydb' and table_name= 'sbtest1' ;
返回結果如下:
+--------------+------------+------------------------------+-------------------------+--------+------+ | TABLE_SCHEMA | TABLE_NAME | STORAGE_INST_ID | PHYSICAL_TABLE | p_name | row | +--------------+------------+------------------------------+-------------------------+--------+------+ | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_mewg_qpne_00000 | p1 | 937 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_mewg_qpne_00001 | p2 | 847 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_mewg_qpne_00002 | p3 | 1338 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_mewg_qpne_00003 | p4 | 1296 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_mewg_qpne_00004 | p5 | 1917 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_mewg_qpne_00005 | p6 | 986 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb3208 | sbtest1_mewg_qpne_00006 | p7 | 1297 | | mydb | sbtest1 | pxc-xdb-s-hzrth7pjc07vyb44da | sbtest1_mewg_qpne_00007 | p8 | 1423 | +--------------+------------+------------------------------+-------------------------+--------+------+ 8 rows in set (0.02 sec)
可以看到,壓測數據發生了重分布。
在整個過程中可以觀測左側實例的TPS性能變化情況。
接下來我們來體驗PolarDB-X兼容MySQL Binlog的CDC能力及CDC后的數據一致性。
單擊切換到同步庫,自動執行如下命令:
use cdc_db;
單擊確認自建沒有test_11表,自動執行如下命令:
show create table test_11 ;
返回結果如下:
ERROR 1146 (42S02): Table 'cdc_db.test_11' doesn't exist
單擊PolarDB分布式版創建表,在主庫自動執行如下建表命令,創建test_11表:
CREATE TABLE `test_11` ( `id` int(11) NOT NULL, `t` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
單擊增加列test_column,自動執行如下命令,在上一步主庫中創建的表中增加一列:
alter table test_11 add column test_column INT NOT NULL DEFAULT 0;
單擊主庫插入數據,自動執行如下命令,在主庫的test_11表中添加一行數據:
insert into test_11(id,t,test_column) values (1111,now(),2);
單擊從庫查看test_11表情況,在從庫中自動執行如下命令:
select * from test_11;
返回結果如下:
+------+------------+-------------+ | id | t | test_column | +------+------------+-------------+ | 1111 | 2024-01-08 | 2 | +------+------------+-------------+ 1 row in set (0.01 sec)
可以看到,主庫中創建表、新增列以及插入數據的動作(DML)已自動同步至從庫。
單擊分布式節點刪除test_11表結構,在主庫中自動執行如下命令:
drop table test_11;
單擊查看test_11表結構,在從庫中自動執行如下命令:
show create table test_11 ;
返回結果如下:
ERROR 1146 (42S02): Table 'cdc_db.test_11' doesn't exist
可以看到,主庫中刪除表的語句(DDL)也已自動同步至從庫。
結果分析
PolarDB-X支持自動分區
PolarDB-X支持自動分區,默認主鍵拆分。從而讓移植到PolarDB-X的數據和業務擺脫對設計分區鍵的依賴,實現從單機MySQL到分布式的平滑演進。
也支持指定分區鍵拆分,從而提高整體性能。
PolarDB-X支持數據回流及數據一致性
事務型的分布式數據庫除了面向在線業務的高并發寫入以外,一般還需要將在線數據同步給下游的災備數據、匯聚業務或數據倉庫系統等,下游業務對于事務日志的一致性也有比較強的訴求,例如事務不能亂序、事務原子性、DDL支持同步等。
從本體驗可以看到,PolarDB-X支持將數據實時同步給下游的MySQL,其數據具有一致性。