python - Mysql连接池问题: is it worth it?

标签 python mysql sqlalchemy connection-pooling

我记得听说 mysql 中的连接过程被设计为与其他 RDBMS 相比非常快,因此使用 a library that provides connection pooling如果您启用连接池,(SQLAlchemy) 实际上不会帮助您那么多。

有没有人有这方面的经验?

我对启用它持谨慎态度,因为如果某些代码对数据库连接做了一些有状态的事情并且(可能错误地)没有自行清理,那么通常会在关闭连接时清理的状态相反,将传播到获得回收连接的后续代码。

最佳答案

使用 SQLA 的连接池时,无需担心连接上的残留状态,除非您的应用程序正在更改连接范围的选项,如事务隔离级别(通常情况并非如此)。 SQLA 的连接池在连接重新 checkin 时在连接上发出 connection.rollback(),以便清除任何事务状态或锁定。

MySQL 的连接时间可能非常快,尤其是当您在同一台机器上通过 unix 套接字进行连接时。如果你确实使用连接池,你还想确保连接在一段时间后被回收,因为 MySQL 的客户端库将自动关闭空闲超过 8 小时的连接(在 SQLAlchemy 中,这是 pool_recycle 选项)。

您可以通过将池实现从默认的 QueuePool 更改为 NullPool 来快速执行一些连接池与非 SQLA 应用程序的基准测试,这是一个实际上不池化任何东西的池实现 - 它连接和断开连接当代理连接被获取并随后关闭时是真实的。

关于python - Mysql连接池问题: is it worth it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/405352/

相关文章:

python - SQL - 查找与当前日期匹配的条目

mysql - Sqlalchemy & Pylons : Adding new tables to a previously defined database?

python - Tornado AsyncHttpClient 中的 Socks 代理

python - 神经网络 - 损失不收敛

mysql - 在mysql中捕获 'too many connections'的原因

php - MySQL查询。如何先拉出特定条目,然后显示其余部分?

python - SQLAlchemy 转换为二进制(N)

python - 如何仅获取与模式匹配的文件名

python - 使用异常处理器扩展默认方法的功能(以Python为例)

php - 在 Laravel 中将旧表迁移到新表