PolarDB对比X-Engine与InnoDB空间效率
1. 创建资源
- 在页面左侧,单击 云产品资源 下拉列表,查看本次实验所需资源。
- 单击屏幕右侧 创建资源 ,免费创建当前实验所需云产品资源。
说明:
资源创建过程需要1~3分钟。完成实验资源的创建后,您可以在 云产品资源 列表查看已创建的资源信息,例如:IP地址、子用户名称和子用户密码等。
2. 连接PolarDB
- 双击打开远程桌面的Chromium网页浏览器。
- 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
- 复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库PolarDB控制台。
https://polardb.console.aliyun.com/
- 在集群列表页面顶部菜单栏中,切换资源所在地域。
说明:您可在云产品资源列表中查看实验室分配的PolarDB资源所在的地域。
- 在集群列表页面,找到您的PolarDB实例,单击实例ID。
说明:您可在云产品资源列表中查看实验室分配的PolarDB实例ID。
- 在左侧导航栏中,选择配置与管理>集群白名单。
- 在集群白名单页面的安全组区域,单击选择安全组。
- 在选择安全组面板,选中列表中的安全组,单击确定。
- 在左侧导航栏中,选中配置与管理>账号管理。
- 在账号管理页面,单击创建账号。
- 在创建账号面板,参考说明配置账号信息,然后单击确定。
参数说明:
- 数据库账号:输入数据库账号名称,例如:test_user。
- 账号类型:此处选择高权限账号。
- 密码:设置账号密码,例如:Password123。
- 确认密码:再次输入密码。
说明:注意保存这里的账号名和密码,后续会通过这个账号来连接PolarDB。账号创建需要几分钟,需要稍微等待一下,如果时间比较久,可以点左上角,刷新当前页面。
- 在实验室右侧功能栏中,单击图标,切换至Web Terminal,自动连接到云服务器ECS。
- 在Web Terminal中,安装MySQL客户端。
yum install mysql -y
- 执行以下命令来连接PolarDB。
说明:请替换命令中的PolarDB集群地址、端口、用户名。端⼝号默认3306,集群地址在左侧云产品资源列表中可以看到,用户名和密码是刚刚创建的数据库用户名以及密码。
mysql -h PolarDB集群地址 -P 端口 -u 用户名 -p密码
- 连接成功后,输入exit并回车,退出。
3. 安装测试⼯工具 SysBench
- 在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
- 执行如下命令,配置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空间效率
- 在Web Terminal中,执行如下命令,连接PolarDB,并创建数据库为sysbench测试做准备。
说明:请替换命令中的、PolarDB集群地址、端口、用户名、密码。端⼝号默认3306,集群地址在左侧云产品资源中可以看到,用户名和密码是刚刚创建的数据库用户名以及密码。
mysql -h PolarDB集群地址 -P 端口号 -u 用户名 -p密码 -e 'create database test'
- 修改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
- 通过云控制台查看数据引擎为X-Engine时空间使用情况。
在实验室页面右侧,单击图标,切换至远程桌面。在左侧导航栏中。选中性能与优化>性能监控,查看空间使用情况。
- 接着修改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参数来逐渐增加表的数量,在这个过程中去查看空间使用情况从而对比两种引擎的空间效率。
- 通过云控制台查看数据引擎为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