我记得听说 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/