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 NDK编译之undefined reference to 'JNI_CreateJavaVM'

    利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...

  2. 微信小程序开发--路由切换,页面重定向

    这段时间开发了一个微信小程序,虽然小程序的导航API 官方文档写得很详细,但是在具体开发过程中还是会遇到很多不明白,或者一时转不过弯的地方. 1.页面切换传参,参数读取 1.1  wx.navigat ...

  3. Retrofit2 动态(静态)添加请求头Header

    Retrofit提供了两个两种定义HTTP请求头字段的方法即静态和动态.静态头不能改变为不同的请求,头的键和值是固定的且不可改变的,随着程序的打开便已固定. 动态添加 @GET("/&quo ...

  4. python中get pass用法

    python中getpass 模块的作用是输入密码不可见 运行到这脚本不继续运行下去, 打开pycharm中的terminal 如上图显示,password中有输入密码,但不显示

  5. scrapy系列(一)——Python 爬虫框架 Scrapy1.2 Windows 安装教程

    scrapy作为一个成熟的爬虫框架,网上有大量的相关教程供大家选择,尤其是关于其的安装步骤更是丰富的很.在这里我想记录下自己的相关经验,希望能给大家带来点帮助. 在scrapy0.24版之前,安装sc ...

  6. 移动端web页面开发常用的头部标签设置

    在移动端web页面开发中,我们常需要设置各种头部标签以帮助浏览器更好的解析页面,将页面完美呈现,这里列出了工作中常用的各种头部标签,以备查询. viewport <meta name=" ...

  7. 通用triggerEvent方法

    假设有一个id为testA的a元素,然后有以下代码(jquery已存在): $(document).ready(function(){ $('#testA').on('testEvent', func ...

  8. 洗礼灵魂,修炼python(13)--模块random,math,pickle

    random 1.作用: random模块用于生成随机数 2.常用函数: random:用于生成一个0到1的随机符点数: 0 <= n < 1.0 uniform(a, b):用于生成一个 ...

  9. python第五十四天--第十周作业

    SELECT版FTP:使用SELECT或SELECTORS模块实现并发简单版FTP允许多用户并发上传下载文件 必须使用select or selectors模块支持多并发,禁止使用多线程或多进程 RE ...

  10. VS发布web应用程序报:无法识别的特性“xmlns:xdt”。请注意特性名称区分大小写 或 未能将文件obj\...复制到obj\...未能找到路径

    问题1:无法识别的特性“xmlns:xdt”.请注意特性名称区分大小写 问题2:未能将文件obj\...复制到obj\...未能找到路径 解决办法:将web项目文件下的obj文件夹从项目中排除,然后再 ...