
# 性能篇
#### 如何快速判断Hudi表的性能影响点？
1. 排查索引。
   1. 执行**desc formatted** *库名.表名*，查询Hudi表的location属性，这个是Hudi表的物理路径（一般是HDFS路径和OBS路径）。
   
   2. 在Hudi表物理路径下".hoodie"目录的"hoodie.index.properties"文件中可以看到索引信息，这里的索引最准确。因为用户可能在建表的时候把索引写错了，导致最终的索引并不是预期的索引。
   
   3. 检查索引是否合理。
      - cow表在更新场景（insert into，upsert）推荐用SIMPLE索引，在非更新场景（insert overwrite）推荐用BUCKET索引。BLOOM索引，更新数据量越大，假阳性率越高，性能越慢，不推荐。
      
      - mor表推荐用BUCKET索引。
      
      - 超过千万级以上数据量，建议mor表+BUCKET+分区，cow表在大数量场景下SIMPLE索引和BLOOM索引写的文件有点多，BUCKET索引会导致cow表的写放大问题更加严重，不推荐cow表。
       
    
2. 排查BUCKET索引分桶。
   1. 执行**desc formatted** *库名.表名*，查询Hudi表的location属性，这个是Hudi表的物理路径（一般是HDFS路径和OBS路径）。
   
   2. 在Hudi表的物理路径检查每个bucket桶下的parquet文件大小，大小在300M以内视为合理。文件size越大，性能越受影响，超过1GB，读写将会非常之慢。
    
3. 排查Hudi表物理目录。
   1. 执行**desc formatted** *库名.表名*，查询Hudi表的location属性，这个是Hudi表的物理路径（一般是HDFS路径和OBS路径）。
   
   2. 从Hudi表目录排查以下方向：
      - 分区或者非分区。千万级以上数据量必须用分区或者BUCKET索引分桶，避免全表更新，可以指定分区条件来更新和读取。更新的文件越多，写性能越慢。
      
      - 文件数量和文件大小。SIMPLE索引和BLOOM索引注意排查Hudi表现存的文件数量和增量数据的更新范围，BUCKET索引排查parquet文件的大小。
      
      - cow表/mor表的clean是否正常，参考[Clean篇](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450212.html)。其中insert overwrite场景，clean保留的历史越多，读写性能越慢。
      
      - cow表/mor表的archive是否正常，参考[Archive篇](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450213.html)。".hoodie"目录下的元数据越多，读写性能越慢。
      
      - mor表一定要检查compaction是否正常，log文件越多，读写性能越慢。
       
    
 
