Apache Spark 2.2中基于成本的优化器(CBO)(转载)
一个启发性的例子
统计信息收集框架
ANALYZE TABLE 命令
1 ANALYZE TABLE table_name COMPUTE STATISTICS
上面的 SQL 语句可以收集表级的统计信息,例如记录数、表大小(单位是byte)。这里需要注意的是ANALYZE, COMPUTE, and STATISTICS都是保留的关键字,他们已特定的列名为入参,在metastore中保存表级的统计信息。
1 ANALYZE TABLE table_name COMPUTE STATISTICS FOR COLUMNS column-name1, column-name2, ….
需要注意的是在ANALYZE 语句中没必要指定表的每个列-只要指定那些在过滤/join条件或group by等中涉及的列
统计信息类型
过滤选择
- 对于逻辑表达式AND,他的过滤选择是左条件的选择乘以右条件选择,例如fs(a AND b) = fs(a) * fs (b)。
- 对于逻辑表达式OR,他的过滤选择是左条件的选择加上右条件选择并减去左条件中逻辑表达式AND的选择,例如 fs (a OR b) = fs (a) + fs (b) - fs (a AND b) = fs (a) + fs (b) – (fs (a) * fs (b))
- 对于逻辑表达式NOT,他的过滤因子是1.0 减去原表达式的选择,例如 fs (NOT a) = 1.0 - fs (a)
- 等于操作符 (=) :我们检查条件中的字符串常量值是否落在列的当前最小值和最大值的区间内 。这步是必要的,因为如果先使用之前的条件可能会导致区间改变。如果常量值落在区间外,那么过滤选择就是 0.0。否则,就是去重后值的反转(注意:不包含额外的柱状图信息,我们仅仅估计列值的统一分布)。后面发布的版本将会均衡柱状图来优化估计的准确性。
- 小于操作符 (<) :检查条件中的字符串常量值落在哪个区间。如果比当前列值的最小值还小,那么过滤选择就是 0.0(如果大于最大值,选择即为1.0)。否则,我们基于可用的信息计算过滤因子。如果没有柱状图,就传播并把过滤选择设置为: (常量值– 最小值) / (最大值 – 最小值)。另外,如果有柱状图,在计算过滤选择时就会加上在当前列最小值和常量值之间的柱状图桶密度 。同时,注意在条件右边的常量值此时变成了该列的最大值。
Join基数
- 左外连接(Left-Outer Join): num(A LOJ B) = max(num(A IJ B),num(A)) 是指内连接输出基和左外连接端A的基之间较大的值。这是因为我们需要把外端的每条纪录计入,虽然他们没有出现在join输出纪录内。
- Right-Outer Join: num(A ROJ B) = max(num(A IJ B),num(B))
- Full-Outer Join: num(A FOJ B) = num(A LOJ B) + num(A ROJ B) - num(A IJ B)
最优计划选择
查询的性能测试和分析
配置及方法学
1 SELECT 2 i_item_id, 3 i_item_desc, 4 s_store_id, 5 s_store_name, 6 sum(ss_net_profit) AS store_sales_profit, 7 sum(sr_net_loss) AS store_returns_loss, 8 sum(cs_net_profit) AS catalog_sales_profit 9 FROM 10 store_sales, store_returns, catalog_sales, date_dim d1, date_dim d2, date_dim d3, 11 store, item 12 WHERE 13 d1.d_moy = 4 14 AND d1.d_year = 2001 15 AND d1.d_date_sk = ss_sold_date_sk 16 AND i_item_sk = ss_item_sk 17 AND s_store_sk = ss_store_sk 18 AND ss_customer_sk = sr_customer_sk 19 AND ss_item_sk = sr_item_sk 20 AND ss_ticket_number = sr_ticket_number 21 AND sr_returned_date_sk = d2.d_date_sk 22 AND d2.d_moy BETWEEN 4 AND 10 23 AND d2.d_year = 2001 24 AND sr_customer_sk = cs_bill_customer_sk 25 AND sr_item_sk = cs_item_sk 26 AND cs_sold_date_sk = d3.d_date_sk 27 AND d3.d_moy BETWEEN 4 AND 10 28 AND d3.d_year = 2001 29 GROUP BY 30 i_item_id, i_item_desc, s_store_id, s_store_name 31 ORDER BY 32 i_item_id, i_item_desc, s_store_id, s_store_name 33 LIMIT 100
没使用CBO的Q25
使用了CBO的Q25
TPC-DS 查询性能
结论
延伸阅读
- 原理就是较小的关系更容易放到内存
- <=> 表示‘安全的空值相等’ ,如果两边的结果都是null就返回true,如果只有一边是null就返回false
- P. Griffiths Selinger, M. M. Astrahan, D. D. Chamberlin, R. A. Lorie, T. G. Price, “Access Path Selection in a Relational Database Management System”, Proceedings of ACM SIGMOD conference, 1979
- weight(权值)是调优参数,可以通过配置 spark.sql.cbo.joinReorder.card.weight (默认是0.7)
转载自 http://www.aboutyun.com/thread-22746-1-1.html
英文博客地址 https://databricks.com/blog/2017/08/31/cost-based-optimizer-in-apache-spark-2-2.html
Apache Spark 2.2中基于成本的优化器(CBO)(转载)相关推荐
- oracle成本cbo,基于成本的优化器(CBO)
本短文着意于消除一些关于基于成本的优化器(CBO)的错误说法,强调一般的错误和问题. Background 背景 ~~~~~~~~~~ 为了执行任何一个SQL语句,Oracle都要先导出一个" ...
- oracle optimizer_features_enable,Oracle Optimizer:迁移到使用基于成本的优化器—–系列2.1-数据库专栏,ORACLE...
oracle optimizer:迁移到使用基于成本的优化器-–系列2.1 系列之二包含影响优化器选择执行计划的初始化参数和oracle内部隐藏参数,合理设置这些参数对于优化器是相当重要的. 6.影响 ...
- 【Oracle】看懂执行计划之基于成本的优化器(CBO)
[Oracle]看懂执行计划之基于成本的优化器(CBO) 基于代价的优化方式 Cost-Based Optimization,简称 CBO.CBO 选择目标 SQL 执行计划的判断原则是成本,从目 ...
- Oracle中的优化器--CBO和RBO
Oracle中的优化器--CBO和RBO Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的 ...
- 一文带你了解MySQL之基于成本的优化
前言 我们之前老说MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询,怎么就带大家详细了解一下 目录 一.什么是成本 二.单表查询的成本 2.1 ...
- MaxCompute理解数据、运算和用户的大脑:基于代价的优化器
摘要: 回顾大数据技术领域大事件,最早可追溯到06年Hadoop的正式启动,而环顾四下,围绕着数据库及数据处理引擎,业内充斥着各种各样的大数据技术.在云栖社区2017在线技术峰会大数据技术峰会上,阿里 ...
- SQL中基于代价的优化
还记得笔者在上篇文章无意中挖的一个坑么?如若不知,强烈建议看官先行阅读前面两文-<SparkSQL Join原理>和<Join中竟然也有谓词下推?> 第一篇文章主要分析了大数据 ...
- python网格搜索法_Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据...
介绍 在本教程中,我们将讨论一种非常强大的优化(或自动化)算法,即网格搜索算法.它最常用于机器学习模型中的超参数调整.我们将学习如何使用Python来实现它,以及如何将其应用到实际应用程序中,以了解它 ...
- oracle成本cbo,基于成本的优化--CBO
选择CBO的优化方式 默认条件下,CBO将SQL语句的吞吐量作为优化目标 三种不同的优化方式 ALL_ROWS:该优化方式是Oracle的默认模式,优化目标是实现查询的最大吞吐量 FIRST_ROWS ...
最新文章
- 什么是“软件架构设计”(推荐)
- 面试官问单表数据量大一定要分库分表吗?我们用六个字和十张图回答
- library not found for -lstdc++.6.0.9
- ROS入门-13.服务数据的定义与使用
- 也谈谈Javascript中的几个怪异特性(上)
- Aliware研究开篇
- 使用Windows远程桌面工具来远程连接控制Ubuntu系统
- 系统Model底层隐藏的坑
- 普通循环和numpy速率对比
- 商城数据库模板mysql_ecshop 2.7.3仿京东jd商城源码 最新模板jd整站带数据支付插件...
- 作业三 使用病毒分析工具对病毒进行分析
- varchar(1)的怪异现象
- L2行情接口怎么用最高效?
- 未能从dhcp服务器获得ip地址,当出现无法从DHCP服务器中获得地址的常见处理步骤...
- java 列表伸缩,微服务实例自动弹性伸缩实践
- 《中国合伙人》:致我们即将逝去的青春
- stm32配置wifi
- 【自动驾驶传感器融合系列】02自动驾驶中的多传感器同步理论
- nginx正向代理https
- 【强化学习论文合集】三十五.2021神经信息处理系统大会论文(NIPS2021)
热门文章
- 长二F发射神十二飞船圆满成功!三名航天员飞向空间站天和核心舱
- Nature指明大脑引流“废液”的确切路径
- 测试归测试,自动驾驶向个人全面开放依然长路漫漫
- 前沿科技山雨欲来,四大领域存创新机会
- 清华发布《中国AI发展报告2018》:中科院系统AI论文产出全球第一
- 人工智能名人堂第54期 | 深度学习鼻祖:Geoffrey Hinton
- 自动化对就业没有影响?看看这张图再说
- 数据结构7.5_有向无环图及其应用
- [Server] 服务器配置SSH登录邮件通知
- 5.2基于JWT的令牌生成和定制「深入浅出ASP.NET Core系列」