【SQL】MaxComputer中调试与问题排查技巧小结
1.分段调试
面对长的SQL,出错时一般直接看定位的行号,有时候不出错但是没数据时,应该尝试分段调试,很长的SQL嵌套很多的子查询时,一个一个子查询进行分别调试,看哪一步子查询出了问题,层层推进
2.日志查看
通常情况下,日志都是很重要的指示。有时候一些莫名其妙的错误时,错误信息看得懂却始终调不通时,不妨尝试查看运行的日志(例如相关的设置项,系统解析出来运行的SQL等)
logview:ODPS的Debug工具
一般在运行节点时日志会打印出Logview:

当然,Logview其实是有规律的,通过参数分析也能得到instanceID等信息。如果有时候出现如下权限的现象:

使用命令wait instanceID即可!
Logview页面参数简介:

其他显而易见的就不赘述了,task字段比较容易理解,不再赘述:
Diagnosis就是诊断信息(包括资源诊断,长尾诊断)

我们重点关注的就是detail,task类型讲解参见本文第4点。
任意展开一个Instance:

需要关注的参数的介绍:

还有需要注意的是Logview系统只保留7天,7天之后还想分析需要先保存,再上传进行查看:

logview诊断方法:
(1)错误:这个通过控制台的日志或者Logview的result错误代码和错误提示,相对排查比较直观
(2)慢任务排队:这个可以通过logview的status查看排队状态,通过show p 查看所有Instance,通过top instance查看当前正在执行的作业信息
3.样本数据比对
有时候比如一些表连接操作等一直连接不上,语法日志方面又没问题但就是没数据,那不如取出几条样本数据来比对,看到真实数据有时候可以比较直观的看到问题所在
常见MaxComputer错误:
https://yq.aliyun.com/articles/616705
4.长尾问题调优
官方文档参考:https://help.aliyun.com/document_detail/51020.html?spm=5176.10695662.1996646101.searchclickresult.65ac2d43zPlfxk
https://help.aliyun.com/video_detail/91702.html?spm=5176.11065259.1996646101.searchclickresult.300e2edfH6w6qH
1.切入点:logview
通过details可以定位长尾的位置:

// task类型:
- 在每个Task中,可以看到Task的名字,对于M1,表示这是一个Map task,R5_4中的4表示它依赖J4执行结束才能开始执行。同理,J4_1_2_3表示Join4这个阶段要依赖M1、M2、M3三个task完全成才能启动运行。
2.常见解决方案
·经典word_count的长尾:
SELECT a.key
, COUNT(*) AS cnt
FROM a
GROUP BY a.key
使用groupby参数,进行热点Key的打散:
set odps.sql.groupby.skewindata=true
此方法仅对长尾问题比较严重的有效!(分钟级内慎用!)
DISTINCT长尾:
DISTINCT不会再shuffer进行一次聚合操作,会全部传入给reduce进行处理!相对没有group by效率高!
采用去重统计的办法:
--原始SQL,不考虑Uid为空
SELECT COUNT(uid) AS Pv
, COUNT(DISTINCT uid) AS Uv
FROM UserLog;
一个方式是改写,把DISTINCT改成普通的COUNT:
SELECT SUM(PV) AS Pv
, COUNT(*) AS UV
FROM (
SELECT COUNT(*) AS Pv
, uid
FROM UserLog
GROUP BY uid
) a;
如果发现是特殊值引起的长尾(例如NULL特别多),则可以考虑先过滤再处理
动态分区长尾:
通过关闭reshuffer参数(默认开启的),来取消减少rudece的个数
JOIN长尾:
首先考虑能不能用mapjoin;
第二考虑分而治之,因为长尾原因就是热点KEY太多,把热点KEY通过GROUP BY 、ORDER BY找到后,将他们分开处理;

更多请参考社区文档与官方文档!
【SQL】MaxComputer中调试与问题排查技巧小结的更多相关文章
- PL/SQL Developer中调试oracle的存储过程
作者:iamlaosong 唉,真土,曾经用Toad.一直用dbms_output.put_line调试存储过程,仅仅认为不方便,用上PL/SQL Developer后,习惯性的还是用这种方法.人都是 ...
- CentOS系统中的passwd命令实用技巧小结
这篇文章主要介绍了Linux系统中的passwd命令实用技巧小结,是Linux入门学习中的基础知识,需要的朋友可以参考下 先来回顾一下passwd命令的基本用法: Linux passwd命令用来 ...
- C#中执行存储过程并在SQL server中调试
1.编写存储过程 ) drop PROCEDURE [dbo].[sp_calcPci_of_baseRcd_GTmpTbl] CREATE PROCEDURE [dbo].[sp_calcPci_o ...
- 数据库SQL语句中根据当前日期计算其他日期小结
问题描述:我们在写存储过程和函数的时候经常会碰到利用当前日期计算出上周开始日期.结束日期,或者计算上个月的开始日期结束日期等问题.最近写了几个存储过程和函数,其中都涉及到了日期计算问题,在这里简单做一 ...
- Eclipse中调试Android技巧
Android eclipse中程序调试 一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的. 步骤如下. 1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键 ...
- iOS中崩溃调试的使用和技巧总结 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 在iOS开发调试过程中以及上线之后,程序经常会出现崩溃的问题.简单的崩溃还好说,复杂的崩溃就需要我们通过解析Cras ...
- 转 SQL集合函数中利用case when then 技巧
SQL集合函数中利用case when then 技巧 我们都知道SQL中适用case when then来转化数据库中的信息 比如 select (case sex when 0 then '男' ...
- sql server中除数为零的处理技巧
在sql server中做除法处理的时候,我们经常需要处理除数为零的情况,因为如果遇到这种情况的时候,sqlserver会抛出遇到以零作除数错误的异常,我们总不希望把这个异常显示给用户吧. 做个会报这 ...
- SQL Server优化技巧之SQL Server中的"MapReduce"
日常的OLTP环境中,有时会涉及到一些统计方面的SQL语句,这些语句可能消耗巨大,进而影响整体运行环境,这里我为大家介绍如何利用SQL Server中的”类MapReduce”方式,在特定的统计情形中 ...
随机推荐
- JS点击按钮下载文件
通过form表单提交: 由于ajax函数的返回类型只有xml.text.json.html等类型,没有“流”类型,所以通过ajax去请求该接口是无法下载文件的,所以我们创建一个新的form元素来请求接 ...
- JavaScript大杂烩15 - 使用JQuery(下)
前面我们总结了使用各种selector拿到了jQuery对象了,下面就是对这个对象执行指定的行为了. 2. 操作对象 - 行为函数action 执行jQuery内置的行为函数的时候,JQuery自动遍 ...
- sqlserver序列定时初始化
1.创建序列 2.序列初始化存储过程 create procedure proDemo as begin alter sequence dbo.序列名 restart with 0; end 3.创建 ...
- AspNetCore2身份验证
1.在Startup类的Configure方法,添加身份验证的中间件AuthenticationMiddleware app.UseAuthentication(); 2.在Startup类的Conf ...
- php报错 【 Call to undefined function imagecreatetruecolor()】
刚才在写验证码的时候,发现报错,然后排查分析了一下,原来是所用的php版本(PHP/5.3.13)没有开启此扩展功能. 进入php.ini 找到extension=php_gd2.dll ,将其前面的 ...
- orcale 使用创建日期排序然后分页每次取排序后的固定条数
需求: 一个使用mybatis分页插件的分页列表, 现在要求新增一条数据或者修改一条数据后,显示在最前端 思路: 使用sql , 先将查询出来的数据排序, 然后使用rownum > page*s ...
- Alpha冲刺! Day11 - 砍柴
Alpha冲刺! Day11 - 砍柴 今日已完成 晨瑶: gitkraken团队协作流程教程基本完工. 昭锡:将主页包含UI界面.逻辑处理等与底部栏整合,学习Retrofit网络库. 永盛:更多 c ...
- JS中=>,>>>是什么意思
最近经常看到 JS中=>,符号,于是查了一下别人的博客 =>是es6语法中的arrow function 举例:(x) => x + 6 相当于 function(x){ ret ...
- Lock和Condition在JDK中LinkedBlockingQueue的应用
Lock和Condition在JDK中LinkedBlockingQueue的应用,核心源码注释解析如下: import java.util.concurrent.LinkedBlockingQueu ...
- 统计单词数 OpenJ_Bailian - 4030(字符串处理)
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中 ...