Constantin Asked: 2021-04-30 05:17:15 +0800 CST2021-04-30 05:17:15 +0800 CST 2021-04-30 05:17:15 +0800 CST 何时以及为什么要在连接池中重置会话? 772 我正在使用 Python 将高速查询推送服务实现到 MySQL 数据库中。 考虑到各种 MySQL 元素(如存储过程中的临时表)的广泛使用,何时以及为什么 应该pool_reset_session在基于 256 个连接的池上使用功能? mysql connection-pooling 1 个回答 Voted Best Answer Bill Karwin 2021-04-30T06:19:34+08:002021-04-30T06:19:34+08:00 始终设置pool_reset_session为 True,除非您有明确而有力的理由不这样做。我想不出在返回池连接时不重置会话的理由。 不重置会话的风险是与您的会话关联的数据将泄露到其他会话中。例如,您正在为多个并发用户提供服务的网站上进行银行交易。部分代码将有关您的事务的一些数据保存到临时表中。然后代码将该 MySQL 连接返回到连接池,在那里它被移交给其他用户的银行交互。他们的会话现在可以看到有关您的银行业务的一些详细信息!这同样适用于其他会话状态,如用户变量或 last_insert_id。 如果您需要继续使用会话状态,例如多次读取临时表,那么您的代码不应该将该连接返回到池,直到使用该临时表完成。
始终设置
pool_reset_session
为 True,除非您有明确而有力的理由不这样做。我想不出在返回池连接时不重置会话的理由。不重置会话的风险是与您的会话关联的数据将泄露到其他会话中。例如,您正在为多个并发用户提供服务的网站上进行银行交易。部分代码将有关您的事务的一些数据保存到临时表中。然后代码将该 MySQL 连接返回到连接池,在那里它被移交给其他用户的银行交互。他们的会话现在可以看到有关您的银行业务的一些详细信息!这同样适用于其他会话状态,如用户变量或 last_insert_id。
如果您需要继续使用会话状态,例如多次读取临时表,那么您的代码不应该将该连接返回到池,直到使用该临时表完成。