ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL|数据库|MySQL数据库的Sleep进程过多的处理方式 [打印本页]

作者: 科技颠覆者    时间: 2024-9-3 19:21
标题: MySQL|数据库|MySQL数据库的Sleep进程过多的处理方式
前言:

MySQL数据库是和别的的关系型数据库基本一样,开箱了就能用,但性能方面还需要仔细的设置,末了才能完全的发挥它的性能,也需要相关服务的开辟遵循数据库的开辟规范,例如,减少大事件,尽量使用短连接,常用查询使用缓存技术,连接池扩展,读写分离,读写负载均衡等等技术,而这些技术通常是根据业务量来选择的,并不是用上就会提拔性能,究竟鞋子符合不符合,只有穿过了才知道。
那么,没有优化大概优化较少的情况下,MySQL轻易出现Sleep进程过多的问题,这些进程会挤占MySQL数据库所在的操纵体系的内存,导致体系的运行痴钝,当然了。数据库的查询,插入等等使用效率也会有所降低,严重的甚至会导致连接数据库的业务停止。

MySQL中的Sleep进程过多是一个常见的数据库维护问题,它通常指的是很多数据库连接处于空闲状态(Sleep状态),这些连接虽然没有实验任何实际操纵,但仍占用了服务器的资源(如内存、线程等)。以下是处理MySQL中Sleep进程过多的一些步调和建议:
总之,针对MySQL Sleep进程过多的问题,核心思绪是找生产生这些空闲连接的原因,从应用步调计划、数据库设置、连接管理等多个角度举行优化。同时,定期审计和维护也是非常紧张的。
         当然了,以上的建议对于云上MySQL也是有用的,而且据观察,云上数据库RDS大概更轻易出现此类问题
         稍作总结

假如希望快速的立刻减少Sleep进程过多现象,无疑监控并清理选项是可以立竿见影的(上面的办理方案的第四条),当然,这个方法是即是自己实现的优化超时参数,也就是上面的办理方案的第二条,别的的方法需要更多的时间和耐烦举行调解(重要看开辟的优化意愿了)
办理方案的第四条,使用数据库监控工具

许多数据库监控工具,如MySQL Enterprise Monitor、Percona Monitoring and Management (PMM)、Zabbix等,都支持自定义告警规则和自动操纵。你可以设置规则来监控长时间处于Sleep状态的连接,并在满足一定条件时自动清理。
例如,在PMM中,可以设置自定义警报,当发现长时间Sleep的连接时发送通知或直接实验清理操纵。这样就能实时且安全地管理MySQL的Sleep连接,避免资源浪费。
本文迁就手动清理做一个详细的解释
一、

脚本手动治理MySQL的Sleep进程过多问题

假设现在我有一个RDS数据库,那么,在一台可以连接到RDS的服务器上,任意安装一个maridb数据库,该数据库不需要启动,编写如下脚本即可:
vim kill_mysql_pid.sh
  1. #!/bin/bash
  2. #!author zsk
  3. set -eu
  4. ip=192.168.123.19
  5. port=3306
  6. password=123456
  7. id=`mysqladmin -h $ip -uroot -P$port -p$password processlist |grep Sleep |awk -F '| '  '{print $2}'`
  8. echo $id
  9. for i in $id
  10. do
  11. mysqladmin -h $ip -uroot -P$port -p$password kill $i
  12. done
复制代码
三个变量,IP是RDS的IP地址(假设),port是RDS的对外端口(假设),密码是RDS的root密码,变量按实际填写就可以使用了,关键是root密码和连接地址,对于RDS服务器同样实用的
这样的清理比较霸道,需要审慎实用
大概手动实现MySQL参数timeout的脚本:
  1. #!/bin/bash
  2. MYSQL_USER="your_username"
  3. MYSQL_PASS="your_password"
  4. MYSQL_HOST="localhost"
  5. MYSQL_CONN="-u$MYSQL_USER -p$MYSQL_PASS -h$MYSQL_HOST"
  6. # 空闲连接阈值,单位秒
  7. IDLE_THRESHOLD=3600
  8. # 获取所有Sleep状态且空闲时间超过阈值的连接ID
  9. CONNECTION_IDS=$(mysql $MYSQL_CONN -e "SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE TIME > ${IDLE_THRESHOLD} AND STATE = 'Sleep';")
  10. # 关闭这些连接
  11. for CONN_ID in $CONNECTION_IDS; do
  12.     mysql $MYSQL_CONN -e "KILL ${CONN_ID};"
  13. done
复制代码

二、

线程池功能

线程池功能可以有用的自动控制MySQL的Sleep进程
MySQL 5.7并不自带内建的线程池功能。假如希望在MySQL 5.7中使用线程池技术来改善服务器性能,可以思量使用第三方MySQL分支大概插件。
Percona Server for MySQL,作为MySQL的一个增强分支,提供了线程池插件。要在Percona Server 5.7中启用线程池功能,您可以按照以下步调操纵:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4