MySQL数据库基于sysbench实现OLTP基准测试
sysbench是一款非常优秀的基准测试工具,它能够精准的模拟MySQL数据库存储引擎InnoDB的磁盘的I/O模式。因此,基于sysbench的这个特性,下面利用该工具,对MySQL数据库支撑从简单到复杂事务处理工作负载的基准测试与验证。
测试场景一、OLTP读基准测试
1) 准备数据
sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=100000
--mysql-db=cbusdb --mysql-user=root prepare
2) OLTP随机读一致性业务场景测试验证
time sysbench --test=oltp --oltp-table-size=100000 --mysql-db=cbusdb
--mysql-user=root --max-time=60 --oltp-read-only --max-requests=0 --num-threads=8 run
以上测试模拟并发8个线程,最大请求10000次/秒,持续60秒对单表数据集10w条数据量的表进行随机读操作,测试结果如下所示:
通过模拟8个并发用户在数据量10w条的表上进行一致性读操作并结合上图,分析得出如下结论:
1) 60秒内共执行读请求766094次,更新及其他类型的请求109442次,QPS:12765;
2) 60s内共执行事务操作54721,TPS:911,成功率100%;
3) 每个事务执行最小时间2.98ms,最大时间184.5ms,平均执行时间8.76ms。
以上测试结果运行环境基本配置信息:
1) 虚拟机2颗CPU、2G内存,20G存储空间;
2) MySQL数据库参数未优化、调整。
测试场景二、OLTP混合类型负载测试
模拟OLTP随机读、写(更新、删除、插入):
sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=10000
--mysql-db=cbusdb --mysql-user=root --max-time=60
--oltp-nontrx-mode=update_key --max-requests=0 --num-threads=8 run
测试结果如下所示:
通过模拟8个并发用户在数据量10w条的表上模拟复杂的混合性工作负载测试并结合上图,分析得出如下结论:
1) 60秒内共执行读请求233268次,写请求83260次,其他类型的请求:33309,QPS:5273;
2) 60s内共执行事务操作16647,TPS:277,锁冲突造成的死锁的数量15个,事务的成功率99.91%;
3) 每个事务执行最小时间8.19ms,最大时间1299.78ms,平均执行时间28.82ms。
以上测试结果运行环境基本配置信息:
1) 虚拟机2颗CPU、2G内存,20G存储空间;
2) MySQL数据库参数未优化、调整。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
PHP+MySQL实现在线测试答题实例
这个实例主要给大家介绍如何使用jQuery+PHP+MySQL来实现在线测试题,包括动态读取题目,答题完毕后台评分,并返回答题结果. 读取答题列表: $sql = "select * from quiz order by id asc"; $query = mysql_query($sql); while ($row = mysql_fetch_array($query)) { $answers = explode('###', $row['answer']); $arr[] = ar
-
mysql慢查询操作实例分析【开启、测试、确认等】
本文实例讲述了mysql慢查询操作.分享给大家供大家参考,具体如下: mysql有些sql会执行很慢,有可能造成服务器负载飙升 首先查询 确定影响负载的是mysql ,使用top命令,ps命令等 其次,进入MySQL,使用show full processlist查询执行中的sql语句,看看问题,使用explain 命令 查看状态 最后找出sql语句杀死或者优化 centos7上面安装mariadb服务 yum -y install mariadb-server mariadb-devel 开启
-
MySQL占用内存较大与CPU过高测试与解决办法
更改后如下: innodb_buffer_pool_size=576M ->256M InnoDB引擎缓冲区占了大头,首要就是拿它开刀 query_cache_size=100M ->16M 查询缓存 tmp_table_size=102M ->64M 临时表大小 key_buffer_size=256m ->32M 重启mysql服务后,虚拟内存降到200以下. 另外mysql安装目录下有几个文件:my-huge.ini .my-large.ini.my-medium.ini..
-
MySQL 之压力测试工具的使用方法
一.MySQL自带的压力测试工具--Mysqlslap mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较.mysqlslap为mysql性能优化前后提供了直观的验证依据,系统运维和DBA人员应该掌握一些常见的压力测试工具,才能准确的掌握线上数据库支撑的用户流量上限及其抗压性等问题. 1.更改其默认的最大连接数 在对MySQL进行压力测试之前,需要更改其默
-
MySQL循环语句之while循环测试
mysql 操作同样有循环语句操作,网上说有3中标准的循环方式: while 循环 . loop 循环和repeat循环.还有一种非标准的循环: goto. 鉴于goto 语句的跳跃性会造成使用的的思维混乱,所以不建议使用. 这几个循环语句的格式如下: WHILE--DO--END WHILE REPEAT--UNTIL END REPEAT LOOP--END LOOP GOTO. 目前我只测试了 while 循环: delimiter $$ // 定义结束符为 $$ drop procedu
-
详解Mysql5.7自带的压力测试命令mysqlslap及使用语法
前言 mysqlslap是一个诊断程序,旨在模拟MySQL服务器的客户端负载并报告每个阶段的时间.它就像多个客户端正在访问服务器一样工作. 1.使用的语法: mysqlslap [options] --auto-generate-sql, -a :自动生成测试表和数据,表示用mysqlslap自己生成的SQL脚本来测试并发压力. --auto-generate-sql-load-type=type :测试语句的类型,取值包括:read,key,write,update和mixed(默认). --
-
MySQL如何快速的创建千万级测试数据
备注: 此文章的数据量在100W,如果想要千万级,调大数量即可,但是不要大量使用rand() 或者uuid() 会导致性能下降 背景 在进行查询操作的性能测试或者sql优化时,我们经常需要在线下环境构建大量的基础数据供我们测试,模拟线上的真实环境. 废话,总不能让我去线上去测试吧,会被DBA砍死的 创建测试数据的方式 1. 编写代码,通过代码批量插库(本人使用过,步骤太繁琐,性能不高,不推荐) 2. 编写存储过程和函数执行(本文实现方式1) 3. 临时数据表方式执行 (本文实现方式2,强烈推荐该
-
使用sysbench来测试MySQL性能的详细教程
sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况. 目前sysbench代码托管在launchpad上,项目地址:https://launchpad.net/sysbench(原来的官网 http://sysbench.sourceforge.net 已经不可用),源码采用bazaar管理. 一. 下载源码包 安装epel包后以便安装bzr客户端: rpm -Uvh http://dl.fedoraproject.org/pub/ep
-
MySQL数据库基于sysbench实现OLTP基准测试
sysbench是一款非常优秀的基准测试工具,它能够精准的模拟MySQL数据库存储引擎InnoDB的磁盘的I/O模式.因此,基于sysbench的这个特性,下面利用该工具,对MySQL数据库支撑从简单到复杂事务处理工作负载的基准测试与验证. 测试场景一.OLTP读基准测试 1) 准备数据 sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=100000 --mysql-db=cbusdb --mysql-user=
-
通过sysbench工具实现MySQL数据库的性能测试的方法
1.背景 sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试.sysbench 支持的测试有CPU运算性能测试.内存分配及传输速度测试.磁盘IO性能测试.POSIX线程性能测试.互斥性测试测试.数据库性能测试(OLTP基准测试).目前支持的数据库主要是MySQL数据库和PG数据库. 在新服务器上线时,建议对服务器的性能做一次测试,最好与既往的同类型的服务器的性能测试报表做一个横线比较,发现潜在问题.及新机器上线前,对服务器做一次体检. 对数据库而言,我们可
-
Java基于jdbc连接mysql数据库操作示例
本文实例讲述了Java基于jdbc连接mysql数据库操作.分享给大家供大家参考,具体如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MySQLDemo { private Connection conn = null; pri
-
java基于jdbc连接mysql数据库功能实例详解
本文实例讲述了java基于jdbc连接mysql数据库的方法.分享给大家供大家参考,具体如下: 一.JDBC简介 Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法.JDBC也是Sun Microsystems的商标.它JDBC是面向关系型数据库的. 1.JDBC架构: JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由
-
基于Docker的PHP调用基于Docker的Mysql数据库
docker简介: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 自从接触docker以来,一直想实现这种玩法.如下是步骤 1:建立基于docker的mysql,参考文章 Mac上将brew安装的MySql改用Docker执行 2:建立基于docker的php image 在当前目录,建立Dockerfile,内容如下 FROM php
-
PHP基于MySQL数据库实现对象持久层的方法
本文实例讲述了PHP基于MySQL数据库实现对象持久层的方法.分享给大家供大家参考.具体如下: 心血来潮,做了一下PHP的对象到数据库的简单持久层. 不常用PHP,对PHP也不熟,关于PHP反射的大部分内容都是现学的. 目前功能比较弱,只是完成一些简单的工作,对象之间的关系还没法映射,并且对象的成员只能支持string或者integer两种类型的. 成员变量的值也没有转义一下... 下面就贴一下代码: 首先是数据库的相关定义,该文件定义了数据库的连接属性: <?php /* * Filename
-
PHP基于ORM方式操作MySQL数据库实例
本文实例讲述了PHP基于ORM方式操作MySQL数据库.分享给大家供大家参考,具体如下: ORM----Oriented Relationship Mapper,即用面向对象的方式来操作数据库.归根结底,还是对于SQL语句的封装. 首先,我们的数据库有如下一张表: 我们希望能够对这张表,利用setUserid("11111"),即可以设置userid:getUserid()既可以获得对象的userid.所以,我们需要建立model对象,与数据库中的表对应. 由于每张表所对应的model
-
mysql数据库详解(基于ubuntu 14.0.4 LTS 64位)
1.mysql数据库的组成与相关概念 首先明白,mysql是关系型数据库,和非关系型数据库中最大的不同就是表的概念不一样. +整个mysql环境可以理解成一个最大的数据库:A +用mysql创建的数据库B是属于A的,是数据的仓库,相当于系统中的文件夹 +数据表C:是存放数据的具体场所,相当于系统中的文件,一个数据库B中包含若干个数据表C(注意此处的数据库B和A不一样) +记录D:数据表中的一行称为一个记录,因此,我们在创建数据表时,一定要创建一个id列,用于标识"这是第几条记录",id
-
Java实现基于JDBC操作mysql数据库的方法
本文实例讲述了Java实现基于JDBC操作mysql数据库的方法.分享给大家供大家参考,具体如下: package main; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class DBConnect
-
PHP基于PDO扩展操作mysql数据库示例
本文实例讲述了PHP基于PDO扩展操作mysql数据库.分享给大家供大家参考,具体如下: SELECT //查单条 function get_sub_product() { $res_zz = $pdo->query("SELECT id FROM content WHERE is_publish = 0 LIMIT 1;"); $rep = $res_zz->fetch(); } //查多条 function get_sub_product() { $dsn = 'mys
随机推荐
- php实现字符串翻转的方法
- 使用php完成常见的文件上传功能(推荐)
- 基于jquery实现左右按钮点击的图片切换效果
- 详解在Vue中通过自定义指令获取dom元素
- Java源码解析Integer方法解读
- Java中使用辗转相除法求最大公约数
- 讲解Oracle数据库中结束死锁进程的一般方法
- javascript中匹配价格的正则表达式
- 从源码解析Python的Flask框架中request对象的用法
- 详解Python如何获取列表(List)的中位数
- shell查找当前目录下大于1M的文件的三种方法分享
- Java 垃圾回收机制详解及实例代码
- 实例解析Java的Jackson库中的数据绑定
- PHP实现的自定义数组排序函数与排序类示例
- PHP对称加密算法(DES/AES)类的实现代码
- Java实现的计算最大下标距离算法示例
- Linux查看进程的所有信息的方法示例
- pycharm 安装JPype的教程
- Android Studio 通过登录功能介绍SQLite数据库的使用流程
- React+Webpack快速上手指南(小结)