当前位置: 首页 > 科技观察

一篇了解数据库服务器应该做的优化工作的文章

时间:2023-03-14 18:56:37 科技观察

概述了一般数据库服务器应该做的一些优化。这里不涉及数据库层面,只考虑服务器监控和优化。1、系统级监控主要集中在以下三点。1.1.对于cpu:vmstat,sar,top+P,htop,nmon,mpstat1.2,memory:free,ps-aux,top+M1.3,IOdevice(disk,network):iostat,ss,netstat,iptraf,iftop,lsof补充:vmstat命令说明:procs:r显示有多少进程在等待CPU时间。b显示处于不可中断睡眠状态的进程数。WaitingforI/OMemory:swpd显示交换到磁盘的数据块数。Unuseddatablocks,userbuffer数据块,操作系统使用的数据块数Swap:操作系统每秒从磁盘交换到内存,从内存交换到磁盘的数据块数。s1和s0最好为0Io:每秒从设备b1读取到设备b0的数据块数。反映磁盘I/O系统:显示每秒中断(in)和上下文交换(cs)的数量Cpu:显示用于运行用户代码、系统代码、空闲、等待I/O的CPU时间iostat命令描述示例命令:iostat-dk15iostat-d-k-x5(检查设备使用率(%util)和响应时间(await))tps:设备每秒传输的次数。“传输”是指“I/O请求”。多个逻辑请求可以组合成“一个I/O请求”。iops:硬件出厂时,厂商定义了每秒最大IO数,“一次传输”请求的大小是未知的。kB_read/s:每秒从设备(驱动表示)读取的数据量;KB_wrtn/s:每秒写入设备(驱动表示)的数据量;kB_read:读取的数据总量;kB_wrtn:写入的数据总量;这些单位是千字节。2、系统层面问题的解决方案在实际生产中,一般认为只要CPU不超过90%就没有问题。当然,也不能排除以下特殊情况:2.1.CPU负载高,IO负载低,内存不足,磁盘性能差SQL问题------>到数据库层进一步检查sql问题IO问题(磁盘很关键,raid设计不好,raid降级,lock,单位时间内tps过高)tps过高:大量小数据IO,大量全表扫描2.2,高IO负载,低cpu负载大量小IO写操作:autocommit,IO/PS磁盘的固定值,硬件出厂时,厂商定义的最大每秒IO次数。大量大IO写操作大概率出现SQL问题2.3。IO和CPU负载高。硬件不够或者SQL有问题。容量选择、磁盘选择平衡内存和磁盘资源随机I/O和顺序I/O主机RAID卡BBU(BatteryBackupUnit)关闭3.2、cpu选择:cpu的两个关键因素:核心数、主频根据不同选择业务类型:cpu-intensive:计算量多,OLTPCPU频率高,核数多IO-intensive:查询比较,OLAP核数多,频率不一定高3.3、内存选择:OLAP类型的数据库需要更多的内存,这与数据采集量级有关。对于OLTP类型的数据,一般内存是CPU核数的2~4倍,没有最佳实践。3.4.存储:根据存储数据的不同类型,选择不同的存储设备,配置合理的RAID级别(raid5、raid10、热备盘)。对于操作系统,无需特别选择。冗余好(raid1)(ssd、sas、sata)3.5、raid卡:主机raid卡选择:实现操作系统磁盘冗余(raid1)平衡内存和磁盘资源随机I/O和顺序I/O主机BBU(BatteryRAID卡的BackupUnit)应该关闭。3.6.网络设备:使用流量来支撑更高的网络设备(交换机、路由器、网线、网卡、HBA卡)注:以上规划应该在系统初始设计时考虑一下。4、操作系统优化CPU:基本上不用调整,在硬件选择上下功夫即可。内存:基本不用调整,在硬件选择上下功夫即可。SWAP:MySQL尽量避免使用交换。阿里云服务器默认的swap是0IO:raid,nolvm,ext4orxfs,ssd,IO调度策略Swap调整(不使用swap分区)这个参数决定Linux倾向于使用swap还是释放文件系统缓存。在内存紧张的情况下,该值越低,越有可能释放文件系统缓存。当然这个参数只能降低使用swap的概率,并不能阻止linux使用swap。修改MySQL配置参数innodb_flush_method,开启O_DIRECT模式。这种情况下,InnoDB的bufferpool会直接绕过文件系统缓存访问磁盘,但是重做日志还是会使用文件系统缓存。值得注意的是,Redolog是覆盖模式,即使使用了文件系统的缓存,也不会占用太多。5.系统参数调整Linux系统内核参数优化:vim/etc/sysctl.confnet.ipv4.ip_local_port_range=102465535#userportrangenet.ipv4.tcp_max_syn_backlog=4096net.ipv4.tcp_fin_timeout=30fs.file-max=65535#systemmaximum文件句柄,控制最大可打开文件数用户限制参数:vim/etc/security/limits.conf*softnproc65535*hardnproc65535*softnofile65535*hardnofile655356,独立应用优化业务应用和数据库应用,防火墙:iptables,selinux,etc.其他无用服务(关闭):chkconfig--level23456acpidoffchkconfig--level23456anacronoffchkconfig--level23456autofsoffchkconfig--level23456avahi-daemonoffchkconfig--level23456bluetoothoffchkconfig--level23456cupsoffchkconfig--level23456firstbootoffchkconfig--level23456haldaemonoffchkconfig--level23456hplipoffchkconfig--level23456ip6tablesoffchkconfig--level23456iptablesoffchkconfig--level23456isdnoffchkconfig--level23456pcscdoffchkconfig--level23456sendmailoffchkconfig--level23456yum-updatesdoff