清理mysql的sleep链接

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 清理mysql的sleep链接— 单mysql虽然生产环境用的不多,但还是很有用的哦, 我来整理篇博客,哈哈, 前半描述部分是摘抄于前同事:前言我们通过show processlist可以看到Command 列为sleep的连接,sleep表示正在等待客户端发送请求. 另外, 可以查看连接数设置的最大值,连接数可能超出设置值. 数据库在默认情况下,sleep

清理mysql的sleep链接

— 单mysql虽然生产环境用的不多,但还是很有用的哦, 我来整理篇博客,哈哈, 前半描述部分是摘抄于前同事

前言

我们通过show processlist可以看到Command 列为sleep的连接,sleep表示正在等待客户端发送请求. 另外, 可以查看连接数设置的最大值,连接数可能超出设置值.
这里写图片描述

数据库在默认情况下,sleep超时时间一般会默认为8小时,8小时后mysql会把这些sleep连接从连接池中剔除,下次业务则需重连。可以根据业务情况,是否有超过8小时就已导致前端访问缓慢了.

提前总结

造成睡眠连接过多的原因?
1. 使用了太多持久连接(个人觉得,在高并发系统中,不适合使用持久连接)
2. 程序中,没有及时关闭mysql连接
3. 数据库查询不够优化,过度耗时。
当然,更根本的方法,还是从以上三点排查:
1. 程序中,不使用持久链接,即使用mysql_connect而不是pconnect
2. 程序执行完毕,应该显式调用mysql_close
3. 只能逐步分析系统的SQL查询,找到查询过慢的SQL,优化之

脚本分享

  • SHELL版
  • PHP版

SHELL版

#It is used to kill processlist of mysql sleep

#!/bin/sh
MYSQLDIR=/usr/local/mysql/bin
MYSQLTOOL=$MYSQLDIR/mysql
MYSQLUSER=myadmin
MYSQLPASS="password"
usage()
{
    echo "Usage: $0 ip port db_user"
    echo "Example: $0 1.1.1.1 3306 db_user"
    exit
}

if [ $# -ne 3 ];then
    usage
fi
hostip=$1
port=$2
user=$3
sleepid="SELECT ID FROM information_schema.PROCESSLIST t WHERE t.COMMAND='Sleep' and user='$3' and time >1000;"
echo $sleepid
 $MYSQLTOOL -h$hostip -u$MYSQLUSER -p$MYSQLPASS -P$port -e "$sleepid" >sleepIDs

while read sID
do
 echo $sID
$MYSQLTOOL -h$hostip -u$MYSQLUSER -p$MYSQLPASS -P$port -e "kill $sID"
done<sleepIDs 

PHP版

<?php
define('MAX_SLEEP_TIME', 1000);

$hostname = "ip:port";
$username = "username";
$password = "password";

$connect = mysql_connect($hostname, $username, $password);
$result = mysql_query("SHOW PROCESSLIST", $connect);
while ($proc = mysql_fetch_assoc($result)) {
    if ($proc["Command"] == "Sleep" && $proc["Time"] > MAX_SLEEP_TIME) {
        @mysql_query("KILL " . $proc["Id"], $connect);
    }
}
mysql_close($connect);
?>

参考资料

Kill mysql sleep proccesses
Why persistent connections are bad
更多

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL
Mysql基础第十九天,使用不同类型的链接
Mysql基础第十九天,使用不同类型的链接
24 0
Mysql基础第十九天,使用不同类型的链接
|
6月前
|
关系型数据库 MySQL Linux
MySQL数据库----------安装anaconda---------python与数据库的链接
MySQL数据库----------安装anaconda---------python与数据库的链接
104 0
|
5月前
|
关系型数据库 MySQL
mysql中有大量sleep进程的原因与解决办法
mysql中有大量sleep进程的原因与解决办法
204 0
|
3月前
|
关系型数据库 MySQL PHP
|
4月前
|
关系型数据库 MySQL 数据库连接
阿里云国际站代理商:MySQL云数据库数据库链接不上怎么办?
@luotuoemo 飞机@TG 【聚搜云】服务器运维专家! 阿里云国际站代理商:MySQL云数据库数据库链接不上怎么办?
|
5月前
|
关系型数据库 MySQL
mysql清理binlog日志
mysql清理binlog日志
|
6月前
|
安全 Java 关系型数据库
[记录]centos java mysql链接错误
[记录]centos java mysql链接错误
|
7月前
|
关系型数据库 MySQL
`navicat`外网链接`mysql`报`...error 10061`
`navicat`外网链接`mysql`报`...error 10061`
`navicat`外网链接`mysql`报`...error 10061`
|
8月前
|
Oracle NoSQL 关系型数据库
SpringBoot-13-使用JdbcTemplate链接Mysql数据库
在企业项目开发者,数据库的使用是必不可少的一部分,常用的数据库有mysql、oracle、sqlserver、redis等,我们接下来的几章会介绍SpringBoot中如何使用数据库,本章就介绍使用JdbcTemplate链接mysql。
84 0
|
8月前
|
关系型数据库 MySQL API
MariaDB数据库中如何允许远程链接mysql并开放3306端口
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
547 0