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 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...
随机推荐
- .NET MVC 控制器和行为
行为就是可访问方法(public) 行为返回类型必须是 ActionResult 或者其派生类,基本上返回类型为以下四种之一 View(视图路径) Json(对象或者对象集合) Content(字符串 ...
- 浅谈MyBatisGenerator的使用
目录 1.概述 2.依赖 3.Maven插件配置 4.配置文件说明 5.运行 6.总结 1.概述 日常中使用MyBatis最为麻烦的就是编写Mapper文件了, 如果数据库增加一张表, 这时通常会复制 ...
- 使用List需要注意的点
目录 1. 概述 2. Arrays.asList(); 2-1. 产生不可操作的集合 2-2. 需要传入对象数组而不是基本类型数组 3. arrayList.subList(); 3-1. subL ...
- Truthy真值
在 JavaScript 中,Truthy (真值)指的是在 布尔值 上下文中转换后的值为真的值.所有值都是真值,除非它们被定义为 falsy (即除了 false,0,"",nu ...
- Python学习—基础篇之基本数据类型(一)
数据类型 在python中,能够直接处理的基本数据类型主要有数字类型.字符串类型.字节类型.布尔类型.列表.元组.字典.集合等. 一.数字类型 1.1 数字类型的创建 # 数字类型 a = 10 b ...
- php的AES加密、解密类
<?php /** * php.ios.Android 通用的AES加密.解密方法 */ namespace Common\Business; class AESCrypt { /** * 初始 ...
- 算法练习LeetCode初级算法之链表
删除链表中的节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne ...
- 复用微信小程序源码包后仍然有原小程序的版本管理怎么处理
前言: 复用微信小程序源码包后,重新创建项目导入源码包,会发现开发者工具版本管理中仍然有原来小程序的版本,这样就不太好了.毕竟是一个新的小程序,需要有新的版本控制的.那么这个问题怎么处理呢? 解决方案 ...
- SQL Server 2000使用链接服务器
执行:安装盘\SQL2KSP4\install\instcat.sql 文件下载地址:http://download.csdn.net/detail/taomanman/5680765
- 如何禁用Chrome / Firefox /IE浏览器的Cookie
Firefox: 点击菜单按钮并点击选项 按钮. 选择 隐私 面板. 将“Firefox 将会:”这一项设置为 使用自定义历史记录设置. 取消 接受来自站点的 Cookie 选项 即可禁用 Cooki ...