› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
yuyang1992test
V2EX  ›  MySQL

[mysql] 最近老是遇到连接数打满的情况,求助

  •  
  •   yuyang1992test · Apr 2, 2024 · 3179 views
    This topic created in 905 days ago, the information mentioned may be changed or developed.

    默认的最大连接数是 151 ,改到了 1000 ,暂时解决。 我排查代码,用的 gorm,是有设置连接数的

    	db, err := gorm.Open("mysql", c.DSN)
    	if err != nil || db == nil {
    		panic(err)
    	}
    	db.DB().SetMaxIdleConns(c.MaxIdle)
    	db.DB().SetMaxOpenConns(c.MaxConn)
    

    但是执行 select * from information_schema.PROCESSLIST 会看到很多 command 是 sleep 我排查代码应该是没有未提交的事务 我自己起终端测试,在提交了事务后还是会有 sleep, 只有吧客户端关了才可以 是和 mysql 的 wait_timout 有关系吗?我看这个默认 8 小时,一般线上这个值是多少?

    5 replies  •  2024-04-02 17:45:03 +08:00
    idontnowhat2say
        1
    idontnowhat2say  
       Apr 2, 2024
    感觉是你用完了连接没有放回池子。

    一般 wait_timeout 要看 连接池有没有 keepalived 的机制,没有的话就会用 linux 自己的 tcp 连接 keepalived 参数。wait_timeout 要确保至少大于长链接心跳间隔。
    yuyang1992test
        2
    yuyang1992test  
    OP
       Apr 2, 2024
    @idontnowhat2say 我没看到 gorm 需要手动放回池子的操作,我设置 wait_timeou=600 秒看起来是解决了,现在 show processlist 不会有 sleep 超过 600 秒的了
    lifeHasOnce
        3
    lifeHasOnce  
       Apr 2, 2024
    1.是不是有重复创建链接的场景
    2.是不是事务没有 commit
    3.你可以 show processlist 查看 ip 看看来源是那个机器,在定位一下具体哪一行代码
    4357
        4
    4357  
       Apr 2, 2024
    gorm 有连接池,且不需要手动释放。同一个连接给多次查询复用
    默认的 8 小时是连接释放的时间
    XuHuan1025
        5
    XuHuan1025  
       Apr 2, 2024
    因为你用了 jetbrain
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   886 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:33 · PVG 06:33 · LAX 15:33 · JFK 18:33
    ♥ Do have faith in what you're doing.