MySQL性能指标

MySQL 性能指标 TPS 与 QPS 介绍

1.什么是 TPS

TPS (Transaction Per Second)每秒事务数,即数据库每秒执行的事务数。
MySQL 本身没有直接提供 TPS 参数值。如果我们想要获得 TPS 的值,只有我们自己计算了。可以根据 MySQL 数据库提供的状态变量,来计算TPS
需要使用的参数:
Com_commit :表示提交次数
Com_rollback:表示回滚次数
我们定义第一次获取的Com_commit的值与Com_rollback值的和为 c_r1,时间为 t1;
第二次获取的Com_commit的值与Com_rollback值的和为 c_r2,时间为 t2;
t1 与 t2 单位为秒。

那么 TPS = ( c_r2 - c_r1 ) / ( t2 - t1 ) 算出来的就是该 MySQL 实例在 t1 与 t2 生命周期之间的平均TPS

2.什么是 QPS

QPS(Query Per Second)每秒请求次数,也就是数据库每秒执行的 SQL 数量。包含insertselectupdatedelete等。
MySQL 数据库本身已经提供了这个QPS指标值,可以使用如下命令获取:

[root@zstedu ~]# mysqladmin -S /tmp/mysql3306.sock -uroot -p status 2>/dev/null
Enter password:

得到的结果里面包含Queries per second

Uptime: 16362 Threads: 1 Questions: 932 Slow queries: 0 Opens: 184 Flush tables: 6 Open tables: 3 Queries per second avg: 0.056 

这样 QPS = Questions / Uptime 即可得到的该指标的值。MySQL 提供的这个QPS指标,是该 MySQL 实例从启动到目前,这段生命周期内的指标。
我们自己计算QPS时,获取两次QPS的值相减,然后除以两次的时间间隔。
我们定义第一次获取的Questions值为 Q1 ,时间点为 t1;
第二次获取Questions值为 Q2,时间点为 t2;
t1 与 t2 单位为秒。

那么,QPS = ( Q2 - Q1 ) / ( t2 - t1 )

怎么获取 MySQL 的Questions值呢?

[root@zstedu ~]# mysqladmin -S /tmp/mysql3306.sock -uroot -p extended-status 2>/dev/null |grep "Questions"
Enter password:
| Questions | 932

或者

[root@zstedu ~]# mysql -S /tmp/mysql3306.sock -uroot -p -e "show global status like 'Questions'" 2>/dev/null
Enter password:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Questions | 935 |
+---------------+-------+

3.什么是 IOPS

IOPS(Input/Output Operations per Second)即每秒处理的 I/O 请求次数。是判断磁盘 I/O 能力的指标之一。一般来讲IOPS指标越高,那么单位时间内能够响应的请求自然也就越多。理论上讲,只要系统实际的请求数低于 IOPS 的能力,就相当于每一个请求都能得到即时响应,那么 I/O 就不会是瓶颈了。

注意:IOPS 与磁盘吞吐量不一样,吞吐量是指单位时间内可以成功传输的数据数量。

怎么查看磁盘的 IOPS 呢?
可以使用 iostat 命令

# yum install sysstat
# iostat  -dx 1 10

IOPS = r/s(每秒读了多少次) + w/s(每秒写了多少次)

iostat -d -x 10 3

Device:  rrqm/s  wrqm/s  r/s  w/s  rsec/s  wsec/s avgrq-sz avgqu-sz  await  svctm  %util
主要字段含义如下:

r/s 每秒读操作数。

w/s 每秒写操作数。

rsec/s 每秒从设备读取的扇区数量。

wsec/s 每秒向设备写入的扇区数量。

avgrq-sz I/O 请求的平均扇区数。

avgqu-sz I/O 请求的平均队列长度。

await I/O 请求的平均等待时间,单位为毫秒。

svctm I/O 请求的平均服务时间,单位为毫秒。

%util 处理 I/O 请求所占用的时间的百分比,即设备利用率。

#sar -pd 10 3
输出的主要字段含义如下:

DEV 正在监视的块设备

tps 每秒钟物理设备的 I/O 传输总量

rd_sec/s 每秒从设备读取的扇区数量

wr_sec/s 每秒向设备写入的扇区数量

avgrq-sz I/O 请求的平均扇区数

avgqu-sz I/O 请求的平均队列长度

await I/O 请求的平均等待时间,单位为毫秒

svctm I/O 请求的平均服务时间,单位为毫秒

%util I/O 请求所占用的时间的百分比,即设备利用率

磁盘性能指标--IOPS
----------------------------------------------------------
        IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。

    随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS是关键衡量指标。
    顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播VOD(Video On Demand),关注连续读写性能。数据吞吐量是关键衡量指标。

IOPS和数据吞吐量适用于不同的场合:
读取10000个1KB文件,用时10秒  Throught(吞吐量)=1MB/s ,IOPS=1000  追求IOPS
读取1个10MB文件,用时0.2秒  Throught(吞吐量)=50MB/s, IOPS=5  追求吞吐量

磁盘服务时间
--------------------------------------
传统磁盘本质上一种机械装置,如FC, SAS, SATA磁盘,转速通常为5400/7200/10K/15K rpm不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。

寻道时间 Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。
旋转延迟 Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟为2ms。
数据传输时间 Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分消耗时间。简单计算时可忽略。

常见磁盘平均物理寻道时间为:
7200转/分的STAT硬盘平均物理寻道时间是9ms
10000转/分的STAT硬盘平均物理寻道时间是6ms
15000转/分的SAS硬盘平均物理寻道时间是4ms

常见硬盘的旋转延迟时间为:

7200  rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms

10000 rpm的磁盘平均旋转延迟大约为60*1000/10000/2 = 3ms,

15000 rpm的磁盘其平均旋转延迟约为60*1000/15000/2 = 2ms。



最大IOPS的理论计算方法
--------------------------------------
IOPS = 1000 ms/ (寻道时间 + 旋转延迟)。可以忽略数据传输时间。

7200  rpm的磁盘IOPS = 1000 / (9 + 4.17)  = 76 IOPS
10000 rpm的磁盘IOPS = 1000 / (6+ 3) = 111 IOPS
15000 rpm的磁盘IOPS = 1000 / (4 + 2) = 166 IOPS


影响测试的因素
-----------------------------------------
实际测量中,IOPS数值会受到很多因素的影响,包括I/O负载特征(读写比例,顺序和随机,工作线程数,队列深度,数据记录大小)、系统配置、操作系统、磁盘驱动等等。因此对比测量磁盘IOPS时,必须在同样的测试基准下进行,即便如此也会产生一定的随机不确定性。


队列深度说明 
NCQ、SCSI TCQ、PATA TCQ和SATA TCQ技术解析 
----------------------------------------
    是一种命令排序技术,一把喂给设备更多的IO请求,让电梯算法和设备有机会来安排合并以及内部并行处理,提高总体效率。
SCSI TCQ的队列深度支持256级
ATA TCQ的队列深度支持32级 (需要8M以上的缓存)
NCQ最高可以支持命令深度级数为32级,NCQ可以最多对32个命令指令进行排序。
    大多数的软件都是属于同步I/O软件,也就是说程序的一次I/O要等到上次I/O操作的完成后才进行,这样在硬盘中同时可能仅只有一个命令,也是无法发挥这个技术的优势,这时队列深度为1。
    随着Intel的超线程技术的普及和应用环境的多任务化,以及异步I/O软件的大量涌现。这项技术可以被应用到了,实际队列深度的增加代表着性能的提高。
在测试时,队列深度为1是主要指标,大多数时候都参考1就可以。实际运行时队列深度也一般不会超过4.


IOPS可细分为如下几个指标:
-----------------------------------------
数据量为n字节,队列深度为k时,随机读取的IOPS
数据量为n字节,队列深度为k时,随机写入的IOPS

具体IOPS测试及工具使用:

参见

https://blog.csdn.net/luyegang1/article/details/74453879 

https://blog.csdn.net/guoer9973/article/details/50178355

猜你喜欢

转载自www.cnblogs.com/chinaops/p/9370255.html