MaxCompute 费用暴涨之存储压缩率降低导致SQL输入量变大
现象:同样的SQL,每天处理的数据行数差不多,但是费用突然暴涨甚至会翻数倍。
分析:
我们先明确MaxCompute SQL后付费的计费公式:一条SQL执行的费用=扫描输入量 ️ SQL复杂度 ️ 0.3(¥/GB)。
变量主要是输入量和复杂度,如果SQL没有变更的情况下复杂度度也没有变化,那么费用上涨主要原因就是输入量增加,因此我们侧重从输入量去排查是什么环节导致来了输入量的增加。
排查:
挑两个job的Logview查看输入量,推荐用MaxCompute Studio的作业对比功能查看,作业对比功能使用方式可以参考《MaxCompute Studio使用心得系列7——作业对比》。输入量如下:

如上图,数据行数差别没有翻倍,但是大小(bytes)翻倍,基本可以排除是因为数据量暴增导致。那么数据行数增量不大,但是数据大小翻倍,无疑翻倍的这些数据肯定是有了变化,比如某些列的值长度变大那么size就变大,这个可以从这些数据的上游链路去查是否有可能某些列的值长度变的很大,如果这个也能排除,那么就可以考虑存储压缩率了。
存储在MaxCompute里的数据是经过压缩后存放的,而MaxCompute的存储计费和SQL计费涉及到的数据量都是按这些数据存在MaxCompute里压缩后的量统计。
MaxCompute数据存储压缩没有固定比例,跟表数据有关,如平均字段长度、唯一值个数、数据相似度等,一般说来,每个表中都有存在1个或几个对存储空间影响比较的字段,这些字段就是影响压缩效果的关键(可以参考相关的存储介绍文章)。知道这个知识点,我们再去排查费用变化的这一天,输入的这些数据产出的方式变化情况。
数据产出方式变化我们遇到的两个例子:
- 数据中的时间字段计算方式变化。原来存储时会处理成" yyyy-mm-dd 00:00:00"格式,此时针对这个字段yyyy-mm-dd这段重复度高,对压缩算法比较友好,最终数据的压缩率高。之后对这个字段就不进行任何处理直接是按实际时间"yyyy-mm-dd hh:mi:ss",重复率底,存储压缩率就降低,从而数据的size就更大,最终SQL扫描这部分数据时输入量也就变大所以费用就上涨。
- 数据中的敏感字段计算方式变化。原来存储时不经过任何处理,这个字段的数据相对比较有序,压缩率也比较高。之后这个字段经过自定义函数进行加密,加密后的数据变成随机无序,压缩率就底,数据的size也就更大,最终SQL扫描这部分数据时输入量也随之更大费用就上涨。
可能还有其他的情况目前还没遇到,大家如果出现这类问题,不妨自己做一下分析。
本文作者:海清
本文为云栖社区原创内容,未经允许不得转载。
MaxCompute 费用暴涨之存储压缩率降低导致SQL输入量变大的更多相关文章
- MaxCompute 费用暴涨之新增SQL分区裁剪失败
现象:因业务需求新增了SQL任务,这SQL扫描的表为分区表,且SQL条件里表只指定了一个分区,按指定的分区来看数据量并不大,但是SQL的费用非常高.费用比预想的结果相差几倍甚至10倍以上. 若只知道总 ...
- 利用InformationSchema与阿里云交易和账单管理API实现MaxCompute费用对账分摊统计
利用MaxCompute InformationSchema与阿里云交易和账单管理API 实现MaxCompute费用对账分摊统计 一.需求场景分析 很多的企业用户选择MaxCompute按量付费模式 ...
- 【转】导致SQL执行慢的原因
索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引. 索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左 ...
- 导致SQL执行慢的原因
索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引. 索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左 ...
- 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题
需要学习的技术很多,要自学新知识也不是一件容易的事,选择一个自己比较感兴趣的会是一个比较好的开端,于是,打算学一学分布式系统. 带着问题,有目的的学习,先了解整体架构,在深入感兴趣的细节,这是我的计划 ...
- Response.Write()方法响应导致页面字体变大的解决办法
关于ASP.NET中用Response.Write()方法响应导致页面字体变大的解决办法 最近研究了ASP.NET,发现一个问题,比方说在页面里面有个Button,要点击以后要打开新窗口,而且 ...
- 最新版SEMCMS_PHP_3.5 过滤不严导致sql注入
一.漏洞分析 在分析过程中看到网上已经有人发现semcms V2.4存在过滤不严导致sql注入的漏洞,不知道咋还没改,而且最新版过滤的关键字更少了. 首先查看首页文件index.php的代码 < ...
- 服务器重启可能会导致SQL Server中部分数据库变为single user mode
今天检查公司生产服务器的SQL Server数据库,惊讶的发现有三个生产数据库变为了single user mode.奇怪的是没有任何人和程序执行过SQL语句将这三个数据库设置为single user ...
- Drupal V7.3.1 框架处理不当导致SQL注入
这个漏洞本是2014年时候被人发现的,本着学习的目的,我来做个详细的分析.漏洞虽然很早了,新版的Drupal甚至已经改变了框架的组织方式.但是丝毫不影响对于漏洞的分析.这是一个经典的使用PDO,但是处 ...
随机推荐
- TZ_05_Spring_annotation常见注解
Spring常用的注解大全和解释 注解 解释 @Controller 组合注解(组合了@Component注解),应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类 ...
- 微信小程序示例
http://www.cnblogs.com/ihardcoder/p/6097941.html http://www.wxapp-union.com/ http://blog.csdn.net/li ...
- Sublime keymap 个性修改
[ // 保存全部 {"keys": ["ctrl+alt+s"], "command": "save_all"}, / ...
- 学习写Js的动画
说起前端,要说动画是最有乐子的东西了.玩好动画一定会很轻易的享受到前端的乐趣. 这里我不会讲述什么css3 的 transform animation keyframes,也不会讲述jquery的an ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee[转]
1 2{<HeadFirst设计模式>之装饰模式 } 3{ 本单元中的类为被装饰者 } 4{ 编译工具: Delphi7.0 } 5{ E-Ma ...
- java并发系列(二)-----线程之间的协作(wait、notify、join、CountDownLatch、CyclicBarrier)
在java中,线程之间的切换是由操作系统说了算的,操作系统会给每个线程分配一个时间片,在时间片到期之后,线程让出cpu资源,由其他线程一起抢夺,那么如果开发想自己去在一定程度上(因为没办法100%控制 ...
- 深入浅析python中的多进程、多线程、协程
深入浅析python中的多进程.多线程.协程 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源 ...
- C# WPF 仿QQ靠近屏幕上方自动缩起功能实现
碰到了类似需求,但是上网查了一圈发现感觉要么很复杂,要么代码很臃肿,索性自己实现了一个 几乎和QQ是一模一样的效果,而且核心代码只有20行左右. 代码如下: using System; using S ...
- Binder对象死亡通知机制
本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/bin ...
- hive语句on和where一点小问题
hive join 后面必须=(0.13版本后支持,不支持like,<>),on后面如需加条件语句必须放到where中不然会产生错误结果 (可以一对多,一对一,不可以多对多‘会出现数据翻倍 ...