MySQL数据库部署linux参数调整
为了使MySQL数据库获得最佳性能,需要正确定义操作系统参数。如果操作系统内核参数配置不当,可能会导致数据库服务器性能下降。因此,必须根据数据库服务器及其工作负载配置这些参数。主要是指在Linux系统中针对业务服务应用而进行的系统内核参数调整。
基本系统中的兼容程序库一定打开,继承UNIX兼容性一定打上。数据库全部取消。系统管理-系统管理选择上桌面都选择上不能选择(KDE桌面-因为和通用桌面有冲突)-应用程序把浏览器选择上。开发全选。语言把中文和英文都选择上。
[root@localhost yum.repos.d]# cat /etc/yum.repos.d/iso.repo
[iso6.9]
name=iso6.9
baseurl=file:///iso6.9
gpgcheck=0
enabled=1
SELINUX=disabled
[root@localhost yum.repos.d]# setenforce 0
[root@localhost yum.repos.d]# getenforce
Permissive
echo "192.168.198.134 mysql5.7" >>/etc/hosts
numa把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间是通过互联模块进行连接和信息交互。因此节点的所有内存对于本节点所有的CPU都是等同的,对于其他节点中的所有CPU都不同。因此每个CPU可以访问整个系统内存,但是访问本地节点的内存速度最快(不经过互联模块),访问非本地节点的内存速度较慢(需要经过互联模块),即CPU访问内存的速度与节点的距离有关,该距离成为Node Distance。
MySQL服务器为什么需要关闭numa?
MySQL是单进程多线程架构数据库,当numa采用默认内存分配策略时,MySQL进程会被并且仅仅会被分配到numa的一个节点上去。假设这个节点的本地内存为10GB,而MySQL配置20GB内存,超出节点本地内存部分(20GB-10GB)Linux会使用swap而不是使用其他节点的物理内存。在这种情况下,能观察到虽然系统总的可用内存还未用完,但是MySQL进程已经开始在使用swap了。
在/etc/grub.conf的kernel一行后添加了numa=off,重启服务器后果然问题被解决。
Linux I/O 调度器是Linux内核中的一个组成部分,用户可以通过调整这个调度器来优化系统性能。本文首先介绍Linux I/O 调度器的结构,然后介绍如何根据不同的存储器来设置Linux I/O 调度器从而达到优化系统性能。
CFQ完全公平队列,比较适合于交互式场景
Deadline 最后期限,任何一个读写请求,都有自己的满足期限,当期限到来时之前,必须达到需求的满足(一般建议在数据库服务器上使用此调度算法)
anticpatory 预期的,任何一个数据读完之后,有可能与其相邻的数据也可能被读到,所以它大致所实现的方法就是,读完之后先不满足,则不处理,需等一段时间后查看是否有相近数据访问过,如果有马上先满足,所以这只能在行为预估的场景下可用
Noop 固态硬盘 推荐使用
查看当前系统支持的I/O调度器
dmesg | grep -i scheduler
--I0调度算法
cat /sys/block/sd*/queue/ scheduler
--sas/stat
echo ' deadline' > /sys/block/sd*/queue/scheduler
-- ssd
echo 'N0OP' > /sys/block/sd*/queue/scheduler
--减少预读
echo '16' > /sys/block/sd* /queue/read_ahead_kb
--增大队列
echo '512' > /sys/block/sd*/queue /nr_requests
--开启后生效
vi /etc/rc.local
echo '512' > /sys/block/ sdb/queue/nr_requests
echo '512' > /sys/block/ sdc/ queue/nr_requests
内核参数vm.swappiness控制换出运行时内存的相对权重,参数值大小对如何使用swap分区有很大联系。值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。默认值swappiness=60,表示内存使用率超过100-60=40%时开始使用交换分区。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间;swappiness=100的时候表示积极使用swap分区,并把内存上的数据及时搬运到swap空间。(网上有的说,对于3.5以后的内核和RedHat 2.6.32之后的内核,设置为0会禁止使用swap,从而引发out of memory,这种情况可以设置为1。)
需要根据服务器运行的程序类型,来设置不同的参数值。例如,对于Oracle一般设置为10;对于MySQL一般设置为1,尽可能不用swap分区。
vim /etc/sysctl. conf
vm.swappiness=10
vm.min_free_kbytes=51200
#vm.min_free_kbytes= 512000 -- 生产环境
linux资源限制配置文件是/etc/security/limits.conf;限制用户进程的数量对于linux系统的稳定性非常重要。limits.conf文件限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量。/etc/security/limits.conf 配置文件可限制文件打开数,系统进程等资源,在/etc/security/limits.d/90-nproc.conf文件配置中写的最大用户进程数是受配置上限影响的。
ulimit -a 是所有显示的资源
vim /etc/security/limits.conf
noproc 是代表最大进程数
nofile 是代表最大文件打开数
stack - max stack size (KB) 最大栈大小
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* soft stack 65535
* hard stack 65535
vim /etc/security/limits.d/90-nproc.conf
* - nproc 65535
所有用户 soft/hard