且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

mysql操作系统和硬件的优化

更新时间:2022-09-17 09:51:23

                 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,如需转载请自行联系原作者