
# Hive SQL运行变慢阶段如何排查
#### 场景说明
对于一个Hive SQL任务，如果运行时间突然变长，可能有多种原因造成，如HiveServer编译变慢、访问HDFS变慢、访问Yarn变慢或访问元数据变慢。
#### 操作步骤
以下为Hive SQL在哪个阶段执行变慢的排查方法：
- HiveServer编译变慢 查看HiveServer审计日志"/var/log/Bigdata/audit/hive/hiveserver/hive-audit.log"，搜索运行的SQL，如[图1]的SQL为"show databases"，过滤线程名包含"HiveServer2-Handler-Pool"的两条记录，第一条记录为开始编译时间，第二条记录为结束编译时间。 根据SQL变慢前后的审计记录可判断是否是HiveServer编译变慢。
  图1HiveServer正在运行的SQL   
  ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001861637070.png) 
- 访问HDFS变慢
  - 方法一： 查看HiveServer运行日志"/var/log/Bigdata/hive/hiveserver/hive.log"，搜索运行的SQL对应的线程日志，再搜索number of splits日志，如果该日志前后间隔时间较长，则表示访问HDFS变慢。
    
  
  - 方法二： 通过打印HiveServer进程jstack，查看相关线程是否卡顿在访问HDFS部分，是的话则表示访问HDFS变慢。
    
  
  - 方法三： 查看HDFS RPC监控，看是否在SQL运行变慢期间HDFS RPC异常升高，是的话则大概率是访问HDFS变慢。
    
   
- 访问Yarn变慢 查看HiveServer运行日志"/var/log/Bigdata/hive/hiveserver/hive.log"，搜索运行的SQL对应的线程日志，再搜索Kill Command日志，如果该日志后面间隔较长时间才打出下一行日志，则表示访问Yarn变慢。
  
- 访问元数据变慢 在FusionInsight Manager界面，选择"集群 \> 服务 \> Hive \> 实例 *\> 任一MetaStore实例*\> 图表"，在"图表分类"选择"操作统计"，查看"create_table API元数据操作耗时情况"和"add_partitions_req api执行情况"等监控，看SQL运行慢是否是因为MetaStore访问变慢。
  
 
