本文翻译整理自:SQL执行过程
SQL执行过程
一个SQL的执行过程中,依赖以下内容:
- 启动节点:客户端在提交查询时连接到的节点
- 优化器:评估运行查询的不同策略并选择最佳策略
- 执行计划:查询将执行的步骤或计划
- 执行节点:参与执行特定SQL语句的任何节点,通常包含启动节点。
过程如下
查询提交
vertica任何一个节点都可以成为启动节点。
- 在此节点可以做的优化是打开负载均衡,vertica支持原生负载均衡。若客户端连接,需要同时在客户端和本地集群打开负载均衡。
设置函数为:set_load_balance_policy
规划执行计划
优化器考虑:
- 不同的查询重写
- 投影组合
- 谓词的应用顺序
- 执行join和group by的顺序
优化器会执行统计分析,选择成本最低的计划作为执行计划。
可以在查询前面使用EXPLAIN关键字来查看优化程序的计划,而无需执行查询。也可以联合查询QUERY_PROFILES
和PROJECTION_USAGE
系统表以获取更多信息。
可以通过联合查询QUERY_PROFILES
和RESOURCE_ACQUISITIONS
系统表,获取查询中使用的一些资源信息,包括打开文件数,线程数,内存使用等信息,以更好的优化查询。
以上内容可参考:Looking Under the Hood at Vertica Queries
vertica支持用户影响优化器以在执行给定查询时做出更好的选择。常见的使用方法是在SQL中使用提示hits,以及使用direct query。
下发执行计划
优化器确定了执行计划后,会将查询计划分解为较小的计划,然后启动节点将这些计划分发给所有参与执行的节点。
获取执行结果
每个执行节点执行获得到的查询计划的一部分,执行完成后,将结果返回给启动节点,启动节点汇总后返回给用户。