暂无图片
分享
Oracle
2023-05-22
软硬解析的概念

软硬解析的概念

收藏
分享
2条回答
默认
最新
Y
YanLang

SQL只负责告诉数据库要查什么,但一般不会告诉它要怎么查。

硬解析

对于一个SQL语句,优化器首先需要进行词法分析、语法分析,将其转换为pg能识别的查询树,再对其解析重写和优化,生成执行计划树,执行器才能知道如何执行该语句,这种完整的解析叫做硬解析。

软解析
显然,如果每个语句每次都执行如此复杂的步骤,效率会很低,因此pg会将SQL解析出来的执行计划缓存在进程内存中,符合一定条件时可以直接使用,提高效率,这种解析叫做软解析。

PG绑定变量SQL解析的 五次机制

五次机制是为了防止数据倾斜,导致使用低效的执行计划。

前5次执行的SQL:都根据实际传入变量生成执行计划(叫做custom plan),属于硬解析。
第6次执行的SQL:生成一个通用的执行计划(generic plan),并与前5次执行计划比较。
如果不差于前5次:固定第6次的执行计划,后续即使参数再发生变化,该SQL的执行计划也不会再变,属于软解析。
如果差于前5次中任何一个执行计划,以后每次都重新生成执行计划,即都是硬解析。
强制使用软/硬解析

PG 12 中引入了 force_custom_plan 参数,有以下可选值:

auto:默认,即按照五次机制处理
force_custom_plan:永远进行硬解析,适用于有数据倾斜且性能和稳定性要求高的SQL
force_generic_plan:永远使用generic plan,适用于没有数据倾斜或者性能和稳定性要求不高的SQL 

暂无图片 评论
暂无图片 有用 0
暂无图片
Oracle
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏