草庐IT

动手测起来!搭载全自研数据库内核,我们将性能提升了20%

腾讯云数据库 2023-03-28 原文

近日,腾讯云MySQL发布新架构,在基础硬件能力、自研内核及外部网络延迟等方面进行了全面升级。

在探究新版本实际性能的过程中,测试人员通过基准测试工具SysBench以及全仿真业务生产环境,分别针对只写、只读以及混合读写场景进行性能测试。其结果显示,新架构下的云数据库MySQL在性能上比原有架构提升20%。此外,通过TXSQL内核的更新,也为企业提供了更多实用的能力。

本次发布的云数据库MySQL新架构搭载最新的腾讯自研数据库内核TXSQL,不仅提供了如Parallel DDL、缓存快照主从同步等性能增强能力,还提供了原生闪回能力,协助用户通过简单的SQL语句查询误操作前的历史数据,节省大量数据恢复时间,保障业务的稳定运行。

此外,云数据库MySQL对网络架构也进行了全面升级,其中,降低请求延迟最高达80%,有效提升了性能表现

光说不测假把式!接下来,本文为您介绍通过SysBench测试工具,对云数据库MySQL的原有架构和新发布架构来一场测试对比,感兴趣的读者可以参考测试说明,欢迎一起来测。

测试说明

2.1 测试环境

地域/可用区:北京 - 北京六区;

客户端规格:S5.2XLARGE16,8核16GB;

客户端操作系统:TencentOS Server 3.2;

网络:云服务器 CVM 和云数据库 MySQL 实例网络类型均为私有网络(VPC)且在同一子网下;

存储类型:本地 SSD 盘;

测试实例规格:通用型 4核 16GB;

参数模板:高性能模板;

复制方式:异步复制;

2.2 测试工具

SysBench 是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。SysBench可绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。本压测使用SysBench 1.0.20版本。

2.3 测试场景

本次压测从3个场景进行测试,分别是:只写场景、只读场景以及混合读写场景,每个场景进行2~3000个线程压测,取压测下的QPS值作为性能结果指标。

2.4 测试方法

第一步:准备数据

参考代码如下:

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX
--mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000
--tables=10 --events=0 --time=300 --threads={2~3000} oltp_read_write prepare

第二步:运行workload

(1)OLTP只写场景

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX
--mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000
--tables=10 --events=0 --time=300  --threads={2~3000} --percentile=95 --report-interval=1 oltp_write_only run

(2)OLTP只读场景

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX
--mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000
--tables=10 --events=0 --time=300 --threads={2~3000} --percentile=95 --skip-trx=1 --report-interval=1 oltp_read_only run

(3)OLTP混合读写场景

参考代码如下:

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX
--mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000
--tables=10 --events=0 --time=300  --threads={2~3000} --percentile=95 --report-interval=1 oltp_read_write run

第三步:清理数据

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX
--mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600   --threads=XXX --percentile=95  oltp_read_write cleanup

2.5 测试指标

每秒执行请求数QPS(Queries Per Second)

测试结果

3.1 只写场景测试结果

在只写场景下,云数据库MySQL新架构性能随线程数增加而始终高于原有架构特性,线程数为256时达到最高QPS,且在线程数为512时,新架构特性QPS值高于原有架构QPS的20%。

3.2 只读场景测试结果

在只读场景下,低线程数时云数据库MySQL新架构QPS增幅较大,趋近直线上升,在线程数达到64以后QPS上升平缓,总体性能始终高于原有架构,且在线程数为16时,高于原有架构QPS的22%。

3.3 混合读写场景测试结果

在混合读写场景下,低线程数时云数据库MySQL新架构QPS增幅较大,线程数达到512之后,整体QPS平缓下降。此时,新架构QPS达到最高,高于原有架构的18%。

结论

通过三个场景的测试对比,云数据库MySQL新发布的架构,在性能上远高于原有架构,三个场景下,线程数从2到3000,压测的QPS值平均提升20%以上,印证了云数据库MySQL升级后,性能大大提升。

腾讯云数据库内核团队将持续在前沿技术探索上不遗余力,聚焦市场与客户需求,把技术概念更好地落地实现,为各行各业带来全新的业务价值与技术优势。在未来,依托于新架构以及不断更新地内核,为大家带来更多的企业级特性。

有关动手测起来!搭载全自研数据库内核,我们将性能提升了20%的更多相关文章

  1. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  2. ruby - Rails -- :id attribute? 所需的数据库索引 - 2

    因此,当我遵循MichaelHartl的RubyonRails教程时,我注意到在用户表中,我们为:email属性添加了一个唯一索引,以提高find的效率方法,因此它不会逐行搜索。到目前为止,我们一直在根据情况使用find_by_email和find_by_id进行搜索。然而,我们从未为:id属性设置索引。:id是否自动索引,因为它在默认情况下是唯一的并且本质上是顺序的?或者情况并非如此,我应该为:id搜索添加索引吗? 最佳答案 大多数数据库(包括sqlite,这是RoR中的默认数据库)会自动索引主键,对于RailsMigration

  3. ruby-on-rails - 如何让 datamapper 与 postgresql 数据库一起工作? - 2

    我已经找到了几个使用datamapper的示例,并且能够让它们正常工作。不过,所有这些示例都是针对sqlite数据库的。我正在尝试将数据映射器与postgresql一起使用。我将datamapper中的调用从sqlite3更改为postgres,并且我已经安装了dm-postgres-adapter。但它仍然不起作用。我还需要做什么? 最佳答案 与SQLite不同,PostgreSQL不将数据库存储在单个文件中。在你拥有createdyourdatabase之后,尝试这样的事情:DataMapper.setup:default,{:

  4. Ruby 的数字方法性能 - 2

    我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0

  5. ruby-on-rails - rails 多态关联(遗留数据库) - 2

    我使用的是遗留数据库,所以我无法控制数据模型。他们使用了很多多态链接/连接表,就像这样createtableperson(per_ident,name,...)createtableperson_links(per_ident,obj_name,obj_r_ident)createtablereport(rep_ident,name,...)其中obj_name是表名,obj_r_ident是标识符。因此链接的报告将按如下方式插入:insertintoperson(1,...)insertintoreport(1,...)insertintoreport(2,...)insertint

  6. ruby - Ruby 性能中的计时器 - 2

    我正在寻找一个用ruby​​演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent

  7. ruby-on-rails - 在现有数据库上进行 Rails 迁移 - 2

    我正在创建一个新的Rails3.1应用程序。我希望这个新应用程序重用现有数据库(由以前的Rails2应用程序创建)。我创建了新的应用程序定义模型,它重用了数据库中的一些现有数据。在开发和测试阶段,一切正常,因为它在干净的表数据库上运行,但是当尝试部署到生产环境时,我收到如下消息:PGError:ERROR:column"email"ofrelation"users"alreadyexists***[err::localhost]:ALTERTABLE"users"ADDCOLUMN"email"charactervarying(255)DEFAULT''NOTNULL但是我在迁移中有这

  8. ruby-on-rails - 如果条件与 &&,是否有任何性能提升 - 2

    如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:

  9. ruby-on-rails - 在不重新查询数据库的情况下重新排序 Rails 中的事件记录? - 2

    例如,假设我有一个名为Products的模型,并且在ProductsController中,我有以下代码用于product_listView以显示已排序的产品。@products=Product.order(params[:order_by])让我们想象一下,在product_listView中,用户可以使用下拉菜单按价格、评级、重量等进行排序。数据库中的产品不会经常更改。我很难理解的是,每次用户选择新的order_by过滤器时,rails是否必须查询,或者rails是否能够以某种方式缓存事件记录以在服务器端重新排序?有没有一种方法可以编写它,以便在用户排序时rails不会重新查询结果

  10. ruby-on-rails - 如何在 Ruby on Rails 中将数组持久保存到数据库? - 2

    我正在尝试将一个数组的数组保存到我在Rails中的SQLite数据库中。现在,我有一个可以容纳这样一个数组的对象,并且实例似乎可以毫无问题地保存。但是,它显然没有保存到数据库中——当我在与创建数组的View不同的View中调用My_Object.array上的函数时,结果为nil并且不起作用。例如:classMy_Object当我调用My_Object.new(:array=>[[1,2,3],[4,5,6]])时,一切似乎都正常工作,但我不能在其他任何地方访问:array属性,结果都是nil。有什么想法吗? 最佳答案 首先在您的表

随机推荐