缓存服务器#

介绍如何使用 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。当然也可以直接修改 WUTONGDB_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 服务。