gpt4 book ai didi

postgresql - PostgresQL 中的参数嗅探/绑定(bind)查看

转载 作者:行者123 更新时间:2023-12-02 19:21:30 26 4
gpt4 key购买 nike

PrepareExecute PostgreSQL 中的组合允许使用绑定(bind)参数。但是,Prepare 不会生成针对一组参数绑定(bind)进行优化的计划,该计划可以与另一组参数绑定(bind)一起重用。有人对实现此类功能有指导吗?这样,该计划将针对给定的一组参数绑定(bind)进行优化,但可以重用于另一组。该计划对于后续集合可能效率不高,但如果使用新的参数绑定(bind)重新计算计划成本,则可能会发现它是有效的。

读取和使用参数绑定(bind)值进行基数估计在 SQL Server 中称为“参数嗅探”,在 Oracle 中称为“绑定(bind)窥视”。基本上,有没有人在 PostgreSQL 中做过类似的事情。

最佳答案

PostgreSQL 使用启发式方法来决定是否进行“绑定(bind)窥视”。它确实会查看执行准备好的语句的前 5 次(我认为是),如果这些都没有导致比通用计划更好(预期更好)的计划,那么它会在将来停止检查.

从 v12 开始,您可以通过设置 plan_cache_mode 来更改此启发式。

请注意,某些驱动程序实现了自己的启发式方法——仅仅因为您调用驱动程序的准备方法并不意味着它实际上将其作为准备传输到服务器。相反,它可能会隐藏语句文本,等待执行,然后引用/转义您的参数,并将它们与之前伪准备的语句捆绑在一起,并将它们以一个数据包发送到服务器。也就是说,他们可能只是将准备/执行分离视为防止 SQL 注入(inject)的一种方法,而不是提高性能的一种方法。

关于postgresql - PostgresQL 中的参数嗅探/绑定(bind)查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63000283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com