MySQL性能调优与诊断

时间:2021-04-02 02:13:25

* 本篇随笔为《涂抹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性能优化总结&lowbar;&lowbar;&lowbar;本文乃《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. VS2015&plus;Win10 调试DirectX 报错

    安装完Win10调试程序突然在这个地方报错: #if (defined(DEBUG) || defined(_DEBUG)) deviceFlags |= D3D11_CREATE_DEVICE_DE ...

  2. 諾基亞定制的Android系統名為 Z Launcher

    N1這款產品似乎沒有諾基亞的傳統風格,搭載Android系統以及酷似iPad mini的外觀,都在向外界傳遞著一個信號:諾基亞在變化.不過,沒有了移動設備部門的諾基亞,仍然心系消費電子市場,N1會是個 ...

  3. 跟着8张思维导图学习javascript

    学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出8张javascript相关的思维导图. 思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又 ...

  4. 让x86的android模拟器能模拟arm架构系统

    网上介绍共计三种模拟器比较常用,分别是bluestacks.andy和Genymotion,前者支持ARM架构,中者支持远程控制,后者启动速度快,各有优缺点. 如果要用genymotion模拟arm的 ...

  5. delphi数字签名验证及能够获取数字签名文件信息(利用wintrust&period;dll的导出函数,翻译一下)

    unit TrustCheck; interface uses Windows,SysUtils,jwaWinTrust,JwaWinCrypt; function CheckFileTrust(co ...

  6. 容器 What&comma; Why&comma; How - 每天5分钟玩转容器技术(6)

    学习任何东西都可以按照3W的框架进行,容器技术也是一样,先回答 What.Why 和 How 这三个问题. What - 什么是容器? 容器是一种轻量级.可移植.自包含的软件打包技术,使应用程序可以在 ...

  7. &num;多个关联的python程序在linux后台运行

    由于在shell脚本中直接使用&符号和python程序有冲突,不能正常的进入后台执行python(多番尝试python xxx.py &,后面的&总是不能正常识别.系统cent ...

  8. IF判断条件说明

    在Python中,任何非零整数都为true,0是false:判断条件也可以是任何序列(列表.元组.字符串):所有长度不为零的为true,否则为false,比如:空序列为false.简而言之:非0非空为 ...

  9. React Native IOS搭建开发环境

    安装 必须的软件 Homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...

  10. SQL小结1

    #数据表的查询框架: select [all | distinct] select_list from tb_name [where 查询条件] [group by <group_by_expr ...