• 硬盘


    安装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

  • 相关阅读:
    怎样用HTML5 Canvas制作一个简单的游戏
    js面向对象
    javascript闭包
    javascript变量的作用域
    5-22
    5-23
    14-5-21 硬代码
    14-5-19 类和对象
    array
    生成干扰线
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11391806.html
Copyright © 2020-2023  润新知