CV执行过程
- 计算视图激活时,生成Stored Model
- SELECT查询时:
- 首先将Stored Model实例化为runtime Model
- 计算引擎执行优化,将runtime Model转换为Optimized Runtime Model
- Optimized Runtime Model通过SQL Optimizer进行优化
计算引擎优化
特性 | 说明 |
---|---|
Join cardinality 指定Join的连接基数 | 有可能实现Join剪枝,提高性能并减少临时内存消耗 |
Optimized join columns 优化连接列 | 允许优化连接列,减少Join节点后需处理的数据量 |
Dynamic joins 动态连接 | 动态减少Join字段,减少Join节点处理数据量 |
Union Node Pruning Union剪枝 | 允许Union数据源剪枝,提升性能 |
column pruning 列剪枝 | 计算视图固有特性,引擎会在前期移除任何对结果不需要的字段 |
计算引擎优化
设置Join基数
出现Join剪枝前提:
- SELECT字段不在要剪掉的表中
- Join类型是外连接、引用连接、文本连接
- 要剪掉的表的Joina基数是1
优化连接字段
连接字段前枝前提:
- The join field is not requested by the query.
- Only fields from one of the join partners are requested by the query.
- The join is either an outer join, referential join, or text join.
- The cardinality to the join partner from which none of the fields are requested is set to 1.
设置动态连接
- 执行时Join时,连接列不是视图定义时的所有连接列,而是仅需要的连接列(连接条件是动态的)
- 动态连接与静态连接执行的结果可能不一致,在使用前需明确其影响
- 设置动态连接SELECT查询时,必须要用到至少一个连接字段,否则会报执行时错误
Union节点剪枝
- Constant mapping
- Pruning configuration table
使用Hints
在语句层面配置
SELECT * FROM CV1 WITH HINT(NO_CALC_VIEW_UNFOLDING);
在CV层面配置
名称 | 值 | 使用场景 |
query_level_sql_hints | 逗号分隔的hint | 仅对unfolding的视图有效,若未展开,这些hint不起作用 |
qo_pop_hints | 逗号分隔的hint | 仅对未展开且设置了在SQL引擎中执行的视图才有效,hint仅对SQL引擎能优化的部分生效 |
no_calc_view_unfolding | 1 | 用于阻止视图展开 |
sql_opt_hints | CALC_VIEW_UNFOLDING | 在全局禁止视图展开的使用 |
说明
- Hint名称必须小写
- hints必须在最上层计算视图上设置
- 通过视图M_CE_CALCSCENARIO_HINTS监控CV上的HINT设置
Execute in SQL Engine
无特殊配置情况下
配置Execute in SQL Engine后
怎么确定Query是否展开
通过 Explain Plan功能,如果计划内是具体的实体表,则视图是展开的
若计划内是计算视图,则没有展开
Static Cache
使用静态缓存前提:
- 视图配置Enable Cache选项
- 视图可以展开
- 视图没有granularity-tracking calculations
- 查询要求使用static cache,即HINT(RESULT_CACHE)
静态缓存监控:M_RESULT_CACHE、RESULT_CACHE、RESULT_CACHE_COLUMNS
视图检查监控
CHECK_ANALYTICAL_MODEL ('<action>', '<schema_name>', '<object_name>',
<return_object>)
性能相关建议
建议:
- 设置Join基数
- 优化Join连接字段
- scale-out场景Join字段是分区字段
不建议:
- Join字段是计算列
- 在计算列上进行数据过滤
- Measures in join conditions
- Measures in filter expressions
- Data type conversion in filters