PolarDB对比X-Engine与InnoDB空间效率

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 本实验带您体验创建X-Engine和InnoDB两种不同的表存储引擎,通过Sysbench模拟数据注入的过程对比俩种表引擎的空间效率。

PolarDB对比X-Engine与InnoDB空间效率


1. 创建资源

  1. 在页面左侧,单击 云产品资源 下拉列表,查看本次实验所需资源。
  2. 单击屏幕右侧 创建资源 ,免费创建当前实验所需云产品资源。

说明

资源创建过程需要1~3分钟。完成实验资源的创建后,您可以在 云产品资源 列表查看已创建的资源信息,例如:IP地址、子用户名称和子用户密码等。

2. 连接PolarDB

  1. 双击打开远程桌面的Chromium网页浏览器
  2. 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码用户密码输入框,单击登录
  3. 复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库PolarDB控制台。
https://polardb.console.aliyun.com/
  1. 集群列表页面顶部菜单栏中,切换资源所在地域。

说明:您可在云产品资源列表中查看实验室分配的PolarDB资源所在的地域。

  1. 集群列表页面,找到您的PolarDB实例,单击实例ID

说明:您可在云产品资源列表中查看实验室分配的PolarDB实例ID。

  1. 在左侧导航栏中,选择配置与管理>集群白名单

  1. 集群白名单页面的安全组区域,单击选择安全组

  1. 选择安全组面板,选中列表中的安全组,单击确定

  1. 在左侧导航栏中,选中配置与管理>账号管理

  1. 账号管理页面,单击创建账号

  1. 在创建账号面板,参考说明配置账号信息,然后单击确定

参数说明:

  • 数据库账号:输入数据库账号名称,例如:test_user
  • 账号类型:此处选择高权限账号
  • 密码:设置账号密码,例如:Password123
  • 确认密码:再次输入密码。

说明:注意保存这里的账号名和密码,后续会通过这个账号来连接PolarDB。账号创建需要几分钟,需要稍微等待一下,如果时间比较久,可以点左上角,刷新当前页面。

  1. 在实验室右侧功能栏中,单击图标,切换至Web Terminal,自动连接到云服务器ECS。

  1. 在Web Terminal中,安装MySQL客户端。
yum install mysql -y
  1. 执行以下命令来连接PolarDB。

说明:请替换命令中的PolarDB集群地址、端口、用户名。端⼝号默认3306,集群地址在左侧云产品资源列表中可以看到,用户名和密码是刚刚创建的数据库用户名以及密码。

mysql -h PolarDB集群地址 -P 端口 -u 用户名 -p密码

  1. 连接成功后,输入exit并回车,退出。

3. 安装测试⼯工具 SysBench

  1. 在Web Terminal中,执⾏如下命令,安装SysBench。
yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql unzip -y
wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/Universities/sysbench.zip
## 下载sysbench
unzip sysbench.zip
## 解压缩
cd sysbench
##打开sysbench⽬目录
git checkout 1.0.18
##切换到sysbench 1.0.18版本
./autogen.sh
##运⾏autogen.sh
./configure --prefix=/usr --mandir=/usr/share/man
make
##编译
make install
  1. 执行如下命令,配置SysBench client,使内核可以利用所有的CPU核数处理理数据(默认设置为2核),同时减少CPU核数之间的上下⽂文切换。

说明:f表示使⽤4个核,在本实验中,ECS为4核,所以输入f。假如ECS为8核,则输⼊ff

sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo f>$x/rps_cpus; done'
sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries"
sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"

4. 对比X-Engine与InnoDB空间效率

  1. 在Web Terminal中,执行如下命令,连接PolarDB,并创建数据库为sysbench测试做准备。

说明:请替换命令中的、PolarDB集群地址、端口、用户名、密码。端⼝号默认3306,集群地址在左侧云产品资源中可以看到,用户名和密码是刚刚创建的数据库用户名以及密码。

mysql -h PolarDB集群地址 -P 端口号 -u 用户名 -p密码 -e 'create database test'

  1. 修改sysbech默认表结构,修改数据引擎为X-Engine,并测试。

2.1 oltp_common.lua中可以看到sysbench的自带的压测场景,我们需要编辑这个文件,修改sysbench默认表结构。

#通过vim打开oltp_common.lua文件
vim ~/sysbench/src/lua/oltp_common.lua

2.2 编辑oltp_common.lua文件。

#找到第188行
#原始表
CREATE TABLE sbtest%d(
  id %s,
  k INTEGER DEFAULT '0' NOT NULL,
  c VARCHAR(500) DEFAULT '' NOT NULL,
  pad CHAR(60) DEFAULT '' NOT NULL,
  %s (id)
) %s %s]]
#按“i”进入“插入模式”,在表结构末尾添加 “ENGINE=XENGINE ”,然后按“ESC”退出插入模式
#修改后的表结构如下
#X-engine
CREATE TABLE sbtest%d(
  id %s,
  k INTEGER DEFAULT '0' NOT NULL,
  c VARCHAR(500) DEFAULT '' NOT NULL,
  pad CHAR(60) DEFAULT '' NOT NULL,
  %s (id)
)ENGINE=XENGINE %s %s]]
#然后输入“:wq"保存并退出

2.3 接下来依次执行注入数据、测试、清除数据步骤。在这个过程中sysbench会往数据库中写入数据,并且在清除数据之后会把数据库恢复到原来的状态,方便与后续InnoDB引擎进行对比

注意:替换 mysql-host、mysql-user、mysql-password参数后的值。

cd ~
#注入数据
sysbench sysbench/src/lua/oltp_write_only.lua --mysql-host=*** --mysql-port=3306 --mysql-user=*** --mysql-password=*** --mysql-db=test --db-driver=mysql --tables=10 --table-size=100000 --report-interval=10 --threads=100 --time=120 prepare
#测试
sysbench sysbench/src/lua/oltp_write_only.lua --mysql-host=*** --mysql-port=3306 --mysql-user=*** --mysql-password=*** --mysql-db=test --db-driver=mysql --tables=10 --table-size=100000 --report-interval=10 --threads=100 --time=120 run
#清除数据
sysbench sysbench/src/lua/oltp_write_only.lua --mysql-host=*** --mysql-port=3306 --mysql-user=*** --mysql-password=*** --mysql-db=test --db-driver=mysql --tables=10 --table-size=100000 --report-interval=10 --threads=100 --time=120 cleanup
  1. 通过云控制台查看数据引擎为X-Engine时空间使用情况。

在实验室页面右侧,单击图标,切换至远程桌面。在左侧导航栏中。选中性能与优化>性能监控,查看空间使用情况。

  1. 接着修改sysbench默认表结构,修改数据引擎为InnoDB,并测试。

4.1 打开oltp_common.lua文件,修改sysbench默认表结构。

#通过vim打开oltp_common.lua文件
vim ~/sysbench/src/lua/oltp_common.lua

4.2 编辑oltp_common.lua文件。

#找到第188行
#按“i”进入“插入模式”,在表结构末尾将“ENGINE=XENGINE ”改为“ENGINE=InnoDB ”,然后按“ESC”退出插入模式
#修改后的表
#InnoDB
CREATE TABLE sbtest%d(
  id %s,
  k INTEGER DEFAULT '0' NOT NULL,
  c VARCHAR(500) DEFAULT '' NOT NULL,
  pad CHAR(60) DEFAULT '' NOT NULL,
  %s (id)
)ENGINE=InnoDB %s %s]]
#然后输入“:wq”保存并退出
#注入数据
sysbench sysbench/src/lua/oltp_write_only.lua --mysql-host=*** --mysql-port=3306 --mysql-user=*** --mysql-password=*** --mysql-db=test --db-driver=mysql --tables=10 --table-size=100000 --report-interval=10 --threads=100 --time=120 prepare
#测试
sysbench sysbench/src/lua/oltp_write_only.lua --mysql-host=*** --mysql-port=3306 --mysql-user=*** --mysql-password=*** --mysql-db=test --db-driver=mysql --tables=10 --table-size=100000 --report-interval=10 --threads=100 --time=120 run
#清除数据
sysbench sysbench/src/lua/oltp_write_only.lua --mysql-host=*** --mysql-port=3306 --mysql-user=*** --mysql-password=*** --mysql-db=test --db-driver=mysql --tables=10 --table-size=100000 --report-interval=10 --threads=100 --time=120 cleanup

说明:需要切换oltp_common.lua脚本来创建不同的表引擎,通过修改--tables参数来逐渐增加表的数量,在这个过程中去查看空间使用情况从而对比两种引擎的空间效率。

  1. 通过云控制台查看数据引擎为InnoDB时空间使用情况。

在实验室页面右侧,单击图标,切换至远程桌面。在左侧导航栏中。选中性能与优化>性能监控,查看空间使用情况。

5. SysBench的基础使用

测试命令及参数

使用Sysbench进行压测,通常分为三个步骤:

  • prepare:准备数据;
  • run:运行测试模型;
  • cleanup:清理测试数据。

通常仅需准备一次数据,在此数据基础上测试各种模型即可。

常用参数

Sysbench中常用的参数如下:

  • -oltp-tables-count=1:表数量。
  • -oltp-table-size=100000:每个表产生的记录行数。
  • -oltp-read-only=off:是否生成只读SQL,默认off,如果设置为on,则oltp模型不会生成update, delete,insert的SQL语句。
  • -oltp-skip-trx=[on|off]:省略BEGIN/COMMIT语句。默认是off。
  • -rand-init=on:是否随机初始化数据,如果不随机化那么初始好的数据每行内容除了主键不同外其他完全相同。
  • -num-threads=12: 并发线程数,可以理解为模拟的客户端并发连接数。
  • -report-interval=10:表示每10s输出一次性能数据。
  • -max-requests=0:压力测试产生请求的总数,如果以下面的max-time来记,这个值设为0即可。
  • -max-time=120:测试的持续时间。
  • -oltp_auto_inc=off:ID是否为自增列。
  • -oltp_secondary=on:将ID设置为非主键防止主键冲突。
  • -oltp_range_size=5: 连续取值5个,必定走到5个分片。
  • -mysql_table_options='dbpartition by hash(id) tbpartition by hash(id) tbpartitions 2':PolarDB-X 1.0支持拆分表,在建表的时候需要指定拆分方式。

示例命令

您可以使用如下命令进行对应操作:

准备数据:

sysbench sysbench/src/lua/oltp_write_only.lua --oltp_tables_count=1 --report-interval=10 --oltp-table-size=100000  --mysql-user=*** --mysql-password=*** --mysql-table-engine=innodb  --rand-init=on  --mysql-host=**** --mysql-port=*** --mysql-db=*** --max-time=300 --max-requests=0   --oltp_skip_trx=on --oltp_auto_inc=off  --oltp_secondary=on --oltp_range_size=5  --num-threads=200   prepare

执行测试:

sysbench sysbench/src/lua/oltp_write_only.lua --oltp_tables_count=1 --report-interval=10 --oltp-table-size=100000  --mysql-user=*** --mysql-password=*** --mysql-table-engine=innodb  --rand-init=on  --mysql-host=**** --mysql-port=*** --mysql-db=*** --max-time=300 --max-requests=0   --oltp_skip_trx=on --oltp_auto_inc=off --oltp_secondary --oltp_range_size=5 --num-threads=200 run

清理环境:

sysbench sysbench/src/lua/oltp_write_only.lua --oltp_tables_count=1 --report-interval=10 --oltp-table-size=100000  --mysql-user=*** --mysql-password=*** --mysql-table-engine=innodb  --rand-init=on  --mysql-host=**** --mysql-port=*** --mysql-db=*** --max-time=300 --max-requests=0   --oltp_skip_trx=on --oltp_auto_inc=off --oltp_secondary --oltp_range_size=5 --num-threads=200 cleanup

实验地址:https://developer.aliyun.com/adc/scenario/caf1b44f3a7a44d88f8e76d25ee5ba66

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
存储 关系型数据库 分布式数据库
PolarDB中的pdb冷归档存储和X-Engine的价格对比
【2月更文挑战第22天】PolarDB中的pdb冷归档存储和X-Engine的价格对比
15 1
|
7月前
|
存储 关系型数据库 数据库
数据库内核那些事|PolarDB X-Engine:如何构建1/10成本的事务存储引擎?
X-Engine引擎是PolarDB为用户提供的低成本,高性价比的解决方案,LSM-tree分层存储结合标准zstd压缩,在性能和成本做到了很好的平衡。在标准sysbench场景下,存储空间相比InnoDB引擎减少60%,读写性能降低10-20%。
数据库内核那些事|PolarDB X-Engine:如何构建1/10成本的事务存储引擎?
|
8月前
|
安全 关系型数据库 数据库
创建 PostgreSQL 表空间时没有指定空间的总大小
创建 PostgreSQL 表空间时没有指定空间的总大小
96 1
|
11月前
|
关系型数据库 定位技术 数据库
PostgreSQL技术大讲堂 - 第17讲:Vacuum空间管理工具
PostgreSQL从小白到专家,技术大讲堂 - 第17讲:Vacuum空间管理工具
149 0
|
并行计算 算法 Cloud Native
PolarDB 开源版 使用PostGIS 数据寻龙点穴(空间聚集分析)- 大数据与GIS分析解决线下店铺选址问题
寻龙点穴是风水学术语。古人说:三年寻龙,十年点穴。意思就是说,学会寻龙脉要很长的时间,但要懂得点穴,并且点得准则难上加难,甚至须要用“十年”时间。 但是,若没正确方法,就是用百年时间,也不能够点中风水穴心聚气的真点,这样一来,寻龙的功夫也白费了。 准确地点正穴心,并不是一件容易的事,对初学者来说如此,就是久年经验老手,也常常点错点偏。 寻龙点穴旨在寻找龙气聚集之地,而现实中,我们也有类似需求,比如找的可能是人气聚集之地。 PolarDB 开源版 使用PostGIS 数据寻龙点穴(空间聚集分析)- 大数据与GIS分析解决线下店铺选址问题
478 0
PolarDB 开源版 使用PostGIS 数据寻龙点穴(空间聚集分析)- 大数据与GIS分析解决线下店铺选址问题
|
存储 缓存 关系型数据库
J. Cole 的 InnoDB 系列 - 3. InnoDB空间文件布局的基础
J. Cole 的 InnoDB 系列 - 3. InnoDB空间文件布局的基础
J. Cole 的 InnoDB 系列 - 3. InnoDB空间文件布局的基础
|
关系型数据库 MySQL 数据库
MySQL Innodb表共享空间损坏无法启动
启动mysql后随即就又关闭了,mysql服务启动失败!!
MySQL Innodb表共享空间损坏无法启动
|
算法 关系型数据库 定位技术
【重新发现PostgreSQL之美】- 25 最强大脑题目 泰森多边形(空间战略布局问题)
大家好,这里是重新发现PostgreSQL之美 - 25 最强大脑题目 泰森多边形(空间战略布局问题)
|
SQL 存储 NoSQL
AnalyticDB for PostgreSQL 空间数据分析实战
数字经济时代,数据是其关键的生产资料,而空间信息作为一重要属性集和模型特征集在业界形成广泛共识。政府层面,美国911之后,通信运营商为政府相关部门(如公安、交通、应急指挥等)提供手机定位信息受法律保护;社会部分行业,尤其涉及GIS、交通、物流、吃住行游、自动驾驶等,无不与空间信息强相关。由此,空间数据的存储、空间查询与分析等特性成为数据库的标配。本文主要介绍如何利用AnalyticDB for PostgreSQL对空间数据进行管理和分析应用。
581 0
AnalyticDB for PostgreSQL 空间数据分析实战
|
存储 SQL 缓存
数据库存储引擎创新:PolarDB X-Engine历史库产品
作为世界上使用最广泛的开源数据库系统,MySQL生态中一直缺乏一个好用的历史数据归档存储方案,既满足大容量低成本同时又具备一定的读写能力。虽然业界曾经推出过一些高压缩引擎如TokuDB,MyRocks等,但是受限于单物理机磁盘容量限制,存储的数据量有限。PolarDB历史库的推出即为满足这一需求。
1590 0
数据库存储引擎创新:PolarDB X-Engine历史库产品

热门文章

最新文章