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磁盘组不在讨论范围内

时间: 2024-10-21 09:19:25

mysql第三篇文章~关于linux服务器本身的优化问题的相关文章

浅析RAC下SPFILE文件修改之整理三篇文章

关于RAC下spfile浅析_整理于_2014.4.17 第一篇:RAC下SPFILE文件修改 在RAC下spfile位置的修改与单节点环境不完全一致,有些地方需要特别注意,否则可能修改会失败. 下面用一个例子说明:SPFILE放在ASM中一个不正确的目录(+ARCH)中,现在想把它放在另外一个目录(+DBSYS)下. 以下是具体步骤: 1. 原spfile位置 SQL> show parameter spfile NAME TYPE VALUE ------------------------

三篇文章带你极速入门php(三)之php原生实现登陆注册

看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥见一般php开发的样子了.不过,low的地方区别提前说一下: 这个是多入口,一般程序都是单入口,单入口就是统一通过index.php进入,然后再引入其他文件,调用其代码,多入口就是每次通过不同文件进入(比如一会展示的login.php和register.php) 保留登陆信息用的是session,现在普遍

C++ crash 堆栈信息获取(三篇文章)

最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android工程,这个时候dump文件没有了优势,那么只能在程序 creash时把内存信息打印出来,获取输出到文件中.    下面讲述下我在做堆栈信息获取时的一些经验: 文章1:在Windows下如何在程序中获得当前调用栈信息文章2:让程序在崩溃时体面的退出之Dump文件文章3:让程序在崩溃时体面的退出之Cal

Linux服务器性能与优化(二)

五.Oracle在Linux下的性能优化 Oracle数据库内存参数的优化 与oracle相关的系统内核参数 SGA.PGA参数设置 Oracle下磁盘存储性能优化 文件系统的选择(ext2/ext3.xfs.ocfs2) Oracle  ASM存储 1.优化oracle性能参数之前要了解的情况 1)物理内存有多大 2)操作系统估计要使用多大内存 3)数据库是使用文件系统还是裸设备 4)有多少并发连接 5)应用是OLTP类型还是OLAP类型 2.oracle数据库内存参数的优化 (1)系统内核参

mysql 第十七篇文章~mycat的读写分离

一 简介 今天咱们来聊聊mycat的一个功能 读写分离二 前沿: mycat的核心功能之一,读写分离的测试三    1读写分离的需求     1 将业务的读需求定向到从库去查询,减轻主库压力     2 将业务的特殊读需求定向到主库去查询   2 读写分离要考虑的问题    1 当从库出现问题时踢出有问题的从库(从库down机或者复制停止)    2 当从库出现延迟时踢出有问题的从库(单个从库延迟),但是当从库正常时,从库节点从新提供读服务    3 当所有提供读取的从节点的从库出现问题时,查询

三篇文章带你极速入门php(一)之语法

本文适合阅读用户 有其他语言基础的童鞋 看完w3cschool语法教程来回顾一下的童鞋(传送门,想全面看一下php语法推荐这里) 毫无基础然而天资聪慧颇有慧根(不要左顾右看说的就是你,老夫这里有一本<php从入门到放弃>,观你根骨清奇10两银子卖给你如何) 看完本文后你会收获到什么 php的变量的定义,使用 函数的定义,使用,传递参数 数组的定义,调用,常用方法,使用场景 php中循环,判断,选择结构的语法 类的定义,成员变量和成员函数的定义和使用 相信我,认真看完本文,你就已经掌握了php常

第三篇文章

太阳落山,山林中光线变暗,显得很幽森,暗中有一双双眼睛盯着.血气散发,引来了一些猛兽,还好是在外围区域,没有特别可怕的凶兽. "嗷--" 一头斑纹虎虫窜来,花纹的躯体像只染了色的大蚕,能有五六米长,长着一个虎头,凶猛而狰狞,这条大虫闻到了太古真血的气味,想对狻猊的宝体咬上一口. 噗! 小不点掷出铁矛,直接没入了它的头颅中,一声惨叫,血液溅起,斑纹虎虫满地翻滚,不久后绝了性命. 无声无息,一条水桶粗的飞蟒从一座石崖上扑杀了下来,展开双翅,腥风扑鼻,快要到近前时张开血盆巨口就咬. &quo

详解MySQL第三篇—DCL语句

DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句.这些语句定义了数据库.表.字段.用户的访问权限和安全级别.主要的语句关键字包括 grant.revoke 等. DCL 语句主要是 DBA 用来管理系统中的对象权限时所使用,一般的开发人员很少使用.下面通过一个例子来简单说明一下. 创建一个数据库用户 z1,具有对 sakila 数据库中所有表的 SELECT/INSERT 权限: 1 2 3 4 5 6 7 8 9 10 11

mysql第四篇文章~关于锁的那点事

一 简介:遇到被人请教了一个并行更新锁的问题,让我纠结了好一阵子,后来请教了高人,终于想通. 二 实验: CREATE TABLE `test1` (    `ID` varchar(36) NOT NULL COMMENT 'ID',    `NAME` varchar(36) DEFAULT '',   `STATUS` varchar(10) DEFAULT NULL,   `PID` varchar(36) DEFAULT NULL COMMENT '父级ID',    PRIMARY