如何在任何时候检查池中活跃的SQLAlchemy连接数量?

21

我遇到一个情况,由于高流量负载,sqlalchemy不时耗尽活动连接,我想运行一些测试来验证和优化池参数以符合我们的用例。然而,我无法找到一种直接的方法来轮询活动连接的数量。

当前设置如下:

args = ...
mapping = {
        'pool_size': 10,
        'max_overflow': 10,
        'pool_timeout': 30,
        'pool_recycle': 1800
    }
engine = sqlalchemy.create_engine(*args, **mapping)

MySQL服务器的最大连接数设置为200,总共有约20个Web服务器和Celery Box连接到它。

1个回答

25

默认的QueuePool有一个status方法,该方法返回以下内容

def status(self):
        return "Pool size: %d  Connections in pool: %d "\
            "Current Overflow: %d Current Checked out "\
            "connections: %d" % (self.size(),
                                 self.checkedin(),
                                 self.overflow(),
                                 self.checkedout())

Pool.checkedout()会返回已经签出连接的数量。


Github链接已失效。 - PankajKushwaha
1
这是状态函数的更永久的Github链接:https://github.com/sqlalchemy/sqlalchemy/blob/d5c89a541f5233baf6b6a7498746820caa7b407f/lib/sqlalchemy/pool/impl.py#L193。请注意,最新版本的函数可以在https://github.com/sqlalchemy/sqlalchemy/blob/master/lib/sqlalchemy/pool/impl.py中查看。 - L42
12
从引擎 engine = sqlalchemy.create_engine(*args, **mapping)engine.pool.status()engine.pool.status() - Neara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接