1. Linux存储系统
Linux存储系统分为VFS层,文件系统层,Page Cache缓存层、通用Block层、IO调度层、Block设备驱动层、Block设备层
一次redo log日志文件顺序读写的时候,实际上把磁盘IO请求交给linux操作系统的VFS层,根据对哪个目录文件操作,交给具体文件系统,在Page Cache查询是否存在,不存在请求转为Block IO,这一层是CFQ公平调度算法,需要进行优化设置为deadline IO调度算法,任何一个IO操作都不能一直不停的等待,在指定时间范围内,都必须让他执行,然后交给IO调度层,IO完成调度后,就会决定那个IO请求先执行,然后将请求交给Block设备驱动层,然后经过驱动把IO请求发送给真正的存储硬件,也就是Block设备层。
2. RAID
RAID是有个RAID卡的,写数据先写这个卡里面,然后再从卡慢慢落盘,为了支持掉电不丢失数据,需要给它配置一个锂电池或者是电容,但是锂电池是存在性能衰减问题的,所以一般来说锂电池都是要配置定时充放电的,也就是说每隔30~90天,就会自动对锂电池充放电一次,这可以延长锂电池的寿命和校准电池容量。在充放电时候,RAID的缓存级别会从write back变成write through,即直接写磁盘,性能从0.1ms这个级别退化10倍到毫秒级。
解决方案:
1、锂电池换电容,电容不用频繁充放电,电容可以支持透明充放电,就是字段检查电量,自动进行充电,不会说在充放电的时候让写IO直接走磁盘,但是更换电容很麻烦,而且电容比较容易老化,不推荐
2、手动充放电,写个脚本,每隔一段时间自动在晚上凌晨业务低峰时期,手动触发充放电
3. Too many connections
现象:机器性能很好,同时max_connections设置了800,但是实际缺只有214个
原因:linux操作系统把进程可以打开文件句柄数限制为了1024,导致Mysql连接最大就214,linux固定算法计算得到的
通过
ulimit -HSn 65535
ulimit -n 查看
cat /etc/security/limits.conf
cat /etc/rc.local
永久修改
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf