Mysql中Sleep进程连接数过多问题解决「建议收藏」

Mysql中Sleep进程连接数过多问题解决「建议收藏」连接数查看进入MySQL命令行,输入“showprocesslist;”命令后,Command列出现一大堆Sleep睡眠状态的连接进程。如下图:mysql连接进程Sleep睡眠状态过多将影响MySQ…

	Mysql中Sleep进程连接数过多问题解决[数据库教程]

  • 连接数查看
    进入MySQL命令行,输入“show processlist;”命令后,Command列出现一大堆Sleep睡眠状态的连接进程。如下图:
    Mysql中Sleep进程连接数过多问题解决
    mysql连接进程Sleep睡眠状态过多将影响MySQL系统资源,主要是CPU、内存。超过配置的最大连接数,新的客户端连接将无法连接,mysql将无法提供服务,Web系统无法访问、崩塌。
  • 造成连接数过多原因
    1)、常见是程序中没有关闭DB连接,客户端在退出前没有调用mysql_close()函数。这是写程序的疏忽。
    2)、DB查询复杂,优化不够,造成查询耗时长。
    3)、使用过多持久连接。不适合高并发场景系统中。
  • 解决方法
    批量删除 sleep 进程状态的连接数。
    1)、一种直接在MySQL命令控制台操作:
    mysql> show processlist;
    mysql> SELECT concat(‘KILL ‘,id,‘;‘) FROM information_schema.processlist WHERE user=‘user1‘;
    mysql> select concat(‘KILL ‘,id,‘;‘) from information_schema.processlist where user=‘user1‘ into outfile ‘/tmp/a.txt‘;
    mysql> source /tmp/a.txt;

    代码100分

    其中上面user1用户是“show processlist;” 命令下,User列对应最多的Sleep进程连接状态的用户。
    注:如上面导出为指定文件路径报“ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement”错误。
    Mysql中Sleep进程连接数过多问题解决
    是由于MySQL在文件的导入、导出有个默认的文件路径。通过“show variables like ‘%secure%‘;”命令查看默认导入、导出文件路径。
    Mysql中Sleep进程连接数过多问题解决
    从上面可看出默认路径为“/var/lib/mysql-files/”;所以改下导出文件路径:
    Mysql中Sleep进程连接数过多问题解决
    然后在执行“source /var/lib/mysql-files/a.txt;”命令,接下来是出现一堆“Query OK, 0 rows affected (0.00 sec)”,执行成功。
    2)、另一种是写Shell脚步方法,配合设置cron定时任务

    代码100分#!/bin/sh
    while :
    do
    sleep_num=`mysqladmin processlist -u user -ppassword -h 10.10.10.100 | grep -ie sleep |wc -l`
    date=`date +%Y%m%d[%H:%M:%S]`
    echo $sleep_num
    if [ "$sleep_num" -gt 100 ];then
        for i in `mysqladmin processlist -u user -ppassword -h 10.10.10.100 | grep -ie sleep | awk ‘{print $2}‘`
        do
            mysqladmin -u user -ppassword -h 10.10.10.100  kill $i
        done
    echo "sleep is too many more than 100, killed it " >> /tmp/sleep.log
    echo "$date : $sleep_num" >> /tmp/sleep.log
    fi
    sleep 1
    done

    接下来设置个cron定时任务,设置多长时间跑一次。

  • 修改配置
    上面方法比较繁琐,写脚本、配置定时任务,而且这种以暴制暴方法可能会导致数据奔溃,不可取。更好的方法应该是让MySQL自己决定这些Sleep睡眠状态连接的命运,实施会更简单,有效。
    MySQL配置项中有一项 wait_timeout 配置项,表示Sleep睡眠状态连接数超时时长。超过设置的时长,MySQL自动终止连接。
    输入“show global variables like ‘%timeout%‘;” 命令查看:
    Mysql中Sleep进程连接数过多问题解决
    当前关于睡眠状态连接数超时时长,默认超时时长 wait_timeout 为28800秒,还有一个相关的 interactive_timeout 配置。
    wait_timeout 与 interactive_timeout 区别在于 wait_timeout 是MySQL服务器关闭非交互连接之前等待的秒数, interactive_timeout 是MySQL服务器关闭交互式连接前等待的秒数。
    什么是交互连接,什么是非交互连接?
    通过MySQL客户端连接DB的就是交互式的会话连接,通过JDBC程序连接DB的就是非交互式的会话连接。
    接下来修改 wait_timeout、interactive_timeout 全局变量。要配合这两块一起修改才有效。设置DB连接超时时长为3600秒,如下:
    set global wait_timeout=3600;
    set global interactive_timeout=3600;
  • Mysql中Sleep进程连接数过多问题解决

    原文地址:https://blog.51cto.com/10874766/2514570

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
    转载请注明出处: https://daima100.com/6974.html

    (0)
    上一篇 2023-03-29
    下一篇 2023-03-29

    相关推荐

    • Oracle interval ‘1’ YEAR 今天报错了[亲测有效]

      Oracle interval ‘1’ YEAR 今天报错了[亲测有效]Oracle interval ‘1’ YEAR写法,在瑞年2.29号当前会报错,这是由于Oracle的interval计算机制造成的,替代写法add_months(TO_DATE(‘2020-02-

      2023-02-02
      159
    • mysql索引解析「终于解决」

      mysql索引解析「终于解决」1、基本概念 数据读写性能主要是IO次数,单次从磁盘读取单位是页,即便只读取一行记录,从磁盘中也是会读取一页的()单页读取代价高,一般都会进行预读) (1)扇区是磁盘的最小存储单元 (2)块是文件系统

      2023-02-28
      148
    • 大数据分组怎样才会更快一些_大数据新手教程

      大数据分组怎样才会更快一些_大数据新手教程分组是数据库的常见运算,无论数据如何准备,通常都需要将所有数据遍历。建立索引这时是不起作用的,存储格式才是决定遍历效率的主要因素。数据库中数据的存放虽然是二进制格式的,但普遍IO性能差,库内遍历快,…

      2023-03-12
      147
    • 40Mn18Cr3热锻环[通俗易懂]

      40Mn18Cr3热锻环[通俗易懂]无磁钢40Mn18Cr3和50Mn18Cr5经常作为电机配件进行热锻、模锻、温锻工艺的。 作为电机护环,对材料性能都有较高的要求,特别是护环的屈服。《135 85↘ 上海高高,十几年经营无磁钢下来。…

      2023-03-19
      151
    • ondblclick=”return showCodeList 分析思路[通俗易懂]

      ondblclick=”return showCodeList 分析思路[通俗易懂]

    • Python Redis连接池

      Python Redis连接池Redis是一个开源的,内存的数据结构存储系统,它被广泛地应用于缓存、消息中间件和排行榜等场景中。在Python中,我们可以利用redis-py库来连接Redis数据库。但是,在多个Python程序同时连接同一个Redis服务时,即使是轻微的时间差异都会导致每个程序都需要重新建立一个新的连接,这会增加Redis服务器的负载和网络开销。为了减少这些开销,我们可以利用Python中提供的Redis连接池来解决这个问题。

      2024-09-20
      15
    • Python中使用key in dict对字典进行查找和判断

      Python中使用key in dict对字典进行查找和判断a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

      2024-03-12
      89
    • Redis学习笔记(十三) 复制(下)

      Redis学习笔记(十三) 复制(下)上一篇写了Redis复制功能的简单应用,下面我们看下Redis复制功能的实现过程。下面基本上是理论部分,枯燥乏味,但希望大家能看看,毕竟知识不都是感兴趣的.耐得住寂寞,经得起诱惑,方能守得住繁华 ~.

      2023-03-03
      153

    发表回复

    您的电子邮箱地址不会被公开。 必填项已用*标注