缓存服务器#

介绍如何使用OushuDB缓存服务器来加速对远程magma, hdfs以及对象存储的访问。其中magma类型的存储从5.1.0.0版本开始支持这一特性。

用户可以通过以下2个参数控制缓存服务器的缓存行为。这两个参数都是会话级别,多个会话之间互不影响。

  • cache_read_protocols: 控制什么类型的存储需要进行缓存,默认为S3,支持magma, hdfs,多值以逗号分隔。

  • cache_tables: 指定需要缓存的表,默认值为特殊字符串cache_server_cache_all,表示缓存所有协议为cache_read_protocols的表。格式为[schema.]tablename,多个表之间以逗号分隔,schema可选,不指定则在当前search_path查找。

配置好缓存参数后,可以通过explain analyze验证是否生效,正确配置后会出现类似 “Cache Read 0/36 in 0/1 call(s)” 输出,含义为一共读取了1次,有0次命中了缓存,一共读取了36字节,有0字节命中了缓存。如果查询中涉及到toast字段,explain analyze会出现单独的toast输出,含义与前述相同,只是单独统计了toast的相关信息,例如”Toast InputStream Info: 14308 byte(s) (3.713 MB/s) in 3.675 ms with 196 read call(s)”

注意,如果通过cache_tables指定了某张表,但其对应的存储不包含在cache_read_protocols,那么最终并不会被缓存。

容量配置通常可以通过$OUSHUDB_HOME/bin/cacheserver -c -D 外存容量 -r 内存容量 -R d/e 进行设置,单位为MB。d/e分别代指QD或者QE的cacheserver,设置成功后会持久化,保证重启后仍然生效。对于多台机器推荐以下设置方法,hostfile的每一行为一台机器的hostname。当然也可以直接修改OUSHUDB_CONF下的cache-site.xml,重启后生效。

oushudb ssh -f hostfile -e 'source /usr/local/oushu/oushudb/oushudb_path.sh; cacheserver -c -D 外存容量 -r 内存容量 -R d/e'
然后登录其中一台机器使用 'source /usr/local/oushu/oushudb/oushudb_path.sh; cacheserver -s -R d/e' 进行验证

缓存服务器会占用部分磁盘空间,其使用的磁盘路径为hawq_master_temp_directory或者hawq_segment_temp_directory,支持同时在多个磁盘上进行缓存以提高性能。具体使用哪个GUC指定的目录取决于当前cache server是为QD还是QE服务。如数据缓存是为QE服务,元数据缓存或者查询结果缓存则视为QD服务。