1. Cascade框架SQL优化器
新一代cascade框架的SQL优化器,面向全并行执行架构,代价优化CBO和规则优化RBO相结合,实现复杂SQL免调优。
cascade框架的SQL优化器具备以下功能:
• Top-Down路径搜索框架,搜索和路径选择更全面精准,避免出现局部查询路径最优解;
• 子查询自动改写为分布式JOIN, 实现并行计算,规避手工改写调优;
• SQL优化阶段定义动态分区裁剪,即支持确定性过滤条件,也支持参数化的过滤条件,减少I/O。
2. 向量化计算引擎
• 新一代计算引擎Odyssey,消除火山模型碎片化内存分配。
• 采用LLVM进行动态代码生成(CodeGen),提升表达式计算性能。
• 利用CPU的SIMD技术,指令级并行,进一步提升性能。
3. SQL诊断
在SQL执行比较慢时,可以对SQL进行诊断。
• 首先,pg_stat_activity是一个非常有用的视图,可以分析排查当前运行的SQL任务以及一些异常问题。pg_stat activity每行展示的是一个“process”的相关信息,这里的“process”可以理解为一个用户连接。
• 然后,通过pg_stat_activity视图查看当前耗时较长的SQL。
查看耗时较长的查询语句:
select current_timestamp - query_start as runtime, datname, usename, query from pg_stat_activity where state !='idle' order by 1 desc;
参数说明
• Runtime:语句执行的时长
• Datname:执行语句的数据库名
• Usename:执行语句的用户名
• Waiting:是否在等待
• waiting_reason:等待的原因
• query:执行的语句,有长度截断,可通过track_activity_query_size调整
4. 执行计划两种收集模式
• explain:显示执行计划,不真正执行语句,在计划中显示估算信息。
• Explain analyze:显示执行计划,并且真正执行语句,在计划中显示真实执行信息。
执行计划中常见算子:
• 扫描算子Scan:Seq Scan,index scan,Bitmap Index Scan + Bitmap Heap Scan
• 关联算子Join:Hash Join,Nested Loop Join,Merge Join
• 聚合算子Aggregate:Hash Aggregate,Group Aggregate
• 数据重分布算子Motion:Redistribute Motion,Broadcast Motion,Gather Motion
• 其他算子:Hash,Sort,Limit,Append,etc
5. 执行计划
SQL性能调优中,执行计划两种模式下的计划项目及含义说明如下:
• explain包含如下计划项目:
√ 算子名称:计划中算子节点的名字,以“->”开头进行缩进,如例子中的Seq Scan、Sort、Gather Motion等。
√ 算子属性:算子在本计划中的操作属性,如例子中的Sort Key:b,表示Sort算子的排序键是b列。
√ Cost:估算的代价,包含启动代价和总代价,中间用“...”间隔。
√ Rows:估算的行数。
√ width:估算的每行的宽度,单位字节。
√ optimizer:生成该计划的优化器名字,ADB PG具有优化器自适应功能,可能和用户设置的不一致。
• explain analyze包含如下计划项目:
√ actual time:实际执行时间,单位毫秒。
√ Actual rows:实际输出行数。
√ Planning time:实际生成执行计划的时间。
√ Slice memory:每个slice使用的内存情况。
√ Memory used:整个查询使用的内存情况。
√ Execution time:实际执行时间。
更多精彩内容,欢迎观看::《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版解析与实践(下)——三、SQL性能调优(下):https://developer.aliyun.com/article/1222844?groupCode=certification