mysql操作系统和硬件的优化
一、CPU 那个更好,更快的CPU还是更多的CPU?、
1
2
3
|
当遇到CPU密集型的工作时候,mysql通常可以从更快的CPU中获益.
而,备库的话,一般是i/o密集型,因为主库和从库之间是单线程
多CPU在联机事务处理(OLTP)系统中非常有用.
|
二、平衡内存和磁盘资源
1
2
|
配置大量内存原因其实不是因为可以在内存中保存大量数据,而最终目的是避免磁盘I/O
当所有数据放到内存中,此时服务器"热"起来,所有的读取操作都会缓存命中,,换句话说,缓存可延迟写入此时便会出现缓存命中率,可以使用CPU利用率来判断缓存命中
|
三、随机的I/O和顺序的I/O
1
2
|
顺序操作的执行速度比随机操作的块,无论在内存还是磁盘
所以增加内存是解决随机I/O读取问题的最好办法,如果有足够的内存,就可以完全避免磁盘的读取请求.存储引擎的顺序读比随机读快。
|
四、 使用固态硬盘(闪存)
1
2
3
4
5
6
7
|
什么情况下使用闪存?
有着大量随机I/O工作负载场景下,造成大量随机I/O的情况是由于数据大于服务器内存导致的.
优化固态硬盘上的mysql
1,增加innoDB的I/O容量 增加I/O线程数到10-15
2,增加innodb的日志文件,以帮助提升和稳定性能(4G)
3,把一些存储从闪存转移到RAID,并且ibdata1也适合放到raid卷上,而且可以利用percona server 特性使用4kb的块写事务日志,而不是默认的521字节。因为这会匹配大部分的闪存本身的块大小,以获得更好的效果
4,限制插入缓冲大小,innoDB中变更为change buffer,而不是无限增大,并避免ibdata1变得非常大。在MYSQL 5.6会有此变量
|
五、raid的性能优化:不做过多的记录
1
2
|
1,raid5 本身的优化已经可以达到raid10的性能。没钱用raid5 有钱用raid10
2,做raid阵列的监控。以便提醒硬盘或者raid卷降级或者失效
|
六、 优化网络以提升mysql性能
1
2
3
|
1,DNS配置 尽量使用skip-name-resolve来减少因解析带来的不必要麻烦、
2,检查网络的ping 丢包率、
3,通过优化/etc/sysctl.cnf 中的网络参数,提升性能,以下便是参考值
|
1
2
3
4
|
net.ipv4.ip_local_port_range = 1024 65535 改变本地的端口范围
net.ipv4.tcp_max_syn_backlog = 4096 允许更多的连接进入队列
net.ipv4.tcp_fin_timeout = 30 对于只在本地使用的数据库服务器,
可以缩短tcp保持状态的超时时间、默认1分钟
|
七、选择磁盘队列的调度策略 (noop,deadline,,anticipatory,cfg(默认))
mysql,oracle最好的的选择是deadline
1
2
3
4
5
6
7
|
[root@mysql-master ~]# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
#echo deadline > /sys/block/sda/queue/scheduler 临时修改为deadline
[root@mysql-master ~]# cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
永久修改方式:http://www.2cto.com/os/201307/228389.html
|
八、线程
1
|
新版的mysql默认都使用了新的原生的POSIX线程库(NPTL)
|
九、虚拟机内存
1
|
虚拟内存是一个很糟糕的问题,可以使用vmstat 来监控内存交换,最好查看si,so,列报告内存的交换I/O活动,太多的内存交换很可能导致操作系统的交换空间溢出。甚至有些人完全禁用交换文件,这样其实不仅降低了操作系统的性能,而且还是很危险,因为禁用了内存交换就相当于给内存设置了一个不可动摇的限制,如果mysql需要很大的一块内存,或者耗内存的进程在同一台机器,mysql可能溢出,奔溃,或者被杀死。所以,操作系统会对内存的I/O进行一些控制,告诉内核,虚拟内存完全满了,否咋不要使用交换分区
|
1
2
3
4
|
cat
/proc/sys/vm/swappiness
操作系统默认为0
60
但是对于服务器来说,这个值是很糟糕的,服务器应该设置为 0
echo
0 >
/proc/sys/vm/swappiness
|
十、操作系统的状态
1
2
3
|
vmstat 可以查看服务器的状态,是CPU密集型还是I/O密集型
CPU密集型 进程队列有等待(R),us ,sy 列有很高的值
I/O密集型 很多处理器在非中断的休眠(b列),而且wa这一列值很高
|
本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1734631,如需转载请自行联系原作者