You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB连接池connection_count与pool_size区别及已用连接查询方法

查看MariaDB Python连接池已使用连接数的方法

首先明确:MariaDB Connector/Python里的connection_count属性指的是连接池中的总连接数,并非已借出(正在使用)的连接数。所以它和pool_size始终相等是正常行为——初始化连接池时,就会创建指定数量的连接并放入池中。

要跟踪已使用的连接数、避免连接耗尽,有以下几种可行方案:

  • 手动维护进程安全的计数器
    多进程环境下内存不共享,需用进程安全的共享变量来跟踪连接的借出与归还:

    from multiprocessing import Manager, Process
    import mariadb
    from mariadb import ConnectionPool
    
    def worker(used_connections):
        pool = ConnectionPool(pool_name="mypool", pool_size=5, user="your_user", password="your_pass", host="localhost", database="your_db")
        with pool.get_connection() as conn:
            used_connections.value += 1
            print(f"当前已使用连接数: {used_connections.value}")
            # 执行数据库操作...
        # with块结束后连接自动归还,计数器减1
        used_connections.value -= 1
    
    if __name__ == "__main__":
        with Manager() as manager:
            used_connections = manager.Value('i', 0)
            processes = [Process(target=worker, args=(used_connections,)) for _ in range(5)]
            for p in processes:
                p.start()
            for p in processes:
                p.join()
    

    核心是确保连接归还时计数器同步减少,用with语句能避免异常导致的连接泄漏。

  • 从数据库端查询真实连接数
    直接执行MariaDB的SHOW PROCESSLIST语句,过滤出当前应用的连接:

    def get_current_used_connections(pool):
        with pool.get_connection() as conn:
            cursor = conn.cursor()
            cursor.execute("SHOW PROCESSLIST")
            # 根据你的应用连接信息过滤,比如匹配用户名、客户端主机
            used_count = sum(1 for row in cursor if row[2] == "your_user" and row[1].startswith("127.0.0.1:"))
            cursor.close()
        return used_count
    

    这个方法能拿到数据库端的真实连接数,但需要确保当前数据库用户拥有PROCESS权限,且过滤条件要准确匹配你的应用连接。

  • 优先用with语句管理连接
    不管用哪种跟踪方式,避免连接耗尽的核心是确保连接被正确归还。使用with语句获取连接,能保证即使代码抛出异常,连接也会自动归还到池中,从根源上减少连接泄漏的可能:

    with pool.get_connection() as conn:
        # 执行查询、更新等操作
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM your_table")
        # 处理结果...
    

内容的提问来源于stack exchange,提问作者solick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:05:27