iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >sysbench的lua小改动导致的性能差异
  • 554
分享到

sysbench的lua小改动导致的性能差异

2024-04-02 19:04:59 554人浏览 独家记忆
摘要

|  导语 最近在配合某同事做一项性能压测,发现相同数据量、相同数据库参数、相同sysbench压力、相同数据库版本和sysbench版本、相同服务器硬件环境下,我和同事的压测结果天差


|  导语

最近在配合某同事做一项性能压测,发现相同数据量、相同数据库参数、相同sysbench压力、相同数据库版本和sysbench版本、相同服务器硬件环境下,我和同事的压测结果天差地别:一个小时压测结束后,我的压测结果中出现了高频率周期性阻塞(tps,qps为0),而同事的压测结果中未出现阻塞(tps,qps从头到尾都比较稳定)。正常情况下,在环境完全相同时,不可能会出现如此巨大的性能差异。但这次,不可能发生的事情它的确发生了。经过复测与排查,终于发现了其中的奥妙。

服务器硬件信息

  • 数据库主机 
    * CPU:72 process 
    * memory:128G 
    * 磁盘:某存储 100G 
    * 网卡:intel 万兆网卡

  • 数据库版本:Mysql 5.7.21

  • sysbench版本:1.0.9

  • sysbench主机 
    * CPU:20 process 
    * memory:128G 
    * 磁盘:本地SAS 50G 
    * 网卡:intel 万兆网卡


|  复测结果数据

先来看看压测结果数据,如下图所示(注:此处只截取了前几十秒的数据进行对比):

  • 我的压测结果(下图可见,明显的周期性tps,qps为0的情况) 

sysbench的lua小改动导致的性能差异

  • 同事的压测结果(下图可见,tps,qps较为稳定且并未出现阻塞情况) 

sysbench的lua小改动导致的性能差异


|  抓取等待事件

看到上文第1节中的结果,如果根据以往的经验、常识来快速判断...估计会懵圈!!当得知同事的测试结果很稳定时,我本能地想:要把等待事件信息拉出来瞧瞧!!下面是我与同事各自在复测时截取的等待事件信息(复测时间为3分钟)(不想仔细看等待事件内容的亲可直接跳至第3节)

operation操作时间统计(每秒查询一次,查询数十次截取时间最长的5次)

  • 使用lua脚本随机生成主键值时:假设当delete操作删除id=1的数据行时,紧接着insert也会使用相同的id=1的主键值。所以高概率会出现innodb重复使用delete数据行所在的页来存放insert数据,在sysbench高并发压力下,大部分的insert数据存储可能只需要在内存中已存在的页内操作即可,无需太多IO操作

  • 不使用lua脚本随机生成的主键值,而是使用表的自增属性生成主键值时:假设当delete操作删除id=1的数据行时,紧接着insert由于是表自增属性自己生成,也就是说几乎不太可能id=1,所以高概率会出现innodb重新申请一个数据页来写入insert数据,在sysbench高并发压力下,大部分的insert数据存储可能需要从磁盘文件中重新申请空间,IO操作较为频繁

  • 至此,我和同事的压测结果有巨大差异的原因大致确定,后续经过反复的验证,也确认了是由于oltp.lua脚本的微小差异导致的。由于我们大多数时候都是使用的本地盘,而本地盘IO延迟低,通常情况下sysbench压测时这点微小的差异容易被忽略。而在此案例中,由于我们测试的环境中使用了某存储设备,相对于本地盘,IO延迟大大增加,进而造成了因为oltp.lua脚本的微小差异而导致最后压测结果的巨大差异。

    提示:如果不想改动lua脚本,又想避免主键冲突有办法解决吗?有的,从sysbench 0.5版本开始,新增了一个隐藏选项--mysql-ignore-errors,用于忽略指定的错误,如果要避免主键冲突,指定选项--mysql-ignore-errors=1062 即可。


    |  作者简介

    罗小波·沃趣科技高级数据库技术专家

    IT从业多年,历任运维工程师、高级运维工程师、运维经理、数据库工程师,曾参与版本发布系统、轻量级监控系统、运维管理平台、数据库管理平台的设计与编写,熟悉MySQL体系结构,Innodb存储引擎,喜好专研开源技术,追求完美。


    您可能感兴趣的文档:

    --结束END--

    本文标题: sysbench的lua小改动导致的性能差异

    本文链接: https://www.lsjlt.com/news/49933.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • sysbench的lua小改动导致的性能差异
      |  导语 最近在配合某同事做一项性能压测,发现相同数据量、相同数据库参数、相同sysbench压力、相同数据库版本和sysbench版本、相同服务器硬件环境下,我和同事的压测结果天差...
      99+
      2024-04-02
    • 如何理解MySQL limit导致的执行计划差异
      本篇内容介绍了“如何理解MySQL limit导致的执行计划差异”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
      99+
      2024-04-02
    • 导致香港服务器稳定性差的原因有哪些
      导致香港服务器稳定性差的原因有:1、香港服务器网络带宽出现波动会导致网络环境出现不稳定情况;2、香港服务器上的后台软件占用资源过大导致;3、香港服务器自身硬件配置过低导致无法正常运行。具体内容如下:1、网络带宽波动网站打开速度不稳定最直接的...
      99+
      2024-04-02
    • PHP 和 npm 的并发性能差异大吗?
      PHP 和 npm 是两种非常常用的开发语言,它们在不同的领域都有着广泛的应用。其中,PHP 是一种后端语言,主要用于服务器端的 Web 应用程序开发,而 npm 是一个包管理器,主要用于 JavaScript 应用程序的开发。在实际开发中...
      99+
      2023-07-30
      npm 并发 打包
    • 从性能到功能:探讨MySQL和SQL Server的差异
      MySQL和SQL Server是两个非常流行的关系型数据库管理系统(RDBMS),在实际使用中有着一些重要的功能和性能差异。本文将探讨这两个数据库管理系统之间的差异,并通过具体的代码...
      99+
      2024-04-02
    • MYSQL时区导致时间差了14或13小时的解决方法
      目录CST 时区排错过程解决方案mysql时区有问题(相差13或14小时)p>我一般使用MYSQL定义字段类型时,一般使用TIMESTAMP时间戳来定义创建时间与更新时间,并将其定义为默认值为CURRENT_TIM...
      99+
      2023-01-04
      MYSQL差14小时 MYSQL差13小时
    • openSUSE的Spectre缓解方法导致性能下降
      openSUSE默认使用IBRS作为其Spectre Variant 2缓解方法而不是Retpolines,这是该发行版与其他Linux发行版相比开箱即用性能较慢的原因之一。这个opensuse-factory邮件列表引用了联想笔记本电脑在...
      99+
      2023-06-05
    • Windows和Linux中Java数组的性能差异分析
      Java是一种跨平台的编程语言,它可以在多个操作系统上运行。然而,在不同的操作系统中,Java的性能可能会有所不同。本文将分析在Windows和Linux操作系统中,Java数组的性能差异。 在Java中,数组是一种基本数据结构,它可以用来...
      99+
      2023-08-26
      linux windows 数组
    • 性能受回流和重绘的差异的影响程度
      回流和重绘的差异对性能的影响,需要具体代码示例 在前端开发中,我们经常会遇到需要对页面进行修改的情况,比如改变元素的样式、大小或位置等。然而,这些改变并不是无成本的,它们会引发浏览器的回流和重绘操作,对页面的性能产生影响。 回流...
      99+
      2024-01-26
      性能 重绘 回流
    • 方法和函数在 golang 中的性能差异是什么?
      go 语言中,方法通常比函数性能更好,因为它们直接访问接收者类型字段,避免数据复制。方法主要用于操作接收者类型值,而函数则独立于特定类型执行任务。基准测试显示,方法比函数快约 30%。因...
      99+
      2024-04-27
      方法 函数 golang
    • MySQL查询中LIMIT的大offset导致性能低下浅析
      前言 我们大家都知道,mysql查询使用select命令,配合limit,offset参数可以读取指定范围的记录,但是offset过大影响查询性能的原因及优化方法 我们在业务系统中难免少不了分页...
      99+
      2024-04-02
    • 不同 PHP 版本中数组排序算法的性能差异
      不同 php 版本使用不同的数组排序算法,性能差异显著:php 5.0-7.0:快速排序php 7.1-8.0:timsort(归并排序和插入排序)php 8.1+:hhvm基准测试结果...
      99+
      2024-04-27
      性能差异 数组排序算法
    • 分布式计算中PHP和NPM的性能差异是什么?
      随着云计算和大数据时代的到来,分布式计算已经成为了越来越多企业的首选方案。在分布式计算中,PHP和NPM是两个非常常见的技术,但是它们的性能差异到底有多大呢?在本文中,我们将深入探讨这个问题。 PHP是一种开源的服务器端脚本语言,被广泛用于...
      99+
      2023-08-13
      npm path 分布式
    • service mysql start出错导致mysql不能启动的解决方法
      本篇内容介绍了“service mysql start出错导致mysql不能启动的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希...
      99+
      2024-04-02
    • PHP 数组键值互换:不同算法间的性能差异分析
      问题: 数组键值互换算法中性能差异最大的是哪种算法?答案: 位运算算法详细描述:朴素算法使用双重循环,性能最差,耗时 0.22 秒。函数式算法使用 array_map() 函数,性能次之...
      99+
      2024-05-03
      php 数组键值互换
    • 怎么改善移动设备网页的性能
      这篇文章主要为大家展示了“怎么改善移动设备网页的性能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么改善移动设备网页的性能”这篇文章吧。正文1、桌面网页的性能检测桌面浏览器使用的页面可以利用一...
      99+
      2023-06-08
    • 低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限的示例分析
      这篇文章将为大家详细讲解有关低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现象应用升级MySQL驱动8.0后,在并发量较高时,查...
      99+
      2023-06-20
    • 日志记录:Java和Unix之间的异步编程差异如何影响应用程序的性能?
      日志记录是应用程序开发和维护中至关重要的一项任务。Java和Unix都是广泛使用的技术,但它们之间存在着一些异步编程差异,这些差异可能会影响应用程序的性能。在本文中,我们将讨论这些差异,并演示如何在Java和Unix中实现异步编程。 Jav...
      99+
      2023-08-17
      日志 unix 异步编程
    • golang匿名函数和闭包在不同场景下的性能差异对比
      匿名函数和闭包在 go 语言中的性能差异主要源于内存分配和变量捕获。匿名函数直接分配在栈上,而闭包分配在堆上,闭包还捕获局部变量,可能导致额外的内存分配和引用计数,减慢执行速度。匿名函数...
      99+
      2024-04-30
      golang 性能对比 作用域
    • 修改hosts文件里面的主机名导致oralce asm无法启动怎么办
      小编给大家分享一下修改hosts文件里面的主机名导致oralce asm无法启动怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作