Kyligence Enterprise 查询缓存配置

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Kyligence Enterprise 查询缓存配置

Kyligence Enterprise 查询缓存配置

SQL级缓存,SQL增加空白符号都会不命中。

为了提升执行相同查询的效率,Kyligence Enterprise 系统自带查询缓存并默认开启。

本文部分摘自Kyligence官方文档。

查询缓存的选型

  • Ehcache
    java内存级缓存,在Kyligence实例默认为8G JVM时, 默认的缓存大小为1G。
    增大缓存方式为先增大JVM内存,再配置增加缓存大小。
    缺点:1. 在SQL命中率并不高的场景下,过小的缓存作用不大;2. 过大的缓存可能加快GC频率,在FGC下也会导致延迟增加。
  • Redis
    缓存存储在Redis中,需要一套Redis集群。在v4.3中引入。
    增大缓存的方式为提升Redis集群的大小。
    缺点: 1. 增加运维难度;
    优点: 1. 提升SQL级缓存实用性。

缓存大小的预估方式

在kylin元数据库中根据查询历史进行SQL统计,例如统计24小时内查询延迟大于2000毫秒或扫描行数大于10000或查询扫描数据量字节数大于1048676,且查询结果集小于10000单元格的SQL历史,其一共需要的结果集的大小,以此来预估预存T+1日慢SQL需要的缓存大小。(kylin 查询历史的页面无法如此精细)

参数记录

$KYLIN_HOME/conf/kylin.properties

Kyligence Enterprise 自带查询缓存功能并默认开启

注意:所有下述配置需要重启后方能生效。

配置项 描述 默认值 可选值
kylin.query.cache-enabled 是否开启查询缓存,当该参数开启,下述参数才生效。 true false

查询被缓存的条件

由于内存资源可能是有限的,Kyligence Enterprise 不会默认缓存每条查询的结果。目前产品会有选择性的对性能较慢且结果集不是特别大的查询进行缓存。一条查询是否会被缓存,由以下几个参数影响:满足序号为 1、2、3 配置项中任意一项,且同时满足序号 4 配置项时,查询会被缓存。

序号 配置项 描述 默认值 默认值单位
1 kylin.query.cache-threshold-duration 查询延迟大于该值 2000 毫秒
2 kylin.query.cache-threshold-scan-count 查询扫描的行数大于该值 10240
3 kylin.query.cache-threshold-scan-bytes 查询扫描的数据量大于该值 1048576 字节
4 kylin.query.large-query-threshold 查询结果集小于该值 1000000 单元格

Ehcache 缓存配置

Kyligence Enterprise 默认使用 Ehcache 作为查询缓存,您可以通过配置 Ehcache 来控制查询缓存的大小和策略。您可以通过修改以下配置项来替换默认的查询缓存配置文件,更多的 Ehcache 配置项请参考官网 ehcache文档

配置项 描述 默认值
kylin.cache.config ehcache.xml 文件的路径。您可以在 ${KYLIN_HOME}/conf/ 下新建格式为 xml 的文件来替换默认的查询缓存配置文件,如 ehcache2.xml,并且修改配置项的值为: file://${KYLIN_HOME}/conf/ehcache2.xml classpath:ehcache.xml

Redis 缓存配置 (v4.2不支持,v4.3引入)

由于 Ehcache 查询缓存是进程级的,在不同进程或不同节点之间并不共享,因此在集群部署模式下,当后续相同查询路由至不同 Kyligence Enterprise 节点时,一个进程查询执行结果的缓存无法被另一个进程使用。因此,我们支持使用 Redis 集群作为分布式查询缓存,在所有 Kyligence Enterprise 节点间共享。具体的参数和配置方法如下:

配置项 描述 默认值 可选值
kylin.cache.redis.enabled 是否开启 Redis 集群用于查询缓存 false true
kylin.cache.redis.cluster-enabled 是否开启 Redis 集群模式 false true
kylin.cache.redis.hosts Redis 主机地址,当您需要连接 Redis 集群时,请使用逗号进行分割。如 kylin.cache.redis.hosts=localhost:6379,localhost:6380 localhost:6379
kylin.cache.redis.expire-time-unit Redis 缓存保留单位,EX为秒,PX为毫秒 EX PX
kylin.cache.redis.expire-time Redis 缓存保留时间 86400
kylin.cache.redis.password Redis密码

已知限制

由于当前 Query 节点与 All/Job 节点存在元数据存在同步差异,redis 缓存开关 kylin.cache.redis.enabled=true 需要和 kylin.server.store-type=jdbc 一起配置。

注意:Redis密码可以明文配置,也可以加密。加密方法请参考: 使用 MySQL 作为元数据存储

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
SQL 缓存 关系型数据库
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
65 0
|
7月前
|
存储 缓存 监控
【面试题精讲】MySQL-查询缓存
【面试题精讲】MySQL-查询缓存
|
7月前
|
缓存 Java Go
解决Spring Data JPA查询存在缓存问题及解决方案
解决Spring Data JPA查询存在缓存问题及解决方案
381 0
|
1月前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
|
4月前
|
存储 缓存 Java
使用@Cacheable,缓存优化的方式优化数据库的查询
使用@Cacheable,缓存优化的方式优化数据库的查询
95 0
|
9月前
|
XML 缓存 Java
2021-08-07mybaties结尾:查询缓存,dao开发分页+项目改造+spring框架
2021-08-07mybaties结尾:查询缓存,dao开发分页+项目改造+spring框架
196 0
|
5月前
|
缓存 Java 数据库连接
Hibernate - 查询缓存和时间戳缓存区域使用详解
Hibernate - 查询缓存和时间戳缓存区域使用详解
30 0
|
5月前
|
缓存 NoSQL Java
SpringBoot - Spring缓存默认配置与运行流程
SpringBoot - Spring缓存默认配置与运行流程
31 1
|
6月前
|
SQL 存储 缓存
Flink CDC中flink sql 如果缓存起来所有的数据,然后基于这个数据做查询?
Flink CDC中flink sql 如果缓存起来所有的数据,然后基于这个数据做查询?
69 1
|
7月前
|
缓存 自然语言处理 算法
71 # 协商缓存的配置:通过内容
71 # 协商缓存的配置:通过内容
27 0