MySQL性能调优与诊断
* 本篇随笔为《涂抹MySQL》一书的阅读摘抄,详细请查看正版书籍
关键性指标
IOPS(Input/Output operations Per Second)
每秒处理的I/O请求次数
需要说明的一点,通常提到磁盘读写能力,比如形容它每秒读300M写200M这个说的是数据吞吐量(I/O能力的另一个关键指标),但是IOPS指的不是数据吞吐量,它指的是每秒能够处理的I/O请求次数。什么是一次I/O请求呢?举个例子:读写100M的文件就是一次I/O请求,写入1B的数据也是一次I/O请求。IOPS指标越高,那么单位时间内能够响应的请求自然也就越多。从理论上来讲,只要系统实际的请求数低于IOPS能力,就相当于每一个请求都能及时得到响应,那么I/O就不会是瓶颈了。如果想I/O系统的响应够快那么IOPS越高越好。IOPS指标比较高的话,就更适合要求快速响应的系统,尤其是对于短连接、小事务、轻量数据位操作特点的OLTP系统,当然吞吐量也很重要,但 吞吐量对于磁盘性能来说基本是个确定的值,没有讨论空间。
传统磁盘完成一个I/O请求所花费的时间受3个方面因素影响:
- 寻道时间(Tseek):将磁头移动到数据所在的磁道上所需要的时间,通常都在3-15毫秒
- 旋转延迟时间(Trotation):将盘片旋转,使所请求的数据所在扇区移动至磁头下方所需要的时间,这个时间跟磁盘的转速密切相关,转速越快延迟越短,一般15000转的磁盘平均旋转延迟为2ms
- 数据传输时间(Transfer):完成传输所请求的数据所需要的时间。数据传输时间跟要传输的数据量密切相关,而传输数据块又与吞吐量密切相关。
假定数据要传输的数据量很小或者吞吐量极高,数据能在瞬间完成(忽略数据传输时间)。那么可以计算出理论上最大的IOPS,计算公式为:
IOPS=1000ms/(寻道时间+旋转延迟时间)基于这个公式计算的话单块SAS 15k转的磁盘,其最大IOPS=1000/(3+2)=200个每秒。这是理论上的最大值。
要提高IOPS,目前来看基本就是拼硬件,传统方案使用多块磁盘通过RAID条带后使IO读写能力获得提升。比如我们希望IOPS达到5000,那么理论上就需要5000/200=25块磁盘组成RAID0来实现。
RAID5每个写IO操作时间将产生4次IO,若使用RAID5条带后的存储系统写入时IOPS能达到5000个/s,那么至少需要4x5000/200=100块磁盘,实际上极少会存在纯写而不读取的系统,更多都是读写平均或者读都写少。
假如仍然是套RAID5条带过的存储系统,平均下来系统有1/3时间在做写入操作,2/3座读取操作那么实际需要的磁盘数就可能变为(2/3x5000+4x1/3x5000)/200约需要50块磁盘。总之不管是吞吐量还是IOPS组RAID时磁盘数移动要留足富裕。
QPS(Query Per Second)
每秒请求(查询)次数:
可在mysql命令行下输入status或者通过mysqladmin附加status参数都能查到QPS指标
QPS=Questions/Uptime,不过这个Uptime一般使我们自己定义的时间段
TPS(Transaction Per Second)
每秒事务数:
TPS=(Com_commit+Com_rollback)/Seconds Seconds是我们定义的时间间隔,如果换成Uptime就是该mysql实例在本次生命周期的平均TPS
获取关键性能指标
前面提到三个性能指标,IOPS先被跳过, 这个纯硬件的指标, 尽管对DB性能的影响关系重大, 不过硬件因素通常不是由dba能左右的, 所以我们这里重点关注QPS和TPS, 字系统资源层面, 我们重点关注CPU占用情况 , 也就是说,我们会重点统计CPU和QPS, 如果能统计到TPS(对象使用了支持事务的存储引擎), 那就顺道将TPS指标也收集一下.
手动获取性能指标:
先来获取QPS指标,按照前面所说,我们只要获取状态变量Questions的值即可,
mysql> show global status like 'Questions';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Questions | 3162 |
+---------------+-------+
1 row in set (0.03 sec)
自动获取性能指标:
利用mysqladmin来实现自动获取, 操作如下
$ mysqladmin -h 127.0.0.1 extended-status -r -i 1|grep 'Questions'
这条命令便是每隔一秒获取Questions的参数值, 这下定时输出的需求就算满足了, 而且更好的是, -r参数能够自动将状态变量本次输出的参数值与前次参数值相减, 输出两者之间的差值, 也就是说 这个名为我们输出的信息,就是该mysql实例的QPS
通过mysqladmin命令, 还能获取MySQL实例美妙查询, 更新 ,删除数据等指标,如美妙select,update数量:
$ mysqladmin -h 127.0.0.1 extended-status -r -i 1 |grep -E "Com_select|Com_updaate"
第一个问题解决了, 再拉看第二个问题, 怎么快速为数据库布置多项作业, 对此, 我们也可利用现成的MySQL命令行工具, mysqlslap, 一款mysql自带的专用轻量级压测工具
提示:
在执行mysqlslap命令期间, mysqladmin命令仍需在运行, 否则就看不到它的输出了,
$ mysqlslap -h 127.0.0.1 --query='select user,host from mysql.user' --number-of-queries=100000 -c 30 -i 10 --create-schema-jssdb
- --number-of-queries 指定测试要执行的查询语句
- -c, -concurrency 指定测试执行请求的并行度
- -i, --iterations 指定测试运行的次数
- --create-schema 指定此次测试在哪个schema下执行
- 这条命令翻译过来就是 指定在jssdb库下, 模拟30个用户连接,共执行100万次请求
mysqlslap命令功能很强大,它在自动测试方面还有很多可配置的参数,这里就不详细介绍了
TPCC测试
TPC 全称[T]ransaction [Processing] Performance [C]ouncil
是一家非盈利性组织,该组织制定各种商业应用的基准测试规范,任意厂商或个人, 都可以按照其规范里开发自己的应用程序
TPC-C:
TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统。1992年7月发布。几乎所有在OLTP市场提供软硬平台的国外主流厂商都发布了相应的TPC-C测试结果,随着计算机技术的不断发展,这些测试结果也在不断刷新。
TPCC-MYSQL:
tpcc-mysql是一套用于MySQL基准测试的程序,由percona基于TPC-C(下面简写成TPCC)衍生出来的产品。我们测试基本都用这一套程序, 详细使用方式这里就不作介绍了
MySQL性能调优与诊断的更多相关文章
- 涂抹mysql笔记-mysql性能调优和诊断
<>关键性指标1.IOPS(Input/Output operations Per Second)每秒处理的I/O请求次数:需要说明的一点,通常提到磁盘读写能力,比如形容它每秒读300M写 ...
- MySQL性能调优与架构设计——第8章 MySQL数据库Query的优化
第8章 MySQL数据库Query的优化 前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 ...
- MySQL性能调优——锁定机制与锁优化分析
针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能.锁定机制也因此成了各种数据库的核心技术之一.不同数据库存储引擎的锁定机制是不同的,本 ...
- MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- MySQL 性能调优之存储引擎
原文:http://bbs.landingbj.com/t-0-246222-1.html http://bbs.landingbj.com/t-0-245851-1.html MySQ ...
- MySQL性能调优的10个方法 - mysql数据库栏目
摘要: https://edu.aliyun.com/a/29036?spm=5176.11182482.related_article.1.hbeZbF 摘要: MYSQL 应该是最流行了 WEB ...
- MySql(十一):MySQL性能调优——常用存储引擎优化
一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...
- MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控
第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...
- MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案
第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...
随机推荐
- css:清楚html所有标签自带属性
相信如果您动手写过网页的话,应该体会到有些标签会自带一些默认的样式,而这些样式或许又是我们不想要的,所以我们可以用以下代码清除所有标签的默认样式 html, body, div, span, ap ...
- python re模块与正则表达式
首先要先继承re模块: import re re.findall() 方法 # 返回值为列表 \w 表示一个字符,为数字,字母,下滑线之一, \W匹配任意非数字,字母,下划线 print(re.fin ...
- html迪士尼网页实现代码
html body> <div> <!-- 导航设置 --> <header> <nav ...
- texmaker报错:could not start command 解决
我当时文件命名加了邮箱,引入特殊字符@,然后就报错了
- CSS表单3 光标样式 (每个位置鼠标放上去的样式不同)
<!DOCTYPE html> <html> <head> <title>单选按钮对齐</title> ...
- 关于extern的使用
学的时候不认真总结,用的时候就一堆bug. 上回也是调extern调了半天,今天又犯老毛病. data 比如说是要用到的的在main函数中不断刷新的量.那么这个unsigned int data 要写 ...
- ie7ajax 跨域 no transport 解决办法
客户端js <script src="jquery-1.8.0.min.js"></script> <script src="JavaScr ...
- SQL Server日志文件过大 大日志文件清理方法 不分离数据库
SQL Server日志文件过大 大日志文件清理方法 ,网上提供了很多分离数据库——〉删除日志文件-〉附加数据库 的方法,此方法风险太大,过程也比较久,有时候也会出现分离不成功的现象.下面的方式 ...
- elasticsearch 动态增加副本
动态调整副本数 PUT /ptt-new-2018-11/_settings{ "number_of_replicas": 2} 重建索引, 增加节点后要重建索引. 日志报错为网络 ...
- 利用DWORD SHOOT实现堆溢出的利用(先知收录)
原文链接:https://xz.aliyun.com/t/4009 1.0 DWORD SHOOT是什么捏? DWORD SHOOT指能够向内存任意位置写入任意数据,1个WORD=4个bytes,即可 ...