乐趣区

关于数据库:实践教程之体验-PolarDBX-分布式事务和数据分区

本期试验将领导您应用 PolarDB- X 分布式事务和数据分区

本期收费试验地址

本期教学视频地址

前置筹备

假如曾经依据前一讲内容实现了 PolarDB- X 的搭建部署,能够胜利链接上 PolarDB- X 数据库。

体验 PolarDB- X 分布式事务

本步骤将带您体验 PolarDB- X 分布式事务。首先开启一个分布式事务,通过命令察看事务信息。而后模仿一个转账行为,察看原子性和隔离性保障,最初通过 Flashback Query 查看历史版本。

1. 筹备测试库、测试表和测试数据。

a. 执行如下 SQL 语句,创立测试库 transfer_test 并应用。

CREATE DATABASE transfer_test MODE='AUTO';
 USE transfer_test;

b. 执行如下 SQL 语句,创立测试表 account。

CREATE TABLE account (
   pk bigint not null auto_increment,
   id varchar(64) not null,
   balance double not null,
   gmt_create timestamp default current_timestamp,
   gmt_modified timestamp default current_timestamp on update current_timestamp,
   PRIMARY KEY(pk),
   key(id)
);

c. 执行如下 SQL 语句,创立测试表 user。

CREATE TABLE user (
   pk bigint not null auto_increment,
   name varchar(64) not null,
   addr varchar(128) not null,
   gmt_create timestamp default current_timestamp,
   gmt_modified timestamp default current_timestamp on update current_timestamp,
   PRIMARY KEY(pk),
   key(name)
);

d. 执行如下 SQL 语句,初始化数据。

INSERT INTO account(id, balance) VALUES("Alice", 100), ("Bob", 100);
INSERT INTO user(name, addr) VALUES("Alice", "hz"), ("Bob", "sh");

e. 执行如下 SQL 语句,查看初始化后果。

SHOW FULL CREATE TABLE account;
SHOW FULL CREATE TABLE user;
SELECT * FROM account;
SELECT * FROM user;

2. 转账测试。

a. 试验页面,单击右上角的 + 图标,创立新的终端三和终端四。

b. 在终端三和终端四中,别离执行如下命令,连贯 PolarDB- X 集群。

mysql -h127.0.0.1 -P3306 -upolardbx_root transfer_test

c. 依照如下表格中的步骤程序,在终端三和终端四中别离执行如下 SQL 语句,进行转账测试。

3.Flashback Query。

a. 试验页面,单击右上角的 + 图标,创立新的终端五。

b. 执行如下命令,连贯 PolarDB- X 集群。

mysql -h127.0.0.1 -P3306 -upolardbx_root transfer_test

c. 执行如下 SQL 语句,记录以后工夫点为 ts0。

SELECT NOW();

d. 执行如下 SQL 语句,更新数据。

BEGIN;
UPDATE account SET balance = balance - 30 WHERE id = "Alice";
UPDATE account SET balance = balance + 30 WHERE id = "Bob";
COMMIT;
INSERT INTO account(id, balance) VALUES("Tom", 100);
INSERT INTO user(name, addr) VALUES("Tom", "bj");

e. 执行如下 SQL 语句,查看更新后的数据。

SELECT a.id, a.balance, b.addr FROM account a 
JOIN user b ON a.id = b.name;

f. 执行如下 SQL 语句,指定工夫为 ts0,查问历史版本数据。

阐明:

  • 您须要将 {ts0} 替换为理论记录的工夫点 ts0。
  1. 示例:SELECT * FROM user AS OF TIMESTAMP “2022-05-12 10:14:14”;
SELECT * FROM user AS OF TIMESTAMP "{ts0}";
SELECT * FROM account AS OF TIMESTAMP "{ts0}";

g. 执行如下 SQL 语句,在 Join 中为局部表指定工夫戳。

阐明:您须要将 {ts0} 替换为理论记录的工夫点 ts0。

SELECT a.id, a.balance, b.addr FROM account a JOIN user AS OF TIMESTAMP "{ts0}" b ON a.id = b.name;

h. 执行如下 SQL 语句,查看并记录以后工夫点为 ts1。

SELECT NOW();

i. 执行如下 SQL 语句,模仿误删操作。

DELETE FROM account WHERE 1=1;;

j. 执行如下 SQL 语句,查看删除后果。

SELECT * FROM account;

k. 执行如下 SQL 语句,通过 Flashback Query 复原误删的数据。

阐明:您须要将 {ts1} 替换为理论记录的工夫点 ts1。

INSERT INTO account SELECT * FROM account AS OF TIMESTAMP "{ts1}";

l. 执行如下 SQL 语句,查看复原后果。

SELECT * FROM account;

体验 PolarDB- X 数据分区

本步骤将带您体验 PolarDB- X 数据分区对查问性能的影响。首先用默认拆分形式创立一张表,而后通过减少全局索引和扭转拆分形式来晋升查问性能。

1. 筹备测试库、测试表和测试数据。

a. 切换至终端二,执行如下 SQL 语句,创立测试库 partitioning_test 并应用。

CREATE DATABASE partitioning_test MODE='AUTO';  USE partitioning_test;

b. 执行如下 SQL 语句,创立测试表 ptest1。

CREATE TABLE ptest1 (
  id INTEGER UNSIGNED NOT NULL,
  k INTEGER UNSIGNED DEFAULT '0' NOT NULL,
  c CHAR(20) DEFAULT '' NOT NULL,
  pad CHAR(60) DEFAULT '' NOT NULL,
  PRIMARY KEY(id)
);

c. 执行如下 SQL 语句,插入数据。

INSERT INTO ptest1(id, k, c, pad) VALUES
(1, 1, "c", "pad"),(2, 2, "c", "pad"),(3, 3, "c", "pad"),
(4, 4, "c", "pad"),(5, 5, "c", "pad"),(6, 6, "c", "pad");

2. 通过全局索引优化查问性能。

a. 执行如下 SQL 语句,查看主键上点查的执行打算。

EXPLAIN SELECT pad FROM ptest1 WHERE id = 1;

b. 执行如下 SQL 语句,查看 k 字段上点查的执行打算。

EXPLAIN SELECT pad FROM ptest1 WHERE k = 1;

c. 执行如下 SQL 语句,在 k 字段上减少索引。

ALTER TABLE `partitioning_test`.`ptest1`  ADD INDEX `__advise_index_ptest1_k`(`k`);

d. 执行如下 SQL 语句,查看增加索引后的执行打算。

EXPLAIN SELECT pad FROM ptest1 WHERE k = 1;

e. 执行如下 SQL 语句,在 k 字段上减少聚簇索引。

ALTER TABLE ptest1 ADD CLUSTERED INDEX c_k(k);

f. 执行如下 SQL 语句,查看减少聚簇索引后的执行打算。

EXPLAIN SELECT pad FROM ptest1 WHERE k=1;

g. 执行如下 SQL 语句,查看 ptest1 表的表构造。

SHOW CREATE TABLE ptest1; 
SHOW FULL CREATE TABLE ptest1;

3. 通过变更分区键优化查问性能。

a. 执行如下 SQL 语句,删除之前创立的索引。

ALTER TABLE ptest1 DROP INDEX c_k;
ALTER TABLE ptest1 DROP INDEX __advise_index_ptest1_k;

b. 执行如下 SQL 语句,变更拆分键。

ALTER TABLE ptest1 PARTITION BY HASH(k); 
SHOW FULL CREATE TABLE ptest1;

c. 执行如下 SQL 语句,查看变更拆分键之后的执行打算。

EXPLAIN SELECT pad FROM ptest1 WHERE k=1;3

原文链接

本文为阿里云原创内容,未经容许不得转载。

退出移动版