为什么准备好的报表由每个会话管理?

时间:2017-04-07 13:50:07

标签: mysql database postgresql rdbms

为什么预备语句由每个会话管理?

我不确定所有数据库都会处理每个会话的预准备语句。但是postgresql和mysql(也许)可以。

为什么会话之间不共享?有什么理由吗?

例如, 连接池和连接中有许多连接共享相同的查询,并且还生成相同的预准备语句。为什么数据库不允许连接共享预准备语句?

1 个答案:

答案 0 :(得分:2)

维护任何共享缓存都很昂贵 - 你应该保护缓存不受竞争条件的影响,你应该清理缓存,......这是第一个参数。第二个参数更重要 - 准备好的语句是缓存的执行计划 - 但是这个计划针对一个参数向量进行了优化。当您使用不同的参数向量时,计划可能再次是该向量的次优。有一种哲学,所以任何用户都可以使用不同的向量,然后需要不同的计划。使用会话共享计划缓存不会消除生成计划的开销(尽管此开销用于快速简单查询最小化),但消除了与共享数据管理相关的开销和竞争条件,并部分降低了使用次优准备计划的风险。