当前位置: 首页 > Linux

MySQL性能优化(一)

时间:2023-04-06 23:23:33 Linux

MySQL是一个开源的小型关系型数据库,也是目前使用最广泛的。最近学习了MySQL的性能调优,感觉接触到了很多以前不懂的东西。这些优化应该是很实用的,所以打算写一个系列的博客来整理一下。CentOS系统参数优化众所周知,Mysql在各大操作系统上都可以安装,尤其是很多个人开发者喜欢把开发放在windows上,但实际上所有的线上项目都需要部署在服务器上。虽然Windows也可以作为服务器使用,但实际应用较少,多采用基于Linux的CentOS系统。原因自然是稳定性和安全性高,而且CentOS也是一款免费的操作系统。所以这里针对MySQL性能进行CentOS系统参数的优化。内核相关参数内核相关参数修改/etc/sysctl.conf中的网络相关参数1.这个参数决定了每个端口的最大监听队列的长度。这个值默认比较小,对于负载比较大的服务器肯定是不够的,一般要调到2048以上,视具体情况而定。net.core.somaxvconn=655352。当每个网络接口接收数据包的速度快于内核处理数据包的速度时,允许发送到队列的最大数据包数。net.core.netdev_max_backlog=655353尚未连接队列中可以保存的最大请求数。超过这个数量的数据包将被丢弃。如果TCP连接被完全占用,则会发生数据库连接错误。这就是为什么有些网站被ddos攻击后会出现数据库连接错误的原因。net.ipv4.tcp_fin_timeout=10net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=15.设置TCP连接的默认值和最大值,接收和发送缓冲区大小net.core.wmem_default=87380net.core.wmem_max=16777216网。core.rmem_default=87380net.core.rmem_max=167772166设置TCP开始发送keepalive探测报文的时间间隔。单位为秒,用于检测TCP连接是否有效。net.ipv4.tcp_keepalive_time=1207.发送两次TCPkeepalive检测包的间隔net.ipv4.tcp_keepalive_intvl=308.设置在keepalive检测包失败前允许发送的最大keepalive检测包数。net.ipv4.tcp_keepalive_probes=3内存相关参数1.设置单个共享内存段的最大值kernel.shmmax=4294967295ps:这个参数要设置得足够大,以容纳一个共享内存下整个Innodb缓冲池的大小部分。对于64位linux系统,这个值的最大值是物理内存值-1字节。推荐值大于物理内存的一半。通常,该值大于Innodb缓冲池的大小。2.控制除非Linux内核的虚拟内存已满,否则不要使用交换区。vm.swappiness=0ps:Linux系统安装时存在系统交换分区,当操作系统内存不足时,会向磁盘的交换区写入一些虚拟内存。这样就会发生内存交换,影响MySQL的性能。但是,如果swap分区被禁用,操作系统的性能会降低,很容易造成内存溢出而崩溃,或者所有的进程都会被操作系统强行关闭,所以这个设置可以保证最好。添加资源限制这个修改文件/etc/security/limit.conf1。controlopenfilelimit*softnofile65535*hardnofile65535ps:这个直接加在limit.conf文件的末尾。*表示对所有用户有效,soft是指在当前系统中有效的设置,hard表示系统中可以设置的最大值,nofile表示限制资源是最大打开文件数,65535是限量的。最后这个文件的修改需要重启才能生效。磁盘调度策略直接在命令行输入1.选择deadline策略比较好,然后看命令echodeadline>/sys/block/devname/queue/schedulerfilesystemconfigurationEXT3/4systemmountparameters这里修改/etc/fstab/dev/ada1/ext4noatime,nodiratime,data=writeback11ps:writeback表示写入日志时原始数据和当前数据不同步,noatime,nodiratime表示文件的访问时间和读取目录的时间禁止记录,可以减少写操作。第一次mysql性能调优先到这里。第一个传奇'blog