IOPS介绍基础概念
IOPS(Input/Output Operations Per Second)是一个用于电脑存储设备(如硬盘(HDD)、固态硬盘(SSD)或存储区域网络(SAN))性能测试的量测方式,可以视为是每秒的读写次数。
量测 | 说明 |
---|---|
总IOPS | 每秒读写次数的总和(混合读取及写入测试) |
随机读取IOPS | 每秒平均的随机读取次数 |
随机写入IOPS | 每秒平均的随机写入次数 |
循序读取IOPS | 每秒平均的循序读取次数 |
循序写入IOPS | 每秒平均的循序写入次数 |
IOPS(Input/Output Per
Second)即每秒的输入输出量(或读写次数),即指每秒内系统能处理的I/O请求数量。随机读写频繁的应用,如小文件存储等,关注随机读写性能,IOPS是关键衡量指标。可以推算出磁盘的IOPS = 1000ms / (Tseek +
Trotation + Transfer),如果忽略数据传输时间,理论上可以计算出随机读写最大的IOPS。
常见磁盘的随机读写最大IOPS为:
吞吐量(Throughput),指单位时间内可以成功传输的数据数量。 吞吐量是指系统在单位时间内处理请求的数量。
CentOS中测试硬盘:
yum -y install hdparm hdparm -Tt --direct/dev/sdb1 #/dev/sdb1*部分可改
以 阿里云服务器为例子(8C16G,云盘260GiB (9600 IOPS))
[root@izwz96bg1pf5e43r6m2zvpz fio-2.0.7]# hdparm -Tt --direct /dev/vda1
/dev/vda1:
Timing O_DIRECT cached reads: 520 MB in 2.00 seconds = 259.46 MB/sec Timing O_DIRECT disk reads: 698 MB in 3.01
seconds = 232.14 MB/sec
参考地址:https://help.aliyun.com/document_detail/147897.html?spm=5176.2020520101.help.dexternal.1f8f4df5Top0sA
wget http://brick.kernel.dk/snaps/fio-2.0.7.tar.gz
yum -y install libaio-devel
tar -zxvf fio-2.0.7.tar.gz
cd fio-2.0.7
make && make install
参数 | 参数说明 |
---|---|
filename=/dev/vda1 | 测试文件名称,通常选择需要测试的盘的data目录 |
direct=1 | 测试过程绕过机器自带的buffer。使测试结果更真实。 |
rw | rw=randwread 测试随机读的I/O rw=randwrite测试随机写的I/O rw=randrw 测试随机混合写和读的I/O rw=read 测试顺序读的I/O rw=write 测试顺序写的I/O rw=rw测试顺序混合写和读的I/O |
bs=16k | 单次io的块文件大小为16k |
bsrange=512-2048 | 同上,提定数据块的大小范围 |
size=5g | 本次的测试文件大小为5g,以每次4k的io进行测试。 |
numjobs=30 | 本次的测试线程为30. |
runtime=1000 | 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。 |
ioengine=psync | io引擎使用pync方式 |
rwmixwrite=30 | 在混合读写的模式下,写占30% |
group_reporting | 关于显示结果的,汇总每个进程的信息。 |
lockmem=1g | 只使用1g内存进行测试。 |
zero_buffers | 用0初始化系统buffer。 |
nrfiles=8 | 每个进程生成文件的数量 |
fio -filename=/dev/vda1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=15G
-numjobs=20 -runtime=60 -group_reporting -name=mytest
fio -filename=/dev/vda1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30
-runtime=1000 -group_reporting -name=mytest
fio -filename=/dev/vda1 -direct=1 -iodepth 1
-thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
fio -filename=/dev/vda1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30
-runtime=1000 -group_reporting -name=mytest
fio -filename=/dev/vda1 -direct=1 -iodepth 1 -thread -rw=randrw
-rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest
-ioscheduler=noop
Sysbench是一款开源的、模块化的、跨平台的多线程性能测试工具,可以执行数据库在CPU、内存、线程、IO等方面的性能测试。
详细参考:https://help.aliyun.com/document_detail/139562.html
关乎硬件的性能问题,就是读写性能,提升业务的并发都起到辅助作用
IOPS:Input/Output operation Per Second, 每秒处理的IO请求次数。
我们知道I/O就是磁盘的读写能力,比如每秒读 300M,写 200M,这个即数据的吞吐量(I/O能力的另一个关键指标),但是 IOPS 指的可不是读写的数据吞吐量,IOPS 指的是每秒能够处理的 I/O 请求次数。
如果想I/O 系统响应够快,那么 IOPS 越高越好,因为IOPS 和硬件有关,所以,要提高IOPS,就目前来看基本只能拼硬件,传统方案是使用多块磁盘通过 RAID 条带后,使 I/O
读写能力获得提升,我们也可以使用固态硬盘SSD来提升IOPS,不过固态硬盘成本可能比较大。
QPS:Query Per Second,每秒请求(查询)次数。
这个参数非常重要,可以直观的反映系统的性能,这就像IOPS衡量磁盘每秒钟能接收多少次请求。 我们可以在MySQL命令行模式下执行 status
命令,返回的最后一行输出信息中就包含 QPS 指标。
TPS:Transaction Per Second,每秒事务数。 TPS参数MySQL原生没有提供,如果需要我们自己算,可以利用计算的公式:
TPS = (Com_commit + Com_rollback) / Seconds
这个公式有两个状态变量,分别代表提交次数和回滚次数,Seconds 就是我们定义的时间间隔。
响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。 响应时间RT(Response-time)
,是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。
并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。
脚本运行都会涉及,读写数据库
高并发性能指标:QPS、TPS、RT、吞吐量详解
数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical
Processing)。
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。