参考 #深入浅出MYSQL#
--后记
呃,不得不说,我用500W数据测试了下:发现 “
调整I/O调度算法”有轻微的改善,后面其他的没有任何改变。
当然 vm.swappiness=0 这个参数还是非常有必要的。
1、使用raid
2、调整I/O调度算法
*MYSQL数据库环境建议使用Deadline
查看: more /sys/block/sda/queue/scheduler
临时修改:echo "deadline" >/sys/block/
sda/queue/scheduler
永久修改:vi /boot/grub/menu.list
kernel /boot/vmlinuz-2.8.18-308.e15 ro root=LABEL=/ elevatro=deadline
3、raid 卡缓存
*通过MegaCli64 -LDInfo -Lall -aAll 命令查看当前raid 卡设置的缓存策略
*通过MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL 查看RAID 开的BBU 的状态
4、NUMA架构优化
*numactl --hardware 显示当前NUMA的节点情况
*numactl --show 查看当前系统NUMA策略,默认是优先在进程所在CPU的本地分配内存,会导致CPU节点间内存分配不均衡,当某个CPU节点内存不足时,会导致SWAP的产生,而不是从远程节点分配内存,这就是Swap Insanity 现象
MYSQL 对NUMA的架构特性支持不好,如果单机只运行一个MySQL实例,可以选择关闭NUMA,有两种方式:
*硬件层:在BIOS中设置关闭
*OS内核,启动时设置numa=off
修改/etc/grub.conf文件,在 kernel 那行追加 numa=off
保存后重启服务器,numactl --hardware 如果只剩下一个节点就成功了
*或者修改 mysql_safe的启动脚本,添加 cmd="/usr/bin/numactl --interleave all $cmd" 一行即可。
修改mysqld_safe,在cmd="$NOHUP_NICENESS"后添加如下信息
cmd="/usr/bin/numactl --interleave all $cmd"
以下参考
http://blog.c1gstudio.com/archives/1260
减少预读,默认128
echo ’16’ > /sys/block/sda/queue/read_ahead_kb
增大队列,默认128
echo ‘512’ > /sys/block/sda/queue/nr_requests
尽量不使用交换区,默认60
echo ‘0’ > /proc/sys/vm/swappiness
开机运行
vi /etc/rc.local
-
echo 'deadline' > /sys/block/sdb/queue/scheduler
-
echo '16' > /sys/block/sda/queue/read_ahead_kb
-
echo '512' > /sys/block/sda/queue/nr_requests
vi /etc/sysctl.conf
阅读(921) | 评论(0) | 转发(0) |