硬盘

安装iostat
yum -y install sysstat

作用:iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

用法:iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]
主要选项如下。
-c:显示CPU的使用情况。
-d:显示磁盘的使用情况。
-k:表示按千字节每秒显示数据。
-t:打印汇报的时间。
-v:表示打印出版本信息和用法。
-x device:指定要统计的设备名称,默认为所有的设备。
interval:指每次统计间隔的时间,count指按照这个时间间隔统计的次数。


使用
iostat -xm 3 #### x表示显示扩展统计信息,m表示以兆为单位显示,3表示每隔3秒显示

[root@localhost ~]# iostat -xm 3
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain) 2017年11月26日 _x86_64_ (1 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.49 0.02 1.13 5.49 0.00 92.87

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.15 6.27 1.25 0.22 0.02 66.32 0.27 36.00 36.14 35.33 10.87 8.17
dm-0 0.00 0.00 5.67 1.01 0.21 0.02 71.01 0.27 40.75 38.96 50.86 12.20 8.15
dm-1 0.00 0.00 0.05 0.00 0.00 0.00 17.99 0.00 17.05 17.05 0.00 15.92 0.08

AVG-CPU属性:
%user    CPU处在用户模式下的时间百分比
%nice    CPU处在带NICE值的用户模式下的时间百分比
%sys     CPU处在系统模式下的时间百分比
%iowait    CPU等待IO完成时间的百分比
%steal   管理程序维护另一个虚拟处理器时,虚拟CPU的无意的等待时间的百分比
%idle     闲置CPU的百分比

提示:
如果%iowait的值过高,表示硬盘存在I/O瓶颈;
如果%idle的值过高,表示CPU较空闲,如果%idle的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量;
如果%idle的值如果持续很低,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

Device属性:
rrqm/s      每秒进行merge的读操作数目
wrqm/s     每秒进行merge的写操作数目
r/s       每秒实际读取需求的数量
w/s      每秒实际写入需求的数量
rsec/s       每秒读取区段的数量
wsec/s      每秒写入区段的数量
rKB/s     每秒实际读取的大小,单位为KB
wKB/S      每秒实际写入的大小,单位为KB
avgrq-sz   需求的平均大小区段
avgqu-sz  需求的平均队列长度
await      等待I/O平均的时间(millisecondes)
r_await
w_await
svctm        I/O需求完成的平均时间(毫秒)
%util    一秒中有百分之多少的时间用于I/O操作,即被IO消耗的CPU百分比

提示:
如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
如果svctm比较接近await,说明I/O几乎没有等待时间;
如果await远大于svctm,说明I/O队列太长,IO响应太慢,则需要进行必要优化。
如果avgqu-sz比较大,也表示有当量IO在等待。


二、磁盘
1.磁盘的访问模式
顺序访问:
  1.顺序的访问磁盘上的快;
  2.一般经过测试后,得到改值的单位MB/S,表示为磁盘带宽,普通硬盘在50~100MB/s

随机访问:
  1.随机的访问磁盘上的块
  2.也可以用MB/S进行表示,但是通常使用IOPS(每秒处理IO的能力),普通硬盘在100-200 IOPS

下面是顺序访问和随机访问的示例图:

拷贝文件属于顺序访问,数据库中访问数据属于 随机访问;
数据库对数据的访问做了优化,把随机访问转成顺序访问。

磁盘的分类
HDD:
  1.盘片通过旋转,磁头进行定位,读取数据;
  2.顺序性较好,随机性较差;
  3.常见转速
    ① 笔记本硬盘:5400转/分钟;
    ② 桌面硬盘:7200转/分钟;
    ③ 服务器硬盘:10000转/分钟、15000转/分钟;
    ④ SATA:120~150 IOPS
    ⑤ SAS:150~200 IOPS

  从理论上讲,15000转/分钟,最高是15000/60约等于250IOPS
  由于机械盘片需要旋转,转速太高无法很好的散热

如果一个HDD对4K的块做随机访问是0.8MB/s,可通过0.8*(1024/4)=200 或者(0.8*1000)/ 4 = 200 得到IOPS,但是这个值存在部分干扰因素,如cache等。

SSD:
  1.纯电设备
  2.由FLash Memory组成
  3.没有读写磁头
  4.MLC闪存颗粒对一般企业的业务够用。目前SLC闪存颗粒价格较贵
  5.IOPS高
    50000+ IOPS
    读写速度非对称以INTEL SSD DC-S3500例子:
      Random 4KB3 Reads: Up to 75000 IOPS
      Random 4KB Writes: Up to 115000 IOPS
      Random 8KB3 Reads: Up to 47500 IOPS
      Random 8KB Writes: Up to 5500 IOPS

  当写入数据时,要先擦除老数据,在写入新数据
  擦除数据需要擦除整个区域(128K or 256K)一起擦除(自动把部分有用的数据挪到别的区域)

  8K的块的话用的时间几乎就是4K的块的一倍的时间。因为存的块越大读的时间越多。服务器的系统文件一般都是4K的块。。
  使用SSD的话建议数据库页的大小设置成8K或4K。最好是用8K,4K并发量高的话不知道是否会有问题,理论上是没问题。但是为了安全起见还是用8K的就好了。innodb_page_size=8K。
  上线之前,SSD需要经过严格的压力测试(一周时间),确保性能平稳。

Endurance Rating
  表示该SSD的寿命是多少
  比如450TBW,表示这个SSD可以反复写入的数据总量是450T(包括添加和更新)

SSD线上参数设置
  磁盘调度算法改为Deadline
  echo deadline > /sys/block/sda/queue/scheduler ##deadline适用于数据库,HDD也建议改成Deadline

MySQL参数
  innodb_log_file_size=4G 改参数设置的尽可能大
  innodb_flush_neighbors=0

  性能更平稳,且至少有15%的性能提升


SSD 品牌推荐
  Intel
  FusionIO
  宝存

不是很建议使用PCI-E的Flash卡(PCI-E插槽的SSD)
  性能过剩
  安装比较麻烦

3.提升IOPS性能的手段
  通过RAID技术
    功耗较高
    IOPS在2000左右

  通过购买共享存储设备
    价格非常昂贵
    但是比较稳定
    底层还是通过RAID实现

  直接使用SSD
    性能较好的SSD可以达到 万级别的IOPS
    建议可以用SSD + RAID5,RAID1+0太奢侈

4.RAID卡
  BBU
    Battery Backup Unit
    目前几乎所有RAID卡都带BBU
    需要电池保证写入的可靠性(在断电后,将RAID卡内存中的缓存的数据刷入到磁盘)
    电池有充放电时间(30天左右一个周期,充放电会切换成 Write Through,导致性能下降。云上数据库有时候会莫名的变慢,却查不到任何问情况就有可能是SSD在充放电造成的。只是可能的原因之一,也可能是别的情况造成的。具体情况具体分析)
    使用闪存(Flash) 的方式,就不会有充放电性能下降的问题

  RAID卡缓存
    Write Backup (强烈建议开启缓存)
    Write Through (不使用缓存,直接写入)

  LSI-RAID卡相关命令
    查看电量百分比
    [root@localhost ~]# megacli -AdpBbuCmd -GetBbuStatus -aALL | grep "Relative State of Charge"
    Relative State of Charge: 100%

    查看充电状态
    [root@localhost ~]# megacli -AdpBbuCmd -GetBbuStatus -aALL | grep "Charger Status"
    Charger Status: Complete

    查看缓存策略
    [root@localhost ~]# megacli -LDGetProp -Cache -LALL -a0


6.文件系统和操作系统
  文件系统
    XFS/EXT4
    noatime(不更新文件的atime标记,减少系统的IO访问)
    nobarrier(禁用barrier,可以提高性能,前提是使用write backup和使用BBU)

    mount -o noatime,nobarrier /dev/sda/1 /data


  操作系统
    推荐Linux
    关闭SWAP

 

posted @ 2019-08-21 23:01  我是一只忙碌的小青蛙  阅读(389)  评论(0编辑  收藏  举报