Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 456|回复: 0

mysql Navicat使用常见的两个问题及解决方法,提高开发效率

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-16 13:54:18 | 显示全部楼层 |阅读模式

    Navicat使用常见问题

    在我们日常开发过程中,一般不会直接使用命令行来操作 MYSQL 数据库,而会选择一些图形化界面去帮助我们来进行此类操作,常用的有:SQLyog(Logo也是小海豚),Navicat,或者直接使用编辑器自带的图形化界面工具。我这边开发使用的是 Navicat,在日常使用的时候出现过一下的问题:

    Too Many Connections - 1040

    在 Navicat 的界面中,这是一个很讨人厌的提示框,多人协作开发的时候经常出现。原因有二:

    一是 Mysql 数据库的默认最大连接数是:100,

    二是 对于多人开发的单体项目来说,虽然我们同时在用的连接不会超过10个,理论上100 绰绰有余,但是除了我们正在使用的连接以外,还有很大一部分 Sleep 的连接,这个才是真正的罪魁祸首。

    分析到了问题的根源,我们就需要对症下药,依次解决:

    修改 Mysql 最大连接数量

    首先查看当前 Mysql 最大连接数量是多少:

    show variables like '%max_connections%';

    1569728623643

    这里我已经修改过了,所以是 1000,没有改过的童鞋应该还是 100,

    然后查看从这次 mysql 服务启动到现在,同一时刻并行连接数的最大值:

    show status like 'Max_used_connections';

    1569728770594

    对于 Mysql 的最大连接数设置,在首次配置的时候设置一个较大的数值,以后在使用的过程中,周期的查询 Max_used_connections 然后根据他的值和服务器的性能确定一个最适合当前项目的最大连接数

    最大连接数的修改有两种方式

    1. 使用 sql 语句(立即生效,但服务器重启后失效):
    set global max_connections = 1000;

    1569732049126

    1. 修改 /etc/my.cnf.添加 max_connections = 1000 永久有效。重启后生效

    但更改最大连接数只能从表面上解决问题,随着我们开发人员的增多,Sleep 连接也会更多,到时候万一又达到了 1000 的上限,难道我们又得改成 10000 吗?这显然是非常不可取的。所以我们不仅要治标,还要治本。杀掉多余的 Sleep 连接就是治本

    杀掉Sleep连接

    我们可以通过 show_processlist 命令来查看当前的所有连接状态

    1569739161678

    可以发现, Sleep 的连接占了绝大多数。

    Mysql 数据库有一个属性 wait_timeout 就是 sleep 连接最大存活时间,默认是 28800 s,换算成小时就是 8 小时,我的天呐!这也太长了!严重影响性能。相当于今天上班以来所有建立过而未关闭的连接都不会被清理。

    执行命令:

    show global variables like '%wait_timeout';

    1569738432344

    我们将他修改成一个合适的值,这里我改成了 250s。当然也可以在配置文件中修改,添加 wait_timeout = 250。这个值可以根据项目的需要进行修改,以 s 为单位。我在这里结合 navicat 的超时请求机制配置了 240s。

    执行命令:

    set global wait_timeout=250;

    这样,就能从根本上解决 Too Many Connections 的问题了

    正在准备...

    我们在使用 Navicat 的时候,有时候查询完一次数据之后,就去编写代码,等下次回来的打开表的时候就会出现:正在准备... 等字样,这次查询可能会消耗 20s 以上的时间,这是不能容忍的。

    这个时候我们就需要想办法解决他了,首先我想到的是 mysql 的 connection 连接被清理了,通过复现 正在准备... 并同时在 linux 通过 show processlist 命令查看连接状态发现,并不是。这个请求在正在准备的前10几秒并没有和 mysql 建立connection 连接。

    那么我分析可能是 navicat 和数据库服务器之间的通信连接断掉了导致了,而根据 navicat 文档说明,在连接高级设置这里有一个保持连接间隔(官方文档-通过 ping 来保持连接。你可以在编辑框中设置 ping 与 ping 之间的间隔)的时长配置:将其设置成 240s。这样每过240s,软件就会像服务器发送心跳请求,以保证连接不被断开。这样我们就不会出现正在准备。。。等字样了

    1570438982547

     
    分类: 数据库
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-23 04:26 , Processed in 0.055553 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表