1.分段调试

  面对长的SQL,出错时一般直接看定位的行号,有时候不出错但是没数据时,应该尝试分段调试,很长的SQL嵌套很多的子查询时,一个一个子查询进行分别调试,看哪一步子查询出了问题,层层推进

2.日志查看

  通常情况下,日志都是很重要的指示。有时候一些莫名其妙的错误时,错误信息看得懂却始终调不通时,不妨尝试查看运行的日志(例如相关的设置项,系统解析出来运行的SQL等)

  logview:ODPS的Debug工具

  官方介绍参考:https://help.aliyun.com/document_detail/27987.html?spm=5176.11065259.1996646101.searchclickresult.241853fa0Rnx3Z

  一般在运行节点时日志会打印出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中调试与问题排查技巧小结的更多相关文章

  1. PL/SQL Developer中调试oracle的存储过程

    作者:iamlaosong 唉,真土,曾经用Toad.一直用dbms_output.put_line调试存储过程,仅仅认为不方便,用上PL/SQL Developer后,习惯性的还是用这种方法.人都是 ...

  2. CentOS系统中的passwd命令实用技巧小结

    这篇文章主要介绍了Linux系统中的passwd命令实用技巧小结,是Linux入门学习中的基础知识,需要的朋友可以参考下   先来回顾一下passwd命令的基本用法: Linux passwd命令用来 ...

  3. C#中执行存储过程并在SQL server中调试

    1.编写存储过程 ) drop PROCEDURE [dbo].[sp_calcPci_of_baseRcd_GTmpTbl] CREATE PROCEDURE [dbo].[sp_calcPci_o ...

  4. 数据库SQL语句中根据当前日期计算其他日期小结

    问题描述:我们在写存储过程和函数的时候经常会碰到利用当前日期计算出上周开始日期.结束日期,或者计算上个月的开始日期结束日期等问题.最近写了几个存储过程和函数,其中都涉及到了日期计算问题,在这里简单做一 ...

  5. Eclipse中调试Android技巧

    Android eclipse中程序调试 一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的. 步骤如下. 1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键 ...

  6. iOS中崩溃调试的使用和技巧总结 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 在iOS开发调试过程中以及上线之后,程序经常会出现崩溃的问题.简单的崩溃还好说,复杂的崩溃就需要我们通过解析Cras ...

  7. 转 SQL集合函数中利用case when then 技巧

    SQL集合函数中利用case when then 技巧 我们都知道SQL中适用case when then来转化数据库中的信息 比如  select (case sex when 0 then '男' ...

  8. sql server中除数为零的处理技巧

    在sql server中做除法处理的时候,我们经常需要处理除数为零的情况,因为如果遇到这种情况的时候,sqlserver会抛出遇到以零作除数错误的异常,我们总不希望把这个异常显示给用户吧. 做个会报这 ...

  9. SQL Server优化技巧之SQL Server中的"MapReduce"

    日常的OLTP环境中,有时会涉及到一些统计方面的SQL语句,这些语句可能消耗巨大,进而影响整体运行环境,这里我为大家介绍如何利用SQL Server中的”类MapReduce”方式,在特定的统计情形中 ...

随机推荐

  1. Android SDK Manager无法更新的解决方案

    Android SDK Manager -> Tools -> Options HTTP Proxy Server:mirrors.neusoft.edu.cn HTTP Proxy Po ...

  2. 一条sql语句引发的遐想:select t.*, t.rowid from STUDENT t

    在学习oracle 过程当中,当在看tables时,比如STUDENT,右击——查看——查询,会自动有这样的一条查询语句: select t.*, t.rowid from STUDENT_TJB t ...

  3. 我的第一个个人博客网站 -> wizzie.top

    从去年下半年实习结束,到找到第一个属于自己的工作,我就开始着手搭建自己的网站. 使用阿里云学生服务器,域名,备案解析后,开始设计网站结构和页面布局. 因为临近毕业,网站真的是写的页面怎么多怎么写,所以 ...

  4. openCV 色彩空间

    ---恢复内容开始--- 1.使用cv2.inrange()获取某个范围内的图像取值,指定某个通道的最小值和最大值 import numpy as np def color_space(image): ...

  5. vue 环境的搭建及初始化项目

    其实超级简单,虽然网上很多,但是我顺便记录下相当于做笔记吧 1nodejs 的安装, 在node官网下载,点击安装,安装的时候最好选择路径在d盘 2设置环境变量 我的电脑-->属性-->系 ...

  6. JAVA 设计模式遵循的六大基本准则

    JAVA 设计模式遵循的六大基本准则 一.单一职责原则:(Single Responsibility Pinciple)  一个类只负责一项职责. 当超过一项职责需要负责时,需要增加新的类来负责新的职 ...

  7. ipa的plist文件查看

    1.ipa包解压缩:右键.ipa包,使用[归档实用工具/unarchiver]打开 2.进入解压缩后的payload目录,右键ipa包-显示包内容 3.找到info.plist文件,直接拖拽出来 4. ...

  8. [20180123]测试SQLNET.EXPIRE_TIME参数.txt

    [20180123]测试SQLNET.EXPIRE_TIME参数.txt --//曾经写过一篇linux内核网络参数测试tcp_keepalive,链接http://blog.itpub.net/26 ...

  9. python第五十天--paramiko

    python通过paramiko实现,ssh功能 import paramiko ssh =paramiko.SSHClient()#创建一个SSH连接对象 ssh.set_missing_host_ ...

  10. EF 排序扩展

    public static class LinqOrderEx { private static IOrderedQueryable<T> OrderingHelper<T>( ...