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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之在执行ALTER TABLE语句后,备份数据的物理空间占用增加,是什么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
2月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之如何释放Blktag并解决空间不足的问题
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之如何用InnoDB引擎创建Federated表
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
33 1
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之 MySQL数据库中,执行delete命令删除数据后,存储空间通常不会立即释放,该如何优化
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
SQL 关系型数据库 Serverless
PolarDB产品使用合集之集群配置主从1~16pcu,比如innodb_buffer_pool_size,另外线上innodb_buffer_pool_size配置里面是在变动的,该怎么配置
PolarDB是阿里云推出的一种云原生数据库服务,专为云设计,提供兼容MySQL、PostgreSQL的高性能、低成本、弹性可扩展的数据库解决方案,可以有效地管理和优化PolarDB实例,确保数据库服务的稳定、高效运行。以下是使用PolarDB产品的一些建议和最佳实践合集。
126 7
|
3月前
|
运维 关系型数据库 MySQL
PolarDB产品使用问题之迁移到从polardb mysql的数据空间里是否需要修改数据源地址
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
存储 运维 关系型数据库
PolarDB产品使用问题之如何使用innodb和x-engine混合引擎
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
存储 关系型数据库 分布式数据库
PolarDB中的pdb冷归档存储和X-Engine的价格对比
【2月更文挑战第22天】PolarDB中的pdb冷归档存储和X-Engine的价格对比
54 1
|
4月前
|
关系型数据库 大数据 分布式数据库
PolarDB 开源版 使用PostGIS 数据寻龙点穴(空间聚集分析)- 大数据与GIS分析解决线下店铺选址问题
背景PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的价值产出, 将数据变成生产力.本文将介绍PolarDB 开源版 使用PostGIS 数据寻龙点穴(空间聚集分析)-...
159 0
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)