开发者社区> 德哥> 正文

PostgreSQL 商用版本EPAS(阿里云ppas) 自定义custom plan次数

简介:
+关注继续查看

标签

PostgreSQL , 绑定变量 , custom plan , generic plan


背景

PostgreSQL 数据库与商用数据库Oracle一样,支持绑定变量,绑定变量的目的是降低SQL硬解析的性能开销。

使用绑定变量后,执行变成这样的流程,一次prepare,后面都只需要bind和execute:

prepare      
      
bind      
      
execute      

同时,prepare statement也降低了优化器的plan开销,流程这样:

前5次执行时,采样 custom plan(每次都需要根据SQL输入的变量,规划最佳plan tree),并增加custom plan次数计数,平均COST计数。

第六次开始,就会生成generic plan,也就是说后面不再主动重新规划最佳plan tree,而是使用plan cache,将变量代入plan cache,直接通过plan cache产生这次bind 变量计算得到的COST,这个COST与custom plan的平均COST对比,如果COST小于或等于custom plan COST的1.1倍,则使用这个plan tree执行。否则才会主动进行custom plan,并继续累加custom plan次数计数,平均COST计数。

原理详见:

《执行计划选择算法 与 绑定变量 - PostgreSQL prepared statement: SPI_prepare, prepare|execute COMMAND, PL/pgsql STYLE: custom & generic plan cache》

但是到底执行几次custom plan更好,这个不同的数据或和用户前几次调用有关,浙江直接导致后面的generic plan的选择和效率。

默认PostgreSQL是硬编码,5次,PostgreSQL 商用版本EPAS(阿里云ppas)允许用户自定义custom plan的次数。

PostgreSQL 商用版本EPAS(阿里云ppas),用户自定义custom plan的次数

edb_custom_plan_tries

你可以在会话层面设置edb_custom_plan_tries 参数,也可以在用户、库、实例 层面设置。

Parameter Type: Numeric

Default Value: 5

Range: {0 | 100}

Minimum Scope of Effect: Per session

When Value Changes Take Effect: Immediate

Required Authorization to Activate: Session User

This configuration parameter controls the number of custom execution plans considered by the planner before the planner settles on a generic execution plan.

When a client application repeatedly executes a prepared statement, the server may decide to evaluate several execution plans before deciding to choose a custom plan or a generic plan.

  • A custom plan is a plan built for a specific set of parameter values.

  • A generic plan is a plan that will work with any set of parameter values supplied by the client application.

By default, the optimizer will generate five custom plans before evaluating a generic plan. That means that if you execute a prepared statement six times, the optimizer will generate five custom plans, then one generic plan, and then decide whether to stick with the generic plan.

In certain workloads, this extra planning can have a negative impact on performance. You can adjust the edb_custom_plan_tries configuration parameter to decrease the number of custom plans considered before evaluating a generic plan. Setting edb_custom_plan_tries to 0 will effectively disable custom plan generation.

Consider the following query:

PREPARE custQuery AS SELECT * FROM customer WHERE salesman >= $1

The $1 token in this query is a parameter marker - the client application must provide a value for each parameter marker each time the statement executes.

If an index has been defined on customer.salesman, the optimizer may choose to execute this query using a sequential scan, or using an index scan. In some cases, an index is faster than a sequential scan; in other cases, the sequential scan will win. The optimal plan will depend on the distribution of salesman values in the table and on the search value (the value provided for the $1 parameter).

When the client application repeatedly executes the custQuery prepared statement, the optimizer will generate some number of parameter-value-specific execution plans (custom plans), followed by a generic plan (a plan that ignores the parameter values), and then decide whether to stick with the generic plan or to continue to generate custom plans for each execution. The decision process takes into account not only the cost of executing the plans, but the cost of generating custom plans as well.

参考

《执行计划选择算法 与 绑定变量 - PostgreSQL prepared statement: SPI_prepare, prepare|execute COMMAND, PL/pgsql STYLE: custom & generic plan cache》

《PostgreSQL 函数调试、诊断、优化 & auto_explain》

https://www.enterprisedb.com/docs/en/10.0/EPAS_Guide_v10/EDB_Postgres_Advanced_Server_Guide.1.27.html#pID0E0GNF0HA

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Visual Studio 外请版本管理插件 - AnkhSVN
Visual Studio 外请版本管理插件 - AnkhSVN 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
875 0
支付宝小程序自定义弹窗插件wcPop|模态弹窗model|弱提示Toast
支付宝小程序弹窗插件wcPop|小程序自定义弹窗组件|提示框alert、确认框confirm及prompt、toast提示 请原谅我在这里吐槽下,微信小程序、支付宝小程序官方提供的交互反馈弹窗  如:提示框alert、确认框confirm及prompt、toast弱提示等插件功能比较有限,很多想要的效果都达不到。
6325 0
前沿分享|阿里云资深技术专家 魏闯先:AnalyticDB PostgreSQL年度新版本发布
本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中,阿里云资深技术专家 魏闯先关于“AnalyticDB PostgreSQL年度新版本发布”的分享。
417 0
正尝试安装的adobe flash player不是最新版本
正尝试安装的adobe flash player不是最新版本: [HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer\SafeVersions]将"9.0"=dword:00400000" 项删除,。
673 0
创建卡券模板接口(alipay.pass.template.add)JAVA版本小样
官方接口文档:https://docs.open.alipay.com/199/105250/  基本操作流程  1.创建应用等流程不概述了,调用该接口主要第一步是模板设计:推荐使用卡券平(https://alipassprod.
609 0
Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画
原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html 自定义转场可以创建自定义动画。
1066 0
+关注
德哥
公益是一辈子的事, I'm digoal, just do it.
2153
文章
245
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
相关文档: 云数据库 OceanBase 版 可信账本数据库 云原生关系型数据库 PolarDB PostgreSQL引擎
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载