数据库服务器操作系统,数据库服务器之操作系统优化

1 关闭透明大页面

透明大页会导致oracle节点重启和其他问题,对rac和单机都有效

透明大页的默认设置,首先查看透明大页是否启用,[always] never表示已启用,always [never]表示已禁用

# cat /sys/kernel/mm/transparent_hugepage/enabled

[always] never  #启用

or

cat /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never

# grep AnonHugePages /proc/meminfo

AnonHugePages:      6144 kB

修改方法:

1.vi /etc/grub.conf  添加粗体

title Oracle Linux Server(2.6.32-300.25.1.el6uek.x86_64)

root (hd0,0)

kernel/vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/  transparent_hugepage=never

initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img

2.vi /etc/rc.local   添加下面的代码

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then

echo never >/sys/kernel/mm/transparent_hugepage/enabled

fi

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then

echo never >/sys/kernel/mm/transparent_hugepage/defrag

fi

the two methods need the syste reboot,and then you can use the following line to identify

# grep AnonHugePages /proc/meminfo

AnonHugePages:         0 kB

# cat /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]

2、关闭numa

查看当前numa的节点情况:

numactl --hardware

查看当前系统numa策略:

numactl --show

因为numa默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,

当某个CPU节点内存不足时,会导致swap产生,而不是从远程节点分配内存,这就是swap insanity现象。

MySQL服务器为什么需要关闭numa?

MySQL是单进程多线程架构数据库,当numa采用默认内存分配策略时,MySQL进程会被并且仅仅会被分配到numa的一个节点上去。

假设这个节点的本地内存为10GB,而MySQL配置20GB内存,超出节点本地内存部分(20GB-10GB)Linux会使用swap而不是使用其他节点的物理内存。

在这种情况下,能观察到虽然系统总的可用内存还未用完,但是MySQL进程已经开始在使用swap了。

如果单机只运行一个MySQL实例,可以选择关闭numa,关闭nuam有两种方法:

1.硬件层,在BIOS中设置关闭;

2.OS内核,启动时设置numa=off。

修改/etc/grub.conf文件,在kernel那行追加numa=off;

保存后重启服务器,再次检查numa只剩下一个节点就成功了:

# numactl --hardware

available: 1 nodes (0)

node 0 cpus: 0

node 0 size: 2047 MB

node 0 free: 1514 MB

node distances:

node   0

0:  10

Oracle 11g查看numa有关的参数:SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ

FROM SYS.x$ksppi x, SYS.x$ksppcv y

WHERE x.inst_id = USERENV ('Instance')

AND y.inst_id = USERENV ('Instance')

AND x.indx = y.indx

AND upper(x.ksppinm) like '%NUMA%';

NAME  VALUE   DESCRIB

---------------------------------------- ---------------------------------------- ----------------------------------------

_rm_numa_sched_enable      FALSE            Is Resource Manager (RM) related NUMA scheduled policy enabled

_NUMA_pool_size            Not specified    aggregate size in bytes of NUMA pool

_enable_NUMA_optimization  TRUE             Enable NUMA specific optimizations

_NUMA_instance_mapping     Not specified    Set of nodes that this instance should run on

_rm_numa_simulation_pgs    0                number of PGs for numa simulation in resource manager

_rm_numa_simulation_cpus   0                number of cpus per PG for numa simulation in resource manager

_db_block_numa             2                Number of NUMA nodes

三、选择deadline为默认的IO调度策略

IO调度策略有btrfs cfq, noop, deadline三

Deadline(截止时间调度程序)

特点:

通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序.

Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象.

Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.

在不同场景下选择不同的IO调度器:

在完全随机访问环境下,由于CFQ可能会造成小IO的相应延时增加,所以应设置为deadline,这样更稳定。

对于SSD设备,采用NOOP或者deadline也可以获取比默认调度器更好的性能。

查看当前系统支持的IO调度算法:

#  dmesg|grep -i scheduler

[    1.936159] io scheduler noop registered

[    1.936161] io scheduler deadline registered (default)

[    1.936178] io scheduler cfq registered

修当前块设备(/dev/sda)使用的IO调度算法,修改IO调度算法后直接生效:

echo "deadline">> /sys/block/sda/queue/scheduler

永久修改IO调度算法,可以通过修改内核引导参数,增加elevator=调度算法:

kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=28d9f713-f49d-49ae-9e63-401986d11ab2 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet numa=off elevator=deadline transparent_hugepage=never

验证:

重启之后,查看调度方法:

cat /sys/block/sda/queue/scheduler

4、交换分区设置

swappiness是Linux的一个内核参数,用户控制Linux物理内存进行swap页交换的相对权重,尽量减少系统的页缓存被从内存中清除的情况。取值范围是0~100,vm.swappiness的值越低,Linux内核会尽量不进行swap交换页的操作,vm.swappiness的值越高,Linux会越多的使用swap空间。Linux系统默认值是60,当系统需要内存时,有60%的概率使用swap。对于大多数桌面系统,设置为100可以提高系统的整体性能;对于数据库应用服务器,设置为0,可以提高物理内存的使用率,进而提高数据库服务的响应性能。

# vim /etc/sysctl.conf

vm.swappiness=0

sysctl -p 生效

# sysctl -a|grep swap

vm.swappiness = 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值