关系型数据库 性能白皮书 文档版本 01 发布日期 2018-08-15 华为技术有限公司
版权所有 华为技术有限公司 2018 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 商标声明 和其他华为商标均为华为技术有限公司的商标 本文档提及的其他所有商标或注册商标, 由各自的所有人拥有 注意 您购买的产品 服务或特性等应受华为公司商业合同和条款的约束, 本文档中描述的全部或部分产品 服务或特性可能不在您的购买或使用范围之内 除非合同另有约定, 华为公司对本文档内容不做任何明示或默示的声明或保证 由于产品版本升级或其他原因, 本文档内容会不定期进行更新 除非另有约定, 本文档仅作为使用指导, 本文档中的所有陈述 信息和建议不构成任何明示或暗示的担保 华为技术有限公司 地址 : 深圳市龙岗区坂田华为总部办公楼邮编 :518129 网址 : http://e.huawei.com 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 i
目录 目录 1 MySQL...1 1.1 测试方法... 1 1.2 MySQL 5.6 测试数据... 3 1.3 MySQL 5.7 测试数据... 7 2 SQL Server... 12 2.1 测试方法... 12 2.2 测试结果... 21 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 ii
1 MySQL 1 MySQL MySQL 是全球最受欢迎的开源数据库之一, 性能卓越, 搭配 LAMP, 成为 WEB 开发的高效解决方案 主要解决用户高并发场景下, 数据库性能差 数据复制延迟突出 数据库故障恢复时间长等问题 当前,MySQL 主要提供了即开即用 备份恢复 数据迁移 安全防护 轻松扩容和高可用六大功能 您可通过几步简单的配置, 在几分钟内获得更高性能 更具扩展性的生产数据库, 同时保证数据库环境的数据完整性和业务持续可用性 1.1 测试方法 测试环境 区域 : 华北 - 北京一 可用分区 : 可用区 1 弹性云服务器 (Elastic Cloud Server, 简称 ECS): 规格选择通用计算型 c3.2xlarge. 2,8U16GB, 操作系统镜像使用 CentOS7.4 64 位版本, 详见图 1-1 由于压测工具需要安装额外的编译工具, 建议 ECS 绑定弹性 IP 图 1-1 ECS 配置 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 1
1 MySQL 测试工具 Sysbench 是一款基于 LuaJIT 的, 模块化多线程基准测试工具, 常用于数据库基准测试 通过内置的数据库测试模型, 采用多线程并发操作来评估数据库的性能 了解 Sysbench 更多详情, 请访问 https://github.com/akopytov/sysbench 本次测试使用的 Sysbench 版本为 1.0.12, 具体的安装命令如下 : # yum install autoconf libtool mysql mysql-devel vim unzip # unzip sysbench-1.0.12.zip # cd sysbench-1.0.12 #./autogen.sh #./configure # make # make install 测试步骤 请根据实际信息, 替换数据库 连接 IP 与用户密码 步骤 1 步骤 2 导入数据 1. 使用 mysql 命令登录数据库, 并创建测试数据库 loadtest mysql -u root -P 3306 -h <host> -p -e "create database loadtest" 2. 使用 sysbench 命令导入测试背景数据到 loadtest 数据库 sysbench --test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --dbdriver=mysql --mysql-db=loadtest --mysql-user=root --mysqlpassword=<password> --mysql-port=3306 --mysql-host=<host> --oltp-tablescount=64 --oltp-table-size=10000000 --num-threads=20 prepare 压测数据 sysbench --test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --dbdriver=mysql --mysql-db=loadtest --mysql-user=root --mysql-password=<password> -- mysql-port=3306 --mysql-host=<host> --oltp-tables-count=64 --oltp-table-size=10000000 --max-time=3600 --max-requests=0 --num-threads=200 --report-interval=3 --forcedshutdown=1 run 步骤 3 清理数据 sysbench --test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --dbdriver=mysql --mysql-db=loadtest --mysql-user=root --mysql-password=<password> -- mysql-port=3306 --mysql-host=<host> --oltp-tables-count=64 --oltp-table-size=10000000 --max-time=3600 --max-requests=0 --num-threads=200 cleanup ---- 结束 测试模型 1. 表结构 CREATE TABLE `sbtest` ( `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 2
1 MySQL `k` INTEGER UNSIGNED DEFAULT '0' NOT NULL, `c` CHAR(120) DEFAULT '' NOT NULL, `pad` CHAR(60) DEFAULT '' NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB 2. 读写比 Sysbench 默认提交的事务中包含 18 条 SQL 语句, 具体执行语句和条数如下 : 主键 SELECT 语句,10 条 : SELECT c FROM ${rand_table_name} where id=${rand_id}; 范围 SELECT 语句,4 条 : SELECT c FROM ${rand_table_name} WHERE id BETWEEN $ {rand_id_start} AND ${rand_id_end}; SELECT SUM(K) FROM ${rand_table_name} WHERE id BETWEEN $ {rand_id_start} AND ${rand_id_end}; SELECT c FROM ${rand_table_name} WHERE id BETWEEN $ {rand_id_start} AND ${rand_id_end} ORDER BY c; SELECT DISTINCT c FROM ${rand_table_name} WHERE id BETWEEN $ {rand_id_start} AND ${rand_id_end} ORDER BY c; UPDATE 语句,2 条 : UPDATE ${rand_table_name} SET k=k+1 WHERE id=${rand_id} UPDATE ${rand_table_name} SET c=${rand_str} WHERE id=${rand_id} DELETE 语句,1 条 : DELETE FROM ${rand_table_name} WHERE id=${rand_id} INSERT 语句,1 条 : INSERT INTO ${rand_table_name} (id, k, c, pad) VALUES (${rand_id},$ {rand_k},${rand_str_c},${rand_str_pad}) 测试指标 TPS:Transaction Per Second, 数据库每秒执行的事务数, 每个事务中包含 18 条 SQL 语句 QPS:Query Per Second, 数据库每秒执行的 SQL 数, 包含 insert select update delete 等 1.2 MySQL 5.6 测试数据 测试列表 表 1-1 标准型 规格编号 CPU(Cor e) 内存 (GB) 连接数 IOPS TPS QPS c3.medium.4 1 4 1500 1400 494 9880 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 3
1 MySQL 规格编号 CPU(Cor e) 内存 (GB) 连接数 IOPS TPS QPS c3.large.4 2 8 2500 4000 558 11178 c3.xlarge.4 4 16 5000 8000 1257 25155 c3.2xlarge.4 8 32 10000 12000 2580 51604 c3.4xlarge.4 16 64 18000 16000 3245 64912 c3.8xlarge.4 32 128 30000 20000 5687 113748 表 1-2 计算型 规格编号 CPU(Cor e) 内存 (GB) 连接数 IOPS TPS QPS c3.medium.2 1 2 800 1200 295 5905 c3.large.2 2 4 1500 2000 452 9049 c3.xlarge.2 4 8 2500 6000 793 15876 c3.2xlarge.2 8 16 5000 10000 1899 37994 c3.4xlarge.2 16 32 10000 14000 3134 62685 c3.8xlarge.2 32 64 18000 18000 3696 73936 表 1-3 内存型 规格编号 CPU(Cor e) 内存 (GB) 连接数 IOPS TPS QPS m3.medium.8 1 8 2500 1600 534 10692 m3.large.8 2 16 5000 5000 585 11719 m3.xlarge.8 4 32 10000 7000 1228 24579 m3.2xlarge.8 8 64 18000 11000 2584 51688 m3.4xlarge.8 16 128 30000 20000 4364 87299 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 4
1 MySQL 测试结果 图 1-2 标准型 图 1-3 计算型 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 5
1 MySQL 图 1-4 内存型 图 1-5 高并发性能 (16U32G) 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 6
1 MySQL 图 1-6 高并发性能 (16U64G) 图 1-7 高并发性能 (16U128G) 1.3 MySQL 5.7 测试数据 测试列表 表 1-4 标准型 规格编号 CPU(Co re) 内存 (GB) 连接数 IOPS TPS QPS c3.medium.4 1 4 1500 1400 431 8620 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 7
1 MySQL 规格编号 CPU(Co re) 内存 (GB) 连接数 IOPS TPS QPS c3.large.4 2 8 2500 4000 644 12891 c3.xlarge.4 4 16 5000 8000 1366 27325 c3.2xlarge.4 8 32 10000 12000 2042 40840 c3.4xlarge.4 16 64 18000 16000 3616 72337 c3.8xlarge.4 32 128 30000 20000 6408 128173 表 1-5 计算型 规格编号 CPU(Cor e) 内存 (GB) 连接数 IOPS TPS QPS c3.medium.2 1 2 800 1200 321 6439 c3.large.2 2 4 1500 2000 444 8893 c3.xlarge.2 4 8 2500 6000 721 14422 c3.2xlarge.2 8 16 5000 10000 1708 34166 c3.4xlarge.2 16 32 10000 14000 2221 44436 c3.8xlarge.2 32 64 18000 18000 4163 83262 表 1-6 内存型 规格编号 CPU(Co re) 内存 (GB) 连接数 IOPS TPS QPS m3.medium.8 1 8 2500 1600 637 12751 m3.large.8 2 16 5000 5000 728 14561 m3.xlarge.8 4 32 10000 7000 1542 30847 m3.2xlarge.8 8 64 18000 11000 2916 58320 m3.4xlarge.8 16 128 30000 20000 5303 106066 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 8
1 MySQL 测试结果 图 1-8 标准型 图 1-9 计算型 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 9
1 MySQL 图 1-10 内存型 图 1-11 高并发性能 (16U32G) 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 10
1 MySQL 图 1-12 高并发性能 (16U64G) 图 1-13 高并发性能 (16U128G) 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 11
2 SQL Server 2 SQL Server 华为云数据库 SQL Server 是基于华为云平台的, 完全兼容微软 SQL Server 的在线关系型数据库服务 相对于开源社区版数据库, 提供更高安全性 稳定性和优秀的性能, 默认提供主备架构, 并配备完善的备份 恢复 监控和迁移等方案 支持包年 / 包月和按需两种付费方式, 由于费用已经包含微软正版授权, 您无需额外关心 License 等合规问题 2.1 测试方法 测试环境 区域 : 华北 - 北京一 可用分区 : 可用区 1 ECS 实例 : 规格为高性能计算型 HC2,8 核 16GB, 存储类型为 SSD, 存储空间为 200GB, 操作系统镜像使用 Windows Server 2012 R2 Standard 64bit, 网络类型为 VPC 测试工具 HammerDB 是一款开源的图形化据库负载测试和基准测试工具, 可以测试任意操作系统上运行的多种数据库系统, 目前有 Windows 和 Linux 版本 HammerDB 支持自动化 多线程和可扩展的动态脚本 您可以使用 HammerDB 创建一个测试 schema, 加载数据, 并针对 OLTP(online transaction processing, 联机事务处理 ) 和 OLAP(online analytical processing, 在线分析处理 ) 场景模拟多个虚拟用户对数据库的工作负载 本文使用的 HammerDB 版本为 2.19,HammerDB 最新下载 安装后的界面如下 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 12
2 SQL Server 测试基准 TPC(Transaction Processing Performance Council) 是一家非营利性公司, 旨在确定交易处理和数据库基准, 并向业界传播客观 可验证的 TPC 性能数据 TPC 包含多种测试基准, 常见的有 TPC-A TPC-C 和 TPC-H 等, 详细请参见官方文档 TPC-C 是一种在 OLTP 基准 由于 TPC-C 具有多种事务类型, 更复杂的数据库和总体执行结构,TPC-C 与 TPC-A 不同且更为复杂 本次采用 TPC-C 测试基准 测试步骤 步骤 1 打开 HammerDB, 如图 2-1 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 13
2 SQL Server 图 2-1 打开 步骤 2 双击 SQL Server, 在弹出框中选择 MSSQL Server 和 TPC-C, 单击 OK, 如图 2-2 图 2-2 选择 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 14
2 SQL Server 步骤 3 设置连接信息, 创建对象数据库 tpcc 选择 SQL Server > TPC-C > Schema Build, 双击 Options, 如图 2-3 注意 弹出框中 Schema 需选择 Updated 图 2-3 Options 步骤 4 选择 SQL Server > TPC-C > Schema Build > Build, 在弹出框点击 是, 创建 schema, 如图 2-4 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 15
2 SQL Server 图 2-4 Build 等待初始化完成, 如图 2-5 图 2-5 初始化完成 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 16
2 SQL Server 步骤 5 单击停止执行, 如图 2-6 图 2-6 停止执行 步骤 6 选中 SQL Server > TPC-C > Driver Script, 双击 Options, 确保连接信息准确, 如图 2-7 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 17
2 SQL Server 图 2-7 检查连接信息 步骤 7 选中 SQL Server > TPC-C > Driver Script, 双击 Load, 如图 2-8 图 2-8 Load 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 18
2 SQL Server 步骤 8 选中 SQL Server > TPC-C > Virtual User, 双击 Options, 设置虚拟用户数, 可以通过不断调整用户数, 查看 TPM(Transaction Per Minute, 每秒处理事务数的缩写, 它是衡量数据库系统处理能力的重要指标 ) 值, 直到出现稳定最高 TPM 峰值 注意 建议不要勾选 Show Output 选项, 可能会导致客户端无响应 步骤 9 单击 是, 完成创建 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 19
2 SQL Server 步骤 10 选择 Virtual User, 双击 Run, 直到出现稳定 TPM 峰值, 如图 2-9 ---- 结束 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 20
2 SQL Server 图 2-9 稳定 TPM 峰值 2.2 测试结果 表 2-1 测试列表 CPU(Core) 内存 (GB) TPM 4 8 400000 4 16 450000 4 32 550000 8 32 630000 8 64 680000 16 128 1000000 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 21
2 SQL Server 图 2-10 TPM 示例图 文档版本 01 (2018-08-15) 版权所有 华为技术有限公司 22