* 本篇随笔为《涂抹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个方面因素影响

  1. 寻道时间(Tseek):将磁头移动到数据所在的磁道上所需要的时间,通常都在3-15毫秒
  2. 旋转延迟时间(Trotation):将盘片旋转,使所请求的数据所在扇区移动至磁头下方所需要的时间,这个时间跟磁盘的转速密切相关,转速越快延迟越短,一般15000转的磁盘平均旋转延迟为2ms
  3. 数据传输时间(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性能调优与诊断的更多相关文章

  1. 涂抹mysql笔记-mysql性能调优和诊断

    <>关键性指标1.IOPS(Input/Output operations Per Second)每秒处理的I/O请求次数:需要说明的一点,通常提到磁盘读写能力,比如形容它每秒读300M写 ...

  2. MySQL性能调优与架构设计——第8章 MySQL数据库Query的优化

    第8章 MySQL数据库Query的优化 前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 ...

  3. MySQL性能调优——锁定机制与锁优化分析

    针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能.锁定机制也因此成了各种数据库的核心技术之一.不同数据库存储引擎的锁定机制是不同的,本 ...

  4. MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!

    一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...

  5. MySQL 性能调优之存储引擎

    原文:http://bbs.landingbj.com/t-0-246222-1.html        http://bbs.landingbj.com/t-0-245851-1.html MySQ ...

  6. MySQL性能调优的10个方法 - mysql数据库栏目

    摘要: https://edu.aliyun.com/a/29036?spm=5176.11182482.related_article.1.hbeZbF 摘要: MYSQL 应该是最流行了 WEB ...

  7. MySql(十一):MySQL性能调优——常用存储引擎优化

    一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...

  8. MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

    第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...

  9. MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案

    第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...

随机推荐

  1. TP5 自定义验证器

    TP内置验证功能提供两种验证方法 验证器(推荐) $validate = Validate::make([ 'id' => 'require|integer', ]); if ($validat ...

  2. idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)

    idhttp.get方式调用,这种比较简单,大家都会.post方式网上却没有任何成功的代码,本人也是摸索了一个上午才搞定. 分享给大家. (1)post方式调用的远程方法,方法名必须加“update” ...

  3. MySQL 8.0 新增SQL语法对窗口函数和CTE的支持

    尝试了一下MySQL 8.0的部分新特性. 如果用过MSSQL或者是Oracle中的窗口函数(Oracle中叫分析函数), 然后再使用MySQL 8.0之前的时候,就知道需要在使用窗口函数处理逻辑的痛 ...

  4. 特大数字之和,返回结果是字符串(考虑到数字特别大,如果相加会产生e)

    自己做的,没有整理代码,还是做出来了: 做这个题时,最总要的一步思路就是,先让长度一致,然后从个位开始,每一个与每一个数字相加,如果大于10,则下一次另外两个数相加时加1 function add(a ...

  5. 初学c# -- 开始学directx

    这些天对directx有兴趣了,开始慢慢学,先学基础,找了好些资料,为毛都写的辣么长呢,学习精简下来就几行. 安装个directx sdk,在win10里面文件夹C:\Windows\Microsof ...

  6. IO高级应用关于字符码表

    ASCII码表: 计算机里只有数字,我在计算机软件里的一切都是用数字来表示,屏幕上显示的一个个字符也不例外.计算机诞生在美国,最开始所用到字符就是我们现在键盘上的一些符号和少数几个特殊的符号,每一个字 ...

  7. Linux 上pcntl安装步骤

    一. 下载对应的PHP源码包 wget http://cn2.php.net/get/php-5.5.20.tar.gz/from/this/mirror 二. 解压下载的源码文件 tar -zxvf ...

  8. JS数组存储(两个数组相等,一个改变,另一个跟着改变)

    数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的实际的数组元素被存储在堆(heap)内存中:数组引用变量是一个引用类型的变量,被存储在栈(stack)内存中. ...

  9. ATM取款机数据库设计

    创建文件夹    USE master GO EXEC xp_cmdshell 'mkdir d:\bank', NO_OUTPUT 建库   --检验数据库是否存在,如果为真,删除此数据库--   ...

  10. [leetcode]33. Search in Rotated Sorted Array旋转过有序数组里找目标值

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...