介紹一下一般資料庫伺服器應該做的一些優化,這裡不涉及資料庫層面,只考慮伺服器監控和優化方面。
主要關注以下三點。
1.1、cpu方面:
vmstat、sar 、top+P、htop、nmon、mpstat
1.2、內存:
free 、ps -aux 、top+M
1.3、IO 設備(磁碟、網絡):
iostat 、 ss 、 netstat 、 iptraf、iftop、lsof
補充:
vmstat 命令說明:
iostat 命令說明實例命令: iostat -dk 1 5
iostat -d -k -x 5 (查看設備使用率(%util)和響應時間(await))
在實際的生產中,一般認為 cpu 只要不超過 90% 都沒什麼問題 ,當然不排除下面這些特殊情況:
2.1、cpu 負載高,IO 負載低
2.2、IO 負載高,cpu 負載低
2.3、IO 和 cpu 負載都很高
硬體不夠了或 SQL 存在問題
3.1、主機方面:
3.2、cpu 的選擇:
3.3、內存的選擇:
3.4、存儲方面:
3.5、raid 卡:主機 raid 卡選擇:
3.6、網絡設備方面:
使用流量支持更高的網絡設備(交換機、路由器、網線、網卡、HBA 卡)
注意:以上這些規劃應該在初始設計系統時就應該考慮好。
Cpu:
基本不需要調整,在硬體選擇方面下功夫即可。
內存:
基本不需要調整,在硬體選擇方面下功夫即可。
SWAP:
MySQL 儘量避免使用 swap。阿里雲的伺服器中默認 swap 為 0
IO :
這個參數決定了 Linux 是傾向於使用 swap,還是傾向於釋放文件系統 cache。在內存緊張的情況下,數值越低越傾向於釋放文件系統 cache。當然,這個參數只能減少使用 swap 的機率,並不能避免 Linux 使用 swap。
修改 MySQL 的配置參數 innodb_flush_method,開啟 O_DIRECT 模式。這種情況下,InnoDB 的 buffer pool 會直接繞過文件系統 cache 來訪問磁碟,但是redo log 依舊會使用文件系統 cache。值得注意的是,Redo log 是覆寫模式的,即使使用了文件系統的 cache,也不會占用太多。
Linux 系統內核參數優化:
vim /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65535 # 用戶埠範圍
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_fin_timeout = 30
fs.file-max=65535 # 系統最大文件句柄,控制的是能打開文件最大數量
用戶限制參數:
vim /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
業務應用和資料庫應用獨立,防火牆:iptables、selinux 等其他無用服務(關閉):
chkconfig --level 23456 acpid off
chkconfig --level 23456 anacron off
chkconfig --level 23456 autofs off
chkconfig --level 23456 avahi-daemon off
chkconfig --level 23456 bluetooth off
chkconfig --level 23456 cups off
chkconfig --level 23456 firstboot off
chkconfig --level 23456 haldaemon off
chkconfig --level 23456 hplip off
chkconfig --level 23456 ip6tables off
chkconfig --level 23456 iptables off
chkconfig --level 23456 isdn off
chkconfig --level 23456 pcscd off
chkconfig --level 23456 sendmail off
chkconfig --level 23456 yum-updatesd off
覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~