学习笔记3:Mysql基准测试
Mysql基准测试:
【什么是基准测试】:基准测试是一种测量和评估软件性能指标的活动,用于建立某个时刻的性能基准,
以便系统发生软硬件变化时重新进行基准测试
(针对系统设置的一种压力测试)
【基准测试】:直接,简单,易用,用于评估服务器的处理能力(简化的压力测试,不关心逻辑,和业务没有关系)
【压力测试】:对真实的业务进行测试,获得真实系统所能承受的压力
【基准测试的目的】:建立mysql性能的基准线
确定当前mysql服务器运行情况
模拟比当前系统更高的负载,以找出系统的扩展瓶颈
测试不同的硬件,软件和操作系统的配置
证明新的硬件设备是否配置正确
【如何进行基准测试】:
对整个系统进行基准测试,从系统入口进行测试
【优点】: 能够测试整个系统的性能,包括web服务器,缓存,数据库等
能反映出系统中各个组建接口间的性能问题,体现真实性能状况
【缺点】: 测试设计复杂,消耗时间长
-------------------------------------------
单独对某个组件(mysql)进行基准测试
【优点】: 测试设计简单,耗时短
【缺点】: 无法全面了解整个系统的性能基准线
【mysql基准测试的常见指标】
单位时间内所处理的事务数:TPS
单位时间内所处理的查询书:QPS
响应时间:衡量完成一个测试任务所花费的整体时间
【平均响应时间】,【最小响应时间】,【最大响应时间】,【各时间所占百分比】
并发量:同时处理查询请求的数量(正在工作中的并发的操作数或同时工作的数量,而不是多少连接的线程)
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
基准测试步骤:
【计划和设计基准测试】
【1.对整个系统还是一个组件,使用什么样的数据,时间,次数】
【2.准备基准测试及数据收集脚本。 收集信息(cpu使用率,IO,网络流量,状态与计数器信息等)】
【3.运行基准测试】
【4.保存及分析基准测试结果】
【基准测试中容易忽略的问题】
【1.使用生产环境的数据时只使用了部分数据】
【2.多用户场景中,只做了单用户测试(多线程测试)】
【3.单服务器测试分布式应用(使用相同架构测试)】
【反复执行同一查询】
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
基准测试工具:
【常用基准测试工具】
【mysqlslap】:mysql自带基准测试工具
特点: 可模拟服务器负载,并输出相关统计信息
可指定也可自动生成查询语句
常用参数:
mysqlslap
--auto-generate-sql:由系统自动生成sql脚本进行测试
--auto-generate-sql-add-autoincrement:在生成的表中增加自增id
--auto-generate-sql-load-type:指定测试中使用的查询类型
--auto-generate-sql-write-number:指定初始化数据时生成的数据量
--concurrency: 指定并发线程数量
--engine: 指定测试表的存储引擎,可用逗号分隔多个存储引擎
--no-drop: 指定不清理测试数据
--iterations: 指定测试运行的次数
--number-of-queries:指定每一个线程执行的查询数量
--debug-info: 指定输出额外的内存及cpu统计信息
--number-int-cols: 指定测试表中包含的int类型列的数量
--number-char-cols:指定测试表中包含的varchar类型列的数量
--create-schema: 指定执行测试数据库的名字
--query: 用于指定自定义的sql脚本
--only-print: 并不运行测试脚本,而是把生成的脚本打印出来
--auto-generate-sql, -a 自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力。
--auto-generate-sql-load-type=type 测试语句的类型。代表要测试的环境是读操作还是写操作还是两者混合的。取值包括:read,key,write,update和mixed(默认)。
--auto-generate-sql-add-auto-increment 代表对生成的表自动添加auto_increment列,从5.1.18版本开始支持。
--number-char-cols=N, -x N 自动生成的测试表中包含多少个字符类型的列,默认1
--number-int-cols=N, -y N 自动生成的测试表中包含多少个数字类型的列,默认1
--number-of-queries=N 总的测试查询次数(并发客户数×每客户查询次数)
--query=name,-q 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
--create-schema 代表自定义的测试库名称,测试的schema,MySQL中schema也就是database。
--commint=N 多少条DML后提交一次。
--compress, -C 如果服务器和客户端支持都压缩,则压缩信息传递。
--concurrency=N, -c N 表示并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者--delimiter参数指定的值做为分隔符。例如:--concurrency=100,200,500。
--engine=engine_name, -e engine_name 代表要测试的引擎,可以有多个,用分隔符隔开。例如:--engines=myisam,innodb。
--iterations=N, -i N 测试执行的迭代次数,代表要在不同并发环境下,各自运行测试多少次。
--only-print 只打印测试语句而不实际执行。
--detach=N 执行N条语句后断开重连。
--debug-info, -T 打印内存和CPU的相关信息。
mysqlslap -a -uroot -p112358 --concurrency=1,50,100,200 --iterations=3 --number-int-cols=5 --number-char-cols=5
--auto-generate-sql --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=10 --create-schema=sbtest
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
【sysbench】:
安装:
下载 wget https://github.com/akopytov/sysbench/archive/0.5.zip
解压 unzip 0.5.zip
切换目录 cd sysbench-0.5
运行脚本 ./autogen.sh
设置参数 ./configure --with-mysql-includes=/usr/local/mysql/include/ \--with-mysql-libs=/usr/local/mysql/lib/
编译安装 make && make install
【cpu性能测试】
sysbench --test=cpu --cpu-max-prime=20000 run
cpu测试主要是进行素数的加法运算,在上面的例子中,指定了最大的素数为 20000,自己可以根据机器cpu的性能来适当调整数值。
【线程测试】
sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
【磁盘IO性能测试】
free -m :查看内存量
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw run
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup
上述参数指定了最大创建16个线程,创建的文件总大小为3G,文件读写模式为随机读。
【内存测试】
free -m :查看内存量
sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run
上述参数指定了本次测试整个过程是在内存中传输 4G 的数据量,每个 block 大小为 8K。
【OLTP测试】
sysbench --test=./oltp.lua --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-db=imooc --mysql-user=root --mysql-password=112358 --oltp-tables-count=10 --mysql-host=localhost --mysql-socket=/tmp/mysql.sock prepare
测试 OLTP 时,可以自己先创建数据库 sbtest,或者自己用参数 --mysql-db 来指定其他数据库。
--mysql-table-engine 还可以指定为 innodb,myisam 等 MySQL 支持的表存储引擎类型。
【常用命令】:
--mysql-user: 测试执行用户
--mysql-password: 测试执行的用户密码
--mysql-table-engine: 用于指定所使用的存储引擎
--mysql-db=dbtest1a: 测试使用的目标数据库,这个库名要事先创建
--oltp-tables-count=10: 产生表的数量
--oltp-table-size=10000000: 每个表产生的记录行数
--oltp-dist-type=uniform: 指定随机取样类型,可选值有 uniform(均匀分布), Gaussian(高斯分布), special(空间分布)。默认是special
--oltp-read-only=off: 表示不止产生只读SQL,也就是使用oltp.lua时会采用读写混合模式。默认 off,如果设置为on,则不会产生update,delete,insert的sql。
--oltp-test-mode=nontrx: 执行模式,这里是非事务式的。可选值有simple,complex,nontrx。默认是complex
【simple】:简单查询,SELECT c FROM sbtest WHERE id=N
【complex (advanced transactional)】:事务模式在开始和结束事务之前加上begin和commit, 一个事务里可以有多个语句,如点查询、范围查询、排序查询、更新、删除、插入等,并且为了不破坏测试表的数据,该模式下一条记录删除后会在同一个事务里添加一条相同的记录。
【nontrx (non-transactional)】:与simple相似,但是可以进行update/insert等操作,所以如果做连续的对比压测,你可能需要重新cleanup,prepare。
--oltp-skip-trx=[on|off]: 省略begin/commit语句。默认是off
--rand-init=on: 是否随机初始化数据,如果不随机化那么初始好的数据每行内容除了主键不同外其他完全相同
--num-threads=12: 并发线程数,可以理解为模拟的客户端并发连接数
--report-interval=10: 表示每10s输出一次测试进度报告
--max-requests=0: 压力测试产生请求的总数,如果以下面的max-time来记,这个值设为0
--max-time=120: 压力测试的持续时间,这里是2分钟。
prepare: 用于准备测试数据
run: 实际进行测试
cleanup: 清理测试数据
学习笔记3:Mysql基准测试相关推荐
- 架构mysql_MySQL学习笔记之MySQL架构
MySQL 最重要.最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离.这种处理和存储分离的设计可以在使用时根据性能.特性,以及其他需求来选择数据存储的 ...
- MySQL学习笔记 | 04 - MySQL数据库基本操作(增加、修改、删除、查看)
MySQL学习笔记 | 01-为什么要使用数据库 MySQL学习笔记 | 02 - MySQL在Windows下的安装.配置.服务启动/停止.用户登录.查看版本号 MySQL学习笔记 | 03 - M ...
- Qt学习笔记之MySQL数据库
一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...
- 【学习笔记】MySQL数据库高级版 - 索引优化、慢查询、锁机制等
本文是尚硅谷周阳(阳哥)老师的MySQL高级篇视频的学习笔记.由于视频比较老,所以在高版本的MySQL中索引的地方做了优化,和视频的内容不完全一样,不过大体一致.从第四节锁机制开始的部分还没有整理. ...
- 《MySQL实战45讲》——学习笔记01-03 “MySQL基本架构、日志系统、事务隔离“
最近有新闻说"丁奇"炒股失败欠债,赶紧去极客时间买了他的<MySQL 实战 45 讲>以防下架,顺带重新系统的复习下MYSQL相关知识,记录下学习笔记: 本篇介绍: M ...
- linux 指定库名 登录mysql_数据库学习笔记之MySQL(01)
目录 01. 什么是数据库? 02. 常见数据库 03. MySQL简介 04. 数据库系统(Database System)的组成 05. SQL语言 06. SQL语言组成 07. MySQL的常 ...
- mysql 浮点数 字节_数据库学习笔记之MySQL(02)
目录 01. 数据表的组成 02. 数据表创建的前提 03. 数据表的创建语法规范 04. MySQL中的数据类型 05. 数值型包含哪些 06. 字符串类型 07. 日期时间类型 正文 01. 数据 ...
- 【学习笔记】mysql多实例安装
mysql多实例安装(笔记) 安装环境:CentOS最小化的系统 已经编译安装了mysql 先停止mysql服务 killall -9 mysql 创建一个/data目录 再创建一个端口号的文件夹(想 ...
- mysql类似的数据库_MemSQL学习笔记-类似MySQL的数据库
http://gigaom.com/cloud/ex-facebookers-launch-memsql-to-make-your-database-fly/ -- 多主-从 http://www.m ...
- mysql1关闭_(2.1)学习笔记之mysql基本操作(启动与关闭)
关键词:mysql关闭数据库,mysql启动数据库 本系列学习笔记主要讲如下几个方面: 本文主要是[一:mysql启动][二:mysql关闭] 一..mysql启动 如图,有多重启动方式 (1.1)m ...
最新文章
- for循环 lamda python_Python中if-else判断语句、while循环语句以及for循环语句的使用...
- 利用 OpenCV+ConvNets 检测几何图形
- 如何向学妹解释在地址栏中输入网址后发生了什么?
- 编写五子棋的完整python代码_python实现五子棋游戏(pygame版)
- python指定位置写入文件_Python从文件中读取指定的行以及在文件指定位置写入
- 一个能够编写、运行SQL查询并可视化结果的Web应用:SqlPad
- 使用html+css+js实现3D相册
- 隐藏在华为2019财报里的“数字密码”
- 一步一步写算法(之查找)
- swoole 自定义eof 标记 带返回信息(自己修改)和 不带返回信息的原本demo
- 风波中的滴滴:离无人驾驶落地还有多远?
- 基于卷积神经网络模型的MSTAR高分辨率图像数据集识别实践
- 校准 Linux 服务器的时间
- JAVA解析JSON格式的数据
- STM32通过esp8266获取心知天气数据(hal库)
- itext转html为pdf 锚点,flying saucer html转pdf经验分享
- ZYNQ学习之旅--PS_AXI_VDMA(利用VDMA实现将PS端的数据显示在PL端的HDMI上)
- Kaggle:Quora Question Pairs
- Zeus源码解读之定时任务执行与手动执行任务的过程分析
- 邮政快递单号可以批量查询吗
热门文章
- linux18.04安装显卡驱动,Ubuntu18.04安装nvidia显卡驱动
- 南方科技大学计算机学科评估,全国第四轮学科评估结果公布 我校7个学科进入B类...
- Oracle实验 实验2 Oracle数据库的创建以及逻辑存储结构管理
- 奥的斯服务器显示DBF,OTIS故障代码故障总汇01.doc
- 【今日CV 计算机视觉论文速览 第103期】Mon, 22 Apr 2019
- c语言打开文件出现分段故障,分割故障的常见原因的确定列表
- C# 三菱FX PLC XYS读写,串口读写
- 规则引擎Drools详细介绍
- i7 11700k和12700k哪个好
- WinRAR去广告(简体中文版)