硬盘
安装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
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号