Phoenix调优——元数据相关

概述

        在使用Phoenix的过程中发现一些性能问题,最终发下都与元数据相关。本文描述了2个元数据方面的调优手段,希望能够对大家有所帮助。

背景

        Phoenix 集群数据由Spark Streaming程序写入,现象是在写入数的同时进行查询,响应时间会很长(大概在5秒以上),把spark streaming 程序停掉后响应时间就恢复正常(秒内)。Phoenix 集群的写负载也不高,通过执行计划看也确实走了索引。region 分布也是比较均匀的。

系统表放在单独的RS Group

        Phoenix在将SQL转化为HBase的读写操作时需要获取一些系统数据,例如Phoenix表的元数据SYSTEM.CATALOG、统计信息SYSTEM.STAT等。如果存放系统表的RegionServer上同时还有其他表的Region,那么在高频的写入这些Region时就会由于资源问题影响集群上的所有SQL,使其变慢。

        于是我们改为将系统表存储在单独的RegionServerGroup中,这样避免了数据表与系统表争抢资源,也会避免由于一张数据表的问题造成同RegionServer上的系统表不能访问从而导致Phoenix集群瘫痪的风险。

       同理,对于特别重要的数据表也可以采取相同的方式,存放在独立的RegionServer Group中。

降低客户端同步元数据的频率

        对于不使用query Server的Phoenix集群来说,生成执行计划的过程是在客户端进行的,而服务器端可以做alter table的动作,于是客户端默认会在执行SQL时检查服务端的元数据和统计信息。而元数据的变更通常是可预知的,这种情况下检查就是非必须的。Phoenix在客户端侧提供了一个元数据的缓存用于减少对元数据表的访问。Phoenix 4.7以上版本使用表属性UPDATE_CACHE_FREQUENCY来设置元数据的更新频率。默认是ALWAYS,可以修改为NEVER或者一个以微秒为单位的数字。

你可能感兴趣的:(HBase,Phoenix)