内核相关参数
/etc/sysctl.conf
shmall和shmmax
shmall linux中设允许使用的最大共享内存
shmmax linux中单个段允许使用的最大内存
shmmax理论上可以说设置为物理内存-1字节大小.如果这个值设置太小会影响mysql的性能.对于oracle来说如果这个值设置小于sga+pga,可能会造成oracle启动不了.
shmall=(shmmax)/4k(getconf PAGESIZE可得到) getconf PAGESIZE获取内存页的大小
修改这个值位于/etc/sysctl.conf文件中.想使这个修改的值生效除了通过使用重启系统外还可以通过以下命令:
##系统生效命令
sysctl -p
###查看系统值
ipcs -l
###查看实际使用情况
ipcs -u
vm.swapness
这个参数涉及Linux对swap分区的使用.vm.swapness设置为0时,使得linux最大限度的使用物理内存.当物理内存不足时再使用swap分区.设置为100时,表示积极使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。centos的基本默认设置为30
[root@master etc]# cat /proc/sys/vm/swappiness
30
100-30=70%.当内存空间使用70%时,linux开始使用swap分区.当系统开始使用swap分区时候,mysql的性能将会受到很大的影响.建议将这个值设置为0,这个值得也是在/etc/sysctl.conf文件中.
/etc/security/limits.conf
* soft noprofile 65536
* hard noprofile 65536
* 所用用户都生效
soft和hard分别表示软限制和硬限制.soft是指当前系统生效设置, hard系统中所能设定的最大值
noprofile 可打开的最大的文件描述符
对应的其他参数可参考/etc/security/limits.conf文件中的说明
磁盘调度算法的选择
磁盘的调度算法有cfq(公平调度),noop,deadline,anticipatory
noop
NOOP算法的全写为No Operation。该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺序进行操作。之所以说“大致”,原因是NOOP在FIFO的基础上还做了相邻IO请求的合并,并不是完完全全按照先进先出的规则满足IO请求。
假设有如下的io请求序列:
100,500,101,10,56,1000
NOOP将会按照如下顺序满足:
100(101),500,10,56,1000
cfq(默认的磁盘调度算法)
CFQ算法的全写为Completely Fair Queuing。该算法的特点是按照IO请求的地址进行排序,而不是按照先来后到的顺序来进行响应。
假设有如下的io请求序列:
100,500,101,10,56,1000
CFQ将会按照如下顺序满足:
100,101,500,1000,10,56
在传统的SAS盘上,磁盘寻道花去了绝大多数的IO响应时间。CFQ的出发点是对IO地址进行排序,以尽量少的磁盘旋转次数来满足尽可能多的IO请求。在CFQ算法下,SAS盘的吞吐量大大提高了。但是相比于NOOP的缺点是,先来的IO请求并不一定能被满足,可能会出现饿死的情况。
DEADLINE
DEADLINE在CFQ的基础上,解决了IO请求饿死的极端情况。除了CFQ本身具有的IO排序队列之外,DEADLINE额外分别为读IO和写IO提供了FIFO队列。读FIFO队列的最大等待时间为500ms,写FIFO队列的最大等待时间为5s。FIFO队列内的IO请求优先级要比CFQ队列中的高,,而读FIFO队列的优先级又比写FIFO队列的优先级高。优先级可以表示如下:
FIFO(Read) > FIFO(Write) > CFQ
ANTICIPATORY
CFQ和DEADLINE考虑的焦点在于满足零散IO请求上。对于连续的IO请求,比如顺序读,并没有做优化。为了满足随机IO和顺序IO混合的场景,Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上,为每个读IO都设置了6ms的等待时间窗口。如果在这6ms内OS收到了相邻位置的读IO请求,就可以立即满足。
对应磁盘io的调度算法保存在/sys/block/
echo > /sys/block/devname/queue/scheduler
##数据库中建议使用DEADLINE调度算法
文件系统
Linux文件系统主要ext3,ext4,xfs几种类型的文件系统.其中xfs的文件系统的性能据传说大于ext3和ext4这两类文件系统.文件系统相关配置在/etc/fstab文件夹中.系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。
文件系统示例
#
# /etc/fstab
# Created by anaconda on Sun Oct 15 15:19:00 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=eb448abb-3012-4d8d-bcde-94434d586a31 / ext4 defaults 1 1
UUID=c0ae5412-80c2-4576-9ad2-ee927aab8dc9 /spiderData ext4 defaults 1 2
UUID=ff658182-13b5-4d66-80ab-8bef7177e96f /wikiData ext4 defaults 1 2
UUID=a7bae13a-16e2-4290-a4b2-97558d48750e /docker ext4 defaults 1 2
UUID=ad4ae494-b010-40c6-8b0b-5a68034a2b9f /dockertemp ext4 defaults 1 2
字段定义
/etc/fstab 文件包含了如下字段,通过空格或 Tab 分隔:
auto - 在启动时或键入了 mount -a 命令时自动挂载。
noauto - 只在你的命令下被挂载。
exec - 允许执行此分区的二进制文件。
noexec - 不允许执行此文件系统上的二进制文件。
ro - 以只读模式挂载文件系统。
rw - 以读写模式挂载文件系统。
user - 允许任意用户挂载此文件系统,若无显示定义,隐含启用 noexec, nosuid, nodev 参数。
users - 允许所有 users 组中的用户挂载文件系统.
nouser - 只能被 root 挂载。
owner - 允许设备所有者挂载.
sync - I/O 同步进行。
async - I/O 异步进行。
dev - 解析文件系统上的块特殊设备。
nodev - 不解析文件系统上的块特殊设备。
suid - 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。
nosuid - 禁止 suid 操作和设定 sgid 位。
noatime - 不更新文件系统上 inode 访问记录,可以提升性能(参见 atime 参数)。
nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。
defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw, suid, dev, exec, auto, nouser, async.
relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。
flush - vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。