【Mysql并发和连接数】

mysql并发数:netstat -ant |find /i "ESTABLISHED" |find /i ":3306 " /c

mysql连接数:select count(*) from information_schema.processlist;

或者:mysql -uroot -h127.0.0.1 -P3020 -e “show processlist”|wc -l >/tmp/1.log

或者:  show full processlist;

show variables like 'max_connections';

./mysql -uroot -p1234.com -e 'show status' | grep -i  Threads

show status like 'Threads%';

MySQL繁忙的时候运行show processlist,会发现有很多行输出,每行输出对应一个MySQL连接。怎么诊断发起连接的进程是哪个?它当前正在干嘛呢?

首先,需要通过TCP Socket而不是Unix Socket连接MySQL,这样在show processlist的输出中就会有来源端口号。

然后杀掉线程

可以先授权某一个用户,然后隔一定时间(30s)执行类似 show status 的命令,探针进行抓取,然后这些数据进行统计收集

【案例分析】遇到mysql超出最大连接数,相信不少人第一反应就是查看mysql进程,看有没有慢查询,当然这个做法是完全正确的!

但是很多时候真正的问题不在这里。

今天有遇到同样的问题,一味查看mysql进程和慢查询日志,无果。

后来老大提点了一下,查看一下nginx日志,发现有一两个访问执行时候比较长,然后使用top命令查看了一下服务器负载,惊了,居然超高!

最后发现原来有一台web分流主机挂了,导致另外几台web主机负载增高,从而导致了php-fpm的执行效率降低。

那么这跟mysql有什么关系呢?原因很简单,因为php执行时间过长,mysql连接迟迟未释放,就会导致连接数过多出现。

最后总结:其实很多时候,一个问题的根本原因并不是那么直接的呈现出来,需要自己去跟踪。

有一句很实用的话:遇到问题先查日志(mysql、php、nginx、tomcat等)

===============================================================

排查连接数过多的方法

当用户收到链接数告警时,意味着连接数即将达到该实例的上限。如果实例的连接数超过了实例规定的连接数,将无法创建新的连接,这个时候会影响用户的业务;

Mysql 的连接通常是一个请求占用一个连接,如果该请求(update,insert,delete,select)长时间没有执行完毕,则会造成连接的堆积,迅速的消耗完数据库的连接数,这个时候技术支持人员就要登录数据库进行排序,看看到底是那些sql 占用了连接;

问题排查步骤:

1 、查看实例配置:

可登录RDS控制台“详情与配置”查看实例额定链接数,我们假设最高支持1500个链接

2、 查看当前的连接数:

1)可登录RDS控制台“性能监控”查看实例当前链接数。

2)或者登录数据库查询当前连接,可以使用同步账号或者用户的业务账号登录数据库,执行show processlist;

[root@r41d05036.xy2.aliyun.com ~]# mysql -uroot -h127.0.0.1 -P3020 -e “show processlist”|wc -l

1262

可以看到该实例已经有1262 个连接

3、排查是什么动作占用了这些连接:

[root@r41d05036.xy2.aliyun.com ~]# myql -uroot -h127.0.0.1 -P3018 -e “show full processlist”>/tmp/1.log

root@r14d11038.dg.aliyun.com # more /tmp/1.log

615083 my_db 223.4.49.212:54115 my_db Query 100 Sending data

INSERT INTO tmp_orders_modify (oid, tid, seller_id, status, gmt_create, gmt_modified)

SELECT oid, tid, seller_id, status, gmt_create, gmt_modified

FROM sys_info.orders WHERE

gmt_modified < NAME_CONST(‘v_last’,_binary’2012-12-24 10:33:00’ COLLATE ‘binary’) AN

D gmt_modified >= NAME_CONST(‘v_curr’,_binary’2012-12-24 10:32:00’ COLLATE ‘binary’)

621564 my_db 223.4.49.212:46596 my_db Query 3890 sorting result

insert into tmp_trades(sid, d, h, tc, tm, tp, ic, new_tp, old_tp)

select a.seller_id as sid,

…………..

from orders_1 as a where seller_id =1 and is_detail = ‘1’

and created < date_format(‘2012-12-24 10:35:00’, ‘%Y-%m-%d %H:00:00’)

and gmt_create < date_format(‘2012-12-24 10:40:00’, ‘%Y-%m-%d %H:%i:00’)

and gmt_create >= date_format(‘2012-12-24 10:35:00’, ‘%Y-%m-%d%H:%i:00’)

group by d, h

order by d

……………….此处省略其他sql

4、分析连接占用的原因:

可以看到数据库中有长时间没有执行完成的sql,一直占用着连接没有释放,而应用的请求一直持续不断的涌入数据库,这个时候数据库的连接很快就被使用完;所以这个时候需要排查为什么这些sql 为什么长时间没有执行完毕,是索引没有创建好,还是sql执行耗时严重。

第一条sql:

INSERT INTO tmp_orders_modify (oid, tid, seller_id, status, gmt_create, gmt_modified)

SELECT oid, tid, seller_id, status, gmt_create, gmt_modified

FROM sys_info.orders WHERE

gmt_modified < NAME_CONST(‘v_last’,_binary’2012-12-24 10:33:00’ COLLATE ‘binary’) AN

D gmt_modified >= NAME_CONST(‘v_curr’,_binary’2012-12-24 10:32:00’ COLLATE ‘binary’)

是用户从sys_info 数据库中拉取订单到自己的业务库中那个,但是在orders 表上没有gmt_modified 的索引,导致了全表扫描;(更加详尽的排查方法可以参考:为什么我的RDS慢了);

第二条sql:

看到这条sql 正在进行sorting 排序,为什么导致sql 长时间sorting,通常情况下为排序的结果集太大导致排序不能在内存中完成,需要到磁盘上排序,进而导致了性能的下降;解决的办法就是降低排序的结果集,常用的手段是利用索引的有序性,消除排序,或者建立适当的索引减小结果集;我们可以看到第二条sql 的排序字段非常的复杂,但是我们可以看到查询的时间范围是很短,只有5 分钟的时间间隔,这个时候就可以在gmt_create上创建一个索引,过滤掉大部分的记录:

Alter tale order_1 add index ind_order_gmt_create(gmt_create);

(该用户对orders 进行了分表,大概有50 多张分表需要添加gmt_create 字段的索引);

5、经过上面两步的优化后,用户实例恢复正常:io 情况和connection 情况,可再次登录RDS控制台查看连接数。

【对于Windows操作系统的】原因:windows系统BUG,微软官网有详细介绍,系统并发过大,连接数过多,部分socket连接无法释放关闭,而持续请求又导致无法释放的socket连接不断积压,最终导致No buffer space available

1.对于windows环境,可通过修改注册表进行配置:

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

添加一个DWORD类型的值TcpTimedWaitDelay,值可以根据实际情况配置(可以配置十进制30秒)。

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters

添加一个DWORD类型的值MaxUserPort ,值可以根据实际情况配置(5000-65534)。

2.重启服务器

备注:

TcpTimedWaitDelay:确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间;缺省为240秒,最低为30秒,最高为300秒。建议设为30秒。

MaxUserPort :确定在应用程序从系统请求可用用户端口时,TCP/IP 可指定的最高端口号;缺省值:无 建议值:至少十进制 32768

----------------------------------------------------

也可以将以下两行复制到空白txt中,保存关闭txt,然后再修改txt为bat,这样就变成了一个批处理文件,双击批处理即可完成上面所说的注册表里的添加

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters" /v "TcpTimedWaitDelay" /t REG_DWORD /d 30 /f

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters" /v "MaxUserPort" /t REG_DWORD /d 65534 /f

导致原因:

出现这种错误明显就是 mysql_connect 之后忘记 mysql_close;

当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个,而什么情况下会出现这种错误呢?

正常的mysql_connect 之后调用 mysql_close()关闭连接

但在连接错误时,会者mysql_real_query()出现错误退出时,可能忘记mysql_close();

所以在程序return 之前一定要判断是否close(),最稳妥的方法就是在写任何函数时都只有一个出口!

附录模拟mysql连接增多的脚本

#!/bin/bash

set j=2

while true

do

let "j=j+1"

/usr/local/mysql/bin/mysqlslap -a -c 500 -i 10 -uroot -p1234.com

done

【推荐工具】

1、监视资源使用情况(系统监视器) | Microsoft Docs https://docs.microsoft.com/zh-cn/sql/relational-databases/performance-monitor/monitor-resource-usage-system-monitor

2、Cloud Insight - IT综合运维管理平台|数据库监控|IT基础设施监控 - OneAPM http://www.oneapm.com/ci/feature.html

【参考资料】

1、RDS for MySQL 连接数满情况的处理_MYSQL使用_技术运维问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/41714.html

2、【Mysql】连接数过多,应急处理方法-yhdmy-ITPUB博客 http://blog.itpub.net/26148431/viewspace-2149247/

---------------------

作者:天府云创

来源:CSDN

原文:https://blog.csdn.net/enweitech/article/details/79911294

版权声明:本文为博主原创文章,转载请附上博文链接!

win10连接mysql服务器频繁断线_MySQL连接数过多导致服务无法正常运行相关推荐

  1. 连接数过多导致服务无法正常运行

    原因:windows系统BUG,微软官网有详细介绍,系统并发过大,连接数过多,部分socket连接无法释放关闭,而持续请求又导致无法释放的socket连接不断积压,最终导致No buffer spac ...

  2. win10的系统mysql服务器地址,win10注册mysql服务器地址

    win10注册mysql服务器地址 内容精选 换一换 本章主要介绍了在华为云上如何使用弹性云服务器的Linux实例手工部署AMH环境.AMH是一套通过Web控制和管理服务器的Linux服务器管理系统以 ...

  3. Linux下连接Mysql服务器的方式

    一:mysql连接简介 1.linux下mysql的连接方式有三种: 本地mysql命令连接 客户端命令连接 脚本语言封装方法连接 2.linux下mysql的连接方法有两种: TCP/IP协议连接 ...

  4. go语言服务器连接mysql,服务器mysql怎么配置才能远程连接

    如何设置MYSQL服务器允许远程连接?如果你使用的与数据库不在同一台服务器上电脑,那么MySQL 服务器就需要允许远程链接,网站才能正常运行.那么如何设置MYSQL服务器允许远程连接呢?我想这是很多人 ...

  5. c 连接mysql示例 源码_MySQL 连接

    MySQL 连接 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysql服务器的简单实例: [[emai ...

  6. phpMyAdmin链接MySQL拒接_phpmyadmin连接MySQL服务器被拒绝

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 原因: 可能是修改了My ...

  7. 在linux中连接mysql数据库服务器_Linux下连接Mysql服务器的方式

    一:mysql连接简介 1.linux下mysql的连接方式有三种: 本地mysql命令连接 客户端命令连接 脚本语言封装方法连接 2.linux下mysql的连接方法有两种: TCP/IP协议连接 ...

  8. 链接mysql服务器的命令是_连接 MySQL服务器的命令是什么?( )_学小易找答案

    [单选题]两块平玻璃构成空气劈尖,左边为棱边,用单色平行光垂直入射,若上面的平玻璃慢慢地向上平移,则干涉条纹 [计算题]迎面而来的两辆汽车的车头灯相距1.0m,问汽车离人多远时它们刚能为人眼所分辨? ...

  9. 连接MySQL服务器

    连接MySQL服务器   MySQL是一种 客户端-服务器 模式的DBMS(数据库管理系统),当然在刚学习的时候一般都将客户端和服务器都装于本地机上:   一般MySQL服务器的端口为3306,这是默 ...

最新文章

  1. 《Pro SQL Server Internals》部分翻译(P155-165)
  2. python3 赋值 浅拷贝 深拷贝 简介
  3. 安卓桌面软件哪个好_简单好用的手机记事本软件哪个好?
  4. 【MONGODB】验证MONGODB 主从复制
  5. Skyscrapers (hard version) CodeForces - 1313C2(单调栈)
  6. C# 有什么惊艳到你的地方?
  7. 赞!支付宝推出澳门币服务 澳门67万盆友又方便了不少
  8. iOS动画系列之四:基础动画之平移篇
  9. V8 JavaScript 引擎 6.6 发布,异步性能大幅提升
  10. KORG Software TRITON for mac(虚拟合成器软件)
  11. PTA-1015——Reversible Primes
  12. Atitit 信息安全体系 资料书籍表 1. 《信息安全原理与技术 2 1.1. 第2章 工具箱: 鉴别、 访问控制与加密 2 1.2. 第3章 程序和编程 漏洞 木马 病毒 3 1.3. We
  13. 将10位时间戳转换成字符串格式时间显示
  14. 2015年工作总结——①名IT女的日常
  15. [DEMO] 互联网广告RTB机制简介
  16. 巴西柔术第一课:骑乘式上位技术
  17. C++ Primer 笔记
  18. 关于使用媒体查询@meda失效原因的总结或注意事项
  19. 19 Three.js实现雾化效果
  20. QCustomplot(二) 源码解读

热门文章

  1. Multiavatar 多元文化头像生成器
  2. 安装Labview2012 “labview 2012 未定义必须的 NIPathsDir属性 maxAFWDIR”
  3. 一线互联网公司中,Java开发的招聘标准
  4. python生成10个随机数字符串_python生成随机数、随机字符串
  5. go语言设计初衷和优势
  6. java形参、实参、值传递、引用传递
  7. meterpreter--收集系统信息
  8. JAVA中的按值传递
  9. Transact-SQL 存储过程(c#调用执行)
  10. JVM内存结构、垃圾回收那点事