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-X
《PolarDB-X 动手实践》系列第一期,体验如何一键安装部署 PolarDB-X。
相关文章
|
3天前
|
SQL 存储 关系型数据库
性能诊断工具DBdoctor如何快速纳管数据库PolarDB-X
DBdoctor是一款基于eBPF技术的数据库性能诊断工具,已通过阿里云PolarDB分布式版(V2.3)认证。PolarDB-X是阿里云的高性能云原生分布式数据库,采用Shared-nothing和存储计算分离架构,支持高可用、水平扩展和低成本存储。PolarDB-X V2.3.0在读写混合场景下对比开源MySQL有30-40%的性能提升。DBdoctor能按MySQL方式纳管PolarDB-X的DN节点,提供性能洞察和诊断。用户可通过指定步骤安装PolarDB-X和DBdoctor,实现数据库的管理和性能监控。
|
14天前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用合集之PolarDB-X启动容器时出现32886连接失败的问题,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
14天前
|
SQL 运维 关系型数据库
PolarDB产品使用合集之PolarDB 2.3.0 版本的 CDC 功能支持 Polardb-X 到 Polardb-X 的数据同步吗
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
14天前
|
运维 安全 关系型数据库
PolarDB产品使用合集之关于PolarDB DRDS的设置参数,主要有哪些
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
14天前
|
运维 关系型数据库 分布式数据库
PolarDB产品使用合集之PolarDB-X sqlyog 无法执行show语句是什么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
14天前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用合集之关于在Docker环境中部署和维护PolarDB-X,有相关文章可以参考吗
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
14天前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用合集之Drds扩容或者缩容该怎么操作
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
8月前
|
SQL Oracle 关系型数据库
Polar DB-O (兼容 Oracle 语法版本)和Polar DB PostgreSQL 版本概述(二)
Polar DB-O (兼容 Oracle 语法版本)和Polar DB PostgreSQL 版本概述(二)
772 0
|
存储 SQL 安全
PolarDB-X内核新版本:将MySQL进行到底
在PolarDB-X最新的内核版本5.4.15中,提供诸多新功能:存储过程,读写分离优化,表级分区管理,密码、审计优化等。
361 0
PolarDB-X内核新版本:将MySQL进行到底
|
存储 SQL Cloud Native
PolarDB-X内核新版本:更精细的数据管理
非常高兴为大家带来PolarDB-X内核5.4.14版本。在最新版本中提供了冷热数据存储分离、数据Locality、数据热点诊断、并行DML优化、Flashback Query和AUTO_INCREMENT兼容性,大幅提升了数据的可管理性、SQL处理能力和兼容性,并针对数据热点问题为用户提供了更多运维手段。

相关产品

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