1.实验目的
今天的实验就是体验oceanbase高级特性: 并发查询、并行导入、在线统计信息收集
并发查询特性:
OceanBase 数据库可以处理混合负载类型的场景。由于 OceanBase 数据库是基于对等节点的分布式架构,使得它既可以承载高并发和可扩展的 OLTP 任务,还可以在同一套数据引擎中基于 MPP 架构进行 OLAP 的并行计算,无需维护两套数据。
并发导入特性:
在 OceanBase 数据库中,您不但可以在大量在线业务数据上直接进行并行分析,还可以通过 PDML 能力(Parallel DML)将批量写入数据的大事务以并发的方式快速安全的执行。并且,这一切都是在严格保证事务一致性的前提下做到的。
在线统计信息收集特性:
在线统计信息收集指在执行 INSERT 插入时,数据库优化器就可以收集统计信息,不用手动调用系统包。在批量导入数据的过程中,可以实时收集统计信息,不需要额外的发起收集任务,减少了运维操作,提高统计信息收集性能。
2.实验环境准备
2.1创建租户
2.1.1创建资源规格
CREATE RESOURCE UNIT S1_unit_config
MEMORY_SIZE = '2G',
MAX_CPU = 1, MIN_CPU = 1,
LOG_DISK_SIZE = '2G',
MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;

2.1.2创建资源池
CREATE RESOURCE POOL mq_pool_01
UNIT='S1_unit_config',
UNIT_NUM=1,
ZONE_LIST=('zone1','zone2','zone3');

2.1.3创建租户
CREATE TENANT IF NOT EXISTS mq_t1
PRIMARY_ZONE='zone1',
RESOURCE_POOL_LIST=('mq_pool_01')
set OB_TCP_INVITED_NODES='%';

2.2测试数据准备
root@obproxy ~]# mysql -h90.90.90.107 -P2883 -uroot@mq_t1 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1697
Server version: 5.6.25 OceanBase_CE 4.1.0.0 (r100000202023040520- 0765e69043c31bf86e83b5d618db0530cf31b707) (Built Apr 5 2023 20:26:14)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database yangkai1;
Query OK, 1 row affected (0.22 sec)
CREATE TABLE `student` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`sex` char(20) DEFAULT NULL,
`birth` year(4) DEFAULT NULL,
`department` char(10) DEFAULT NULL,
`address` char(10) NOT NULL,
PRIMARY KEY (`id`)
) partition by hash(id) partitions 9;
CREATE TABLE `score` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`stu_id` int(10) NOT NULL,
`c_name` char(20) DEFAULT NULL,
`grade` int(10) DEFAULT NULL,
PRIMARY KEY (`id`))
DELIMITER //
CREATE PROCEDURE process_student()
BEGIN
DECLARE i INT;
SET i = 1;
WHILE i <= 1000000 DO
INSERT INTO `student`(`id`, `name`, `sex`, `birth`, `department`, `address`) VALUES(CONCAT(10000 + i), CONCAT('张先生', i), if(i % 2, '男', '女'), FLOOR(1980 + RAND() * 20), '计算机系', '北京市海淀区');
SET i = i + 1;
END WHILE;
END;
CALL process_student();

3.高级特性1:并发查询
--未开启并发查询

--开启并发查询,OceanBase 数据库的查询耗时缩短为一半左右。


4. 高级特性2:并行导入特性


可以看到,不开启并行的情况下,单个事务插入 103 万行数据,OceanBase 的耗时为 68 秒
下面我们通过添加一个 Hint,开启 PDML 的执行选项。注意再次插入前,我们先将上次插入的数据清空。
mysql> truncate student2;
Query OK, 0 rows affected (0.87 sec)
mysql> INSERT /*+ parallel(16) enable_parallel_dml */ INTO student2 SELECT * FROM student;
Query OK, 1039909 rows affected (32.63 sec)
Records: 1039909 Duplicates: 0 Warnings: 0
可以看到开启 PDML 后,相同的表插入 103 万行数据,OceanBase 数据库的耗时缩短为 32 秒左右。PDML 特性带来的性能提升大约为 4 倍。这一特性可以在用户在需要批量数据处理的场景提供帮助。
5.高级特性3:在线统计信息收集特性
OceanBase 数据库使用GATHER_OPTIMIZER_STATISTICS/NO_GATHER_OPTIMIZER_STATISTICS Hint 和系统变量 _optimizer_gather_stats_on_load(默认开启)进行在线统计信息收集,同时也可以使用旁路导入功能的 APPEND Hint 实现在线统计信息收集。
在线统计信息收集的主要触发场景如下:
CREATE TABLE...AS SELECT(即 CTAS)
在系统变量 _optimizer_gather_stats_on_load 为 True 时,CTAS 默认启动在线收集统计信息功能。如果需要禁用该功能,可以使用 NO_GATHER_OPTIMIZER_STATISTICS Hint,示例如下:
CREATE TABLE table_name AS SELECT /*+NO_GATHER_OPTIMIZER_STATISTICS*/* FROM...
INSERT INTO
在系统变量 _optimizer_gather_stats_on_load 为 True 时,使用 GATHER_OPTIMIZER_STATISTICS Hint 或者 APPEND Hint 启动在线收集统计信息功能。 示例如下:
INSERT /*+GATHER_OPTIMIZER_STATISTICS*/ INTO table_name SELECT * FROM table_name

--上述示例中生成了 OPTIMIZER STATS MERGE 的算子,说明执行了在线统计信息收集。

在线统计信息收集,能持续生成最优的执行计划。
我们都知道,当一张表格突然新增大量数据时,统计信息不能准确反映实际的数据,可能导致用户后续请求生成不优的执行计划。OceanBase 中通常的统计信息更新是会每天由后台任务在用户设定时间开启,一般是在夜间。在线统计信息收集功能,让表格在突然写入了大量数据的过程中自动维护统计信息,确保及时生成最优的执行计划。
OceanBase4.1版本中,当用户执行 CREATE TABLE AS SELECT、INSERT INTO SELECT、LOAD DATA 等语句时,在请求执行的过程中,利用原本数据迭代流程,采用增量更新的方式,对统计信息进行更新。在线统计信息收集功能,不仅能够更及时的维护统计信息,而且相比显式调用统计信息收集更轻量、更快速。
最后修改时间:2023-05-15 11:09:10
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




