mysql案例~关于linux服务器本身的优化问题
简介:mysql服务优化分为 1服务器本身的优化 2mysql本身的性能优化 今天咱们来讨论下服务器本身的优化性能
一 参数的优化简介
1 文件系统的选择
Linux 常用文件系统:
ext3, ext4, XFS, ReiserFS, JFS
其中最常用的是 ext4, XFS。非常不建议用低于ext4版本的文件系统。主流默认是ext4
2 IO调度算法
noop anticipatory deadline cfg四中算法 下面会分别介绍
1)CFQ(完全公平排队I/O调度程序)
CFQ的出发点是对IO地址进行排序,以尽量少的磁盘旋转次数来满足尽可能多的IO请求。在CFQ算法下,SAS盘的吞吐量大大提高了。但是相比于NOOP的缺点是,先来的IO请求并不一定能被满足,可能会出现饿死的情况。
可以看出 并不是按照先后请求的顺序来进行处理,你可以想象成基于成本花销
2)NOOP(电梯式调度程序)
该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺序进行操作。之所以说“大致”,原因是NOOP在FIFO的基础上还做了相邻IO请求的合并,并不是完完全全按照先进先出的规则满足IO请求。可以看出 大体是按照顺序IO处理,然后可能会实时的合并 相邻IO
3)Deadline(截止时间调度程序)
DEADLINE在CFQ的基础上,解决了IO请求饿死的极端情况。除了CFQ本身具有的IO排序队列之外,DEADLINE额外分别为读IO和写IO提供了FIFO队列。读FIFO队列的最大等待时间为500ms,写FIFO队列的最大等待时间为5s。FIFO队列内的IO请求优先级要比CFQ队 列中的高,,而读FIFO队列的优先级又比写FIFO队列的优先级高。优先级可以表示如下:
FIFO(Read) > FIFO(Write) > CFQ 可以看出 这种算法会优先处理读IO和写IO
Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.
4)AS(预料I/O调度程序)
CFQ和DEADLINE考虑的焦点在于满足零散IO请求上。对于连续的IO请求,比如顺序读,并没有做优化。为了满足随机IO和顺序IO混合的场景,Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上,为每个读IO都设置了6ms的等待时间窗 口。如果在这6ms内OS收到了相邻位置的读IO请求,就可以立即满足。
在传统的SAS盘上,CFQ、DEADLINE、ANTICIPATORY都是不错的选择;对于专属的数据库服务器,DEADLINE的吞吐量和响应时间都表现良好。然而在新兴的固态硬盘比如SSD、Fusion IO上,最简单的NOOP反而可能是最好的算法,因为其他三个算法的优化是基 于缩短寻道时间的,而固态硬盘没有所谓的寻道时间且IO响应时间非常短。
3 系统最大打开文件数
最大文件打开数与文件句柄有关,一旦打开的文件数(比如表文件)过多,会导致程式错误。所以提倡设置成最大打开数 65535
4 NUMA
NUMA的访问策略默认是local,优先使用本地内存,内存跟cpu 是有绑定的。numa会分配多个numa节点,数据库本身是很吃内存的,所以会导致单个numa节点内存很容易耗尽,内存不够时虚拟内存频繁与硬盘交换数据,导致性能急剧下降。而默认的测试是不允许从 其他numa节点获取内存的。这点对于mongodb服务尤其影响严重,可能会导致CPU暴涨。所以最好关闭NUMA
5 swap占用比
mysql对于服务器内存的使用要避免使用大量的swap空间,否则很容易造成性能问题。此参数的调节可以控制linux可能使用swap的频率,越小 代表越使用swap的频率会降低。但是注意设置了swappiness=0并不代表一定没有swap发生,同时设为0也确实会可能发生OOM。
6 文件缓存参数
dirty_ratio与dirty_background_ratio
简单来说就是刷新脏页比
1 当脏页所占的百分比(相对于所有可用内存,即空闲内存页+可回收内存页)达到dirty_background_ratio时,内核的flusher线程开始回写脏页数据。所有可用内存不等于总的系统内存。
2 脏页所占的百分比(相对于所有可用内存,即空闲内存页+可回收内存页)达到dirty_ratio时,执行磁盘写操作的进程会自己开始回写脏数据。所有可用内存不等于总的系统内存。
这两个参数并不矛盾,会先触发参数2 然后 如果系统脏页数量继续增长会触发参数1
二 脚本检测和建议
#!/usr/bin/python
 #coding=utf-8 
 import commands
 def zhixing(a,b,c):
 (status, output) = commands.getstatusoutput(a)
 print "######%s#######" %(b,)
 print output
 print "*******%s*******" %(c,)
 zhixing("df -Th|awk '{print $1,$2}'|grep -v 'tmpfs'","查看文件系统","建议data分区为xfs")
 zhixing("cat /sys/block/sda/queue/scheduler","查看IO调度算法","建议采用deadline算法,不要用cfg算法")
 zhixing("ulimit -a|grep 'open files'","查看文件打开数","建议设置为系统最大65535")
 zhixing("grep -i numa /var/log/dmesg","NUMA是否开启","强烈建议关闭NUMA")
 zhixing("sysctl -a | grep swappiness","swap占用比","建议值设置为1-10")
 zhixing("sysctl -a | grep dirty_ratio","dirty刷新脏页比1","设置为20比较好")
 zhixing("sysctl -a | grep dirty_background_ratio","dirty刷新脏页比2","设置为5-10比较好")
三 相关解决办法
1 如何关闭numa
1.硬件层,在BIOS中设置关闭;
2.OS内核,启动时设置numa=off;
3.可以用numactl命令将内存分配策略修改为interleave(交叉)
2 修改IO调度算法
echo 'deadline' > /sys/block/sdb/queue/scheduler
3 修改swap占用比
/etc/sysctl.conf
4 修改文件缓存参数
/etc/sysctl.conf
以上就是我对于linux参数优化的一些建议,对于硬件和raid磁盘组不在讨论范围内
mysql案例~关于linux服务器本身的优化问题的更多相关文章
- Linux 服务器 常规性能优化设置
		为能使linux服务器能最大化的工作,通常需要对linux的通常设置做适当的更改,而这又往往会依据服务器的类型不同,而有所变化. 对于通常的多连接的服务器其参数设置,可在 /etc/sysctl.co ... 
- linux服务器TCP并发连接数优化
		1.查看用户单一进程最大文件打开数 [root@localhost ~]# ulimit -n 1024 2.修改/etc/security/limits.conf文件,添加下面两行, [root@l ... 
- linux服务器ntp客户端配置【转】
		转自:https://www.cnblogs.com/kerrycode/archive/2015/08/20/4744804.html 在Linux系统中,为了避免主机时间因为在长时间运行下所导致的 ... 
- 高性能Linux服务器 第10章  基于Linux服务器的性能分析与优化
		高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ... 
- CentOS Linux下MySQL 5.1.x的安装、优化和安全配置
		下载页面:http://dev.mysql.com/downloads/mysql/5.1.html#downloads 到页面底部,找到Source downloads,这个是源码版本,下载第1个T ... 
- Linux服务器性能评估与优化
		一.影响务器性能因素 影响企业生产环境Linux服务器性能的因素有很多,一般分为两大类,分别为操作系统层级和应用程序级别.如下为各级别影响性能的具体项及性能评估的标准: (1)操作系统级别 内存: C ... 
- linux服务器分析优化
		转:http://jiekeyang.blog.51cto.com/11144634/1774473 一.系统性能分析 1.系统的性能是指操作系统完成任务的有效性.稳定性和响应速度.操作系统完成任务与 ... 
- 优化Linux内核参数/etc/sysctl.conf  sysctl  《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》
		优化Linux内核参数/etc/sysctl.conf sysctl <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ... 
- (二)阿里云ECS Linux服务器外网无法连接MySQL解决方法(报错2003- Can't connect MySQL Server on 'x.x.x.x'(10038))(自己亲身遇到的问题是防火墙的问题已经解决)
		我的服务器买的是阿里云ECS linux系统.为了更好的操作数据库,我希望可以用navicat for mysql管理我的数据库. 当我按照正常的模式去链接mysql的时候, 报错提示: - Can' ... 
随机推荐
- Oracle    在JDBC中使用   存储过程,包
			前提: 在Oracle中已经定义 存储过程 和 存储函数 和 包 导入了Oracle的JDBC jar 包 package demo; import java.sql.Connect ... 
- terminate called without an active exception异常
			在gcc4.4下,采用回调机制写了一个类似std::thread的线程类. 但是使用时却发生了核心已转移的错误. main函数调用的代码大致是 int main(int argc, char *arg ... 
- 踩过的坑—iphone手机H5样式兼容总结
			对一个前端开发者来说,最煎熬的莫过于"兼容"两个字了(说到这个词朋友们是不是身体一抖),哪怕对于工作多年的老油条来讲,也不是完全了解各种场景下的兼容性处理方法.在这里我就把我在工作 ... 
- Python加载声音
			对于音频的操作可以使用pygame包中的sound 和 music对象进行音乐播放. Sound对象适合处理较短的音乐,如OGG和WAV格式的音频文件. Music对象出来可以播放OGG.WAV音频外 ... 
- 解决docker多开mysql报错问题
			1.vim /etc/sysctl.conf fs.aio-max-nr=262144 重新加载 sysctl -p /etc/sysctl.conf 
- 1.1实战项目:电影周周看V1(初识小程序)
			第一小程序的实战项目: 覆盖的小程序技术: 讲解方式: 学习方法: 
- grovvy生成随机汉字名字
			StringBuilder sb = new StringBuilder(); for(int i = 0 ;i < 3; i++){ sb.append((char) (0x4e00 + (i ... 
- Java的一些基本术语
			1. 反射 获取类本身,就叫“反射”,有以下3种方式: // 通过“实例”获取类 String str = "hello"; Class cls1 = str.getClass() ... 
- reportgen :python生产pptx
			欢迎关注博主主页,学习python视频资源 https://www.cnblogs.com/gasongjian/p/8670925.html reportgen v0.1.8 更新介绍 这段时间,我 ... 
- 数据库基础SQL知识面试题一
			数据库基础SQL知识面试题一 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如标题所示,本篇博客主要介绍基础知识的面试题.大家可以用来测试面试者的技术水平,由于个人水平所限,难免 ... 
