PolarDB-X 1.0-性能白皮书-PolarDB-X Sysbench测试说明

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: Sysbench 说明Sysbench是一款开源的、模块化的、跨平台的多线程性能测试工具,可以执行数据库、CPU、内存、线程、IO等方面的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以下验证PolarDB-X在Sysbench OLTP和SELECT场景中的性能表现。

Sysbench 说明

Sysbench是一款开源的、模块化的、跨平台的多线程性能测试工具,可以执行数据库、CPU、内存、线程、IO等方面的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以下验证PolarDB-X在Sysbench OLTP和SELECT场景中的性能表现。

测试设计

  • 购买PolarDB-X、ECS、RDS。
  • PolarDB-X(4种规格):入门版8C32G、标准版16C64G、企业版32C128G、企业版64C256G。
  • ECS压力机(1台):32C64G、操作系统 Aliyun Linux 2.1903 64位、计算网络增强型。
  • RDS(12台):16C64G、MySQL 5.7、独享型。
  • 备注:DRDS、ECS、RDS都处于同一可用区,同一VPC。
  • 在PolarDB-X控制台创建水平拆分库,选择已经购买的12台RDS。
  • 在ECS安装Sysbench,并准备1.6亿数据。关于如何使用Sysbench,请参见Sysbench使用指南

测试参数说明


  1. --test='/usr/local/share/sysbench/oltp_drds.lua'  OLTP场景使用oltp_drds.lua, SELECT场景使用select.lua
  2. --mysql_table_options='dbpartition by hash(`id`) tbpartition by hash(id) tbpartitions 2'PolarDB-X分库分表语法,表示每个分库2张分表。
  3. --oltp-table-size=160000000  准备1.6亿数据。
  4. --oltp_auto_inc=off 关闭自增主键。
  5. --oltp_skip_trx=on 跳过事务。
  6. --oltp_secondary ID设置为非主键防止主键冲突。
  7. --oltp_range_size=5连续取值5个,必定走到5个分片。
  8. --rand-init=on 每个测试表都是用随机数据来填充的sysbench
  9. --num-threads=200具体每个场景的并发数详情请参见结果表格。

测试语句范例:


  1. sysbench --test='/usr/local/share/sysbench/oltp_drds.lua'--oltp_tables_count=1--report-interval=5--oltp-table-size=160000000  --mysql-user=****--mysql-password=****--mysql-table-engine=innodb  --rand-init=on  --mysql-host=****--mysql-port=3306--mysql-db=****--max-requests=0   --oltp_skip_trx=on --oltp_auto_inc=off  --oltp_secondary --oltp_range_size=5--mysql_table_options='dbpartition by hash(`id`) tbpartition by hash(id) tbpartitions 2'  --num-threads=200--max-time=300 run

OLTP 测试结果

drds-expansion1.png

规格 并发数 每秒 read/write 数量
入门版 8C32G 100 20807.12
标准版 16C64G 230 49667.48
企业版 32C128G 450 90693.70
企业版 64C256G 900 177506.48

SELECT 测试结果

2.png

规格 并发数 每秒 read/write 数量
入门版 8C32G 200 41401
标准版 16C64G 300 98182.26
企业版 32C128G 600 180500.00
企业版 64C256G 1200 366863.48

OLTP 场景测试脚本详情


  1. pathtest = string.match(test,"(.*/)")

  2. if pathtest then
  3.   dofile(pathtest .."common.lua")
  4. else
  5.   require("common")
  6. end

  7. function get_range_end(start)
  8.    return start + oltp_range_size -1
  9. end

  10. function thread_init(thread_id)
  11.   set_vars()

  12.   if(((db_driver =="mysql") or (db_driver =="attachsql")) and mysql_table_engine =="myisam")then
  13.      local i
  14.      local tables ={}
  15.      for i=1, oltp_tables_count do
  16.         tables[i]= string.format("sbtest%i WRITE", i)
  17.      end
  18.      begin_query ="LOCK TABLES ".. table.concat(tables," ,")
  19.      commit_query ="UNLOCK TABLES"
  20.   else
  21.      begin_query ="BEGIN"
  22.      commit_query ="COMMIT"
  23.   end

  24. end

  25. function event(thread_id)
  26.   local rs
  27.   local i
  28.   local table_name
  29.   local range_start
  30.   local c_val
  31.   local pad_val
  32.   local query

  33.   table_name ="sbtest".. sb_rand_uniform(1, oltp_tables_count)
  34.   if not oltp_skip_trx then
  35.      db_query(begin_query)
  36.   end

  37.   if not oltp_write_only then

  38.   for i=1, oltp_point_selects do
  39.      rs = db_query("SELECT c FROM ".. table_name .." WHERE id=".. sb_rand(1, oltp_table_size))
  40.   end

  41.   if oltp_range_selects then

  42.   for i=1, oltp_simple_ranges do
  43.      range_start = sb_rand(1, oltp_table_size)
  44.      rs = db_query("SELECT c FROM ".. table_name .." WHERE id BETWEEN ".. range_start .." AND ".. get_range_end(range_start))
  45.   end

  46.   for i=1, oltp_sum_ranges do
  47.      range_start = sb_rand(1, oltp_table_size)
  48.      rs = db_query("SELECT SUM(K) FROM ".. table_name .." WHERE id BETWEEN ".. range_start .." AND ".. get_range_end(range_start))
  49.   end

  50.   for i=1, oltp_order_ranges do
  51.      range_start = sb_rand(1, oltp_table_size)
  52.      rs = db_query("SELECT c FROM ".. table_name .." WHERE id BETWEEN ".. range_start .." AND ".. get_range_end(range_start).." ORDER BY c")
  53.   end

  54.   for i=1, oltp_distinct_ranges do
  55.      range_start = sb_rand(1, oltp_table_size)
  56.      rs = db_query("SELECT DISTINCT c FROM ".. table_name .." WHERE id BETWEEN ".. range_start .." AND ".. get_range_end(range_start).." ORDER BY c")
  57.   end

  58.   end

  59.   end

  60.   if not oltp_read_only then

  61.   for i=1, oltp_index_updates do
  62.      rs = db_query("UPDATE ".. table_name .." SET k=k+1 WHERE id=".. sb_rand(1, oltp_table_size))
  63.   end

  64.   for i=1, oltp_non_index_updates do
  65.      c_val = sb_rand_str("###########-###########-###########-###########-###########-###########-###########-###########-###########-###########")
  66.      query ="UPDATE ".. table_name .." SET c='".. c_val .."' WHERE id=".. sb_rand(1, oltp_table_size)
  67.      rs = db_query(query)
  68.      if rs then
  69.        print(query)
  70.      end
  71.   end

  72.   for i=1, oltp_delete_inserts do

  73.   i = sb_rand(1, oltp_table_size)

  74.   rs = db_query("DELETE FROM ".. table_name .." WHERE id=".. i)

  75.   c_val = sb_rand_str([[
  76. ###########-###########-###########-###########-###########-###########-###########-###########-###########-###########]])
  77.   pad_val = sb_rand_str([[
  78. ###########-###########-###########-###########-###########]])

  79.   rs = db_query("INSERT INTO ".. table_name ..  " (id, k, c, pad) VALUES ".. string.format("(%d, %d, '%s', '%s')",i, sb_rand(1, oltp_table_size), c_val, pad_val))

  80.   end

  81.   end -- oltp_read_only

  82.   if not oltp_skip_trx then
  83.      db_query(commit_query)
  84.   end

  85. end
相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
2月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
62 4
|
4月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
17天前
|
关系型数据库 MySQL 分布式数据库
[PolarDB实操课] 05.通过源码部署PolarDB-X标准版
本课程介绍如何通过源码部署PolarDB-X标准版,涵盖基于Paxos的MySQL三副本工作原理和技术特点。主要内容包括: 1. **Paxos三副本工作原理**:讲解Leader和Follower节点的角色及数据同步机制。 2. **技术特点**:强调高性能、数据不丢失(RPO=0)和自动HA切换。 3. **源码部署步骤**:详细演示从编译生成RPM包到启动DN节点的过程,包括配置my.cnf文件和初始化数据库。 4. **高可用体验**:通过三台机器模拟三副本集群,展示Leader选举和故障转移机制,确保数据一致性和服务可用性。
|
2月前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
36 11
|
2月前
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
59 13
|
2月前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
52 10
|
17天前
|
关系型数据库 编译器 分布式数据库
PolarDB实操课] 04.通过源码部署PolarDB-X企业版
本次课程由PolarDB开源架构师王江颖分享,详细介绍了通过源码部署PolarDB-X企业版的全过程。主要内容包括: 1. **编译基础** 2. **使用源码编译部署PolarDB-X企业版** 3. **演示实例**:通过阿里云ECS进行实际操作演示,从创建用户、赋予权限到最终启动并连接PolarDB-X数据库,展示了完整的部署过程。 4. **总结**
|
3月前
|
存储 缓存 调度
性能提升利器|PolarDB- X 超详细列存查询技术解读
本文将深入探讨 PolarDB-X 列存查询引擎的分层缓存解决方案,以及其在优化 ORC 列存查询性能中的关键作用。
380 24
|
2月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
141 13
|
4月前
|
监控 测试技术 PHP
性能和压力测试
【10月更文挑战第10天】性能和压力测试
131 60

相关产品

  • 云原生分布式数据库 PolarDB-X