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. loadrunner 场景设计-负载生成器管理

    场景设计-负载生成器管理 by:授客 QQ:1033553122 1  简介 当执行一个场景时,Controller把场景中的每个用户配到负载生成器(Load generator). 所谓的负载生成器 ...

  2. Ubuntu16.04升级 Ubuntu18.04

    1.更新资源 $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt dist-upgrade 2.安装update-manager-core ...

  3. python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)

    python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...

  4. Apache POI导出excel表格

    项目中我们经常用到导出功能,将数据导出以便于审查和统计等.本文主要使用Apache POI实现导出数据. POI中文文档 简介 ApachePOI是Apache软件基金会的开放源码函式库,POI提供A ...

  5. The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured

    springboot 8080端口被占用报错:The Tomcat connector configured to listen on port 8080 failed to start. The p ...

  6. EntityFramework Code-First 简易教程(八)-------一对一

    配置一对一(One-to-One)关系: 两个实体中,如果一个实体的一个实例与另一个实体相关,则我们就叫做一对一关系 查看如下代码: public class Student { public Stu ...

  7. Android中SELinux的TE简介【转】

    转自:https://blog.csdn.net/murphykwu/article/details/52457667 selinux的概念如上一篇链接所示: http://www.cnblogs.c ...

  8. ISP与DSP的区别【转】

    https://www.cnblogs.com/lifan3a/articles/5006760.html ISP 是Image Signal Processor 的简称,也就是图像信号处理器.而DS ...

  9. Unity LayerMask 的位运算

    Unity的Layer Unity是用 int32来表示32个Layer层,int32用二进制来表示一共有32位. 0000 0000 0000 0000 0000 0000 0000 0000 31 ...

  10. Elasticsearch安装图形化界面工具Head插件

    1.Head插件介绍以及下载 Head插件是Elasticsearch的图形化界面工具,通过此插件可以很方便的对数据进行增删改查等数据交互操作.在Elasticsearch5.x版本以后,head插件 ...