BIEE的缓存是基于文件的,而不是在内存中,缓存文件以.tbl为扩展名。缓存对于提高查询效率很有帮助,它可以让查询直接从缓存文件中产生结果,而不用访问数据库,避免了数据库查询和网络传输上的时间损耗。但cache也带来其它问题,如缓存管理(如何提高cache命中率?怎样保持 cache的中的数据不会过期?),占用物理资源等。
开启BIEE中的缓存:NQSConfig.ini配置文件中,将[CACHE]部分的ENABLE设置为YES
管理缓存
- 在NGSConfig.ini中配置缓存大小,缓存条目单体大小,缓存条目数量等信息(参数含义见下文)
- 在Administration中控制缓存
- 在Manage > Cache中可以强制刷新缓存(refresh),可以看到NGSConfig的配置信息(show info),以及当前的缓存内容,并且可以对已有缓存进行管理,查看其sql,将其手动清除purge等
- 在物理层中,可以对单个表设置是否缓存,以及缓存过期时间
缓存的清除
- 缓存数目达到MAX_CACHE_ENTRIES定义的数目时,系统会将最久远的cache清除来缓存新的
- 缓存到了物理表定义的过期时间时,会被清除
- Cache Manager中手工清除cache
Seeding Cache:其思想是在终端用户去跑报表之前,我们先手工或自动去跑报表,让cache生成于系统之中,之后用户再运行的时候就可以利用到缓存了
- 通过手工方式去跑报表
- 通过ibot设置定期运行报表:要在delivers中创建ibot,并且在destination标签页中设置勾选Oracle BI server cache选项
查询没有被缓存的几种情况
- 非缓存的SQL。如果SQL中包含Current_Timestamp, Current_Time,Rand, Populate, or a parameter marker,这时查询将不被缓存
- Non-cacheable表。如果一个查询相关的物理表在Oracle BI Server资料库中被标记为Non-cacheable,则不会被缓存
- 缓存命中。通常情况缓存命中的查询将不会被缓存,除了POPULATE_AGGREGATE_ROLLUP_HITS参数为YES的情况。
- Cache本身没被启动。在NQSConfig中ENABLE = YES条件下可以开启缓存
- 结果集太大。如果结果集有太多行,超过了MAX_ROWS_PER_CACHE_ENTRY,该条目不会被缓存;如果结果集占用空间太大,超过了MAX_CACHE_ENTRY_SIZE,该条目不会被缓存
- Cache中参数设置不合理:如果MAX_CACHE_ENTRY_SIZE比DATA_STORAGE_PATH路径能承受的大小还要大,那就无法缓存了
- 查询在presentation server被取消或者查询超时,则不会创建缓存
- OracleBI sever是集群的。集群中,查询缓存存在本地,而不会被传播,比如在节点1产生查询,缓存被存到该节点,而不会在节点2中也生成。
NQSconfig.ini文件中Cache相关的参数:
- Cache默认是开启的(ENABLE=YES),但在开发环境中可以将其关闭以提高效率
- 通过DATA_STORAGE_PATHS参数指定缓存的存放目录以及缓存大小,可以设置多个缓存,以逗号分隔,缓存最大不要超过4GB;在同一磁盘设备上设置多个缓存目录并不能提高性能,通常对每个磁盘设备设置一个缓存目录即可,如果超过一个,磁盘I/O加大会损害性能。
- MAX_ROWS_PER_CACHE_ENTRY,设置查询结果集中的最大行数,用来限制查询缓存的存储,如果一个查询超过这个指定值,该查询不会被缓存;为0时无限制
- MAX_CACHE_ENTRY_SIZE,设置每个缓存条目的最大值,如果超过该值则不会被缓存(即单个缓存文件的大小)
- MAX_CACHE_ENTRIES:设置缓存中被允许的缓存条目最大值(即共有多少缓存文件)。如果达到、超过最大值,系统会将最久远的cache清除来缓存新的。
- POPULATE_AGGREGATE_ROLLUP_HITS,该参数用来确定是否合计之前的缓存查询结果集,然后创建一个新缓存查询条目来累积缓存命中率。默认值为NO。把这个参数设置为YES的话,可以提高查询性能,但是会使更多的条目加到缓存中去,增加了缓存压力。比如一个查询语句为sales by region通常我们可以从缓存中sales by district,region解析。但是该参数为YES情况下,sales by region也会以新的条目加入到缓存中去。
- USE_ADVANCED_HIT_DETECTION:该参数为缓存命中提供了一个扩展的查询算法,具体算法还不清楚。这个扩展查询算法会影响性能。默认情况下参数设置为NO
- MAX_SUEXPR_SEARCH_DEPTH:该参数用来配置命中探测器查询一个不精确匹配查询表达式的深度。该参数默认值为5。如果该参数使用默认值,而查询表达式为 sin(cos(tan(abs(round(trunc(profit))))))则不会命中。因为该表达式级别为7。修改参数到7的时候则能命中。
- GLOBAL_CACHE_STORAGE_PATH:该参数指定的路径用来存储集群的共享缓存条目。集群的所有节点使用同一个路径。
- MAX_GLOBAL_CACHE_ENTRIES:上述路径中保存缓存的最大条目数
- CACHE_POLL_SECONDS:每个节点从GLOBAL_CACHE_STORAGE_PATH指定的共享路径中取缓存数据的间隔,单位为秒
- CLUSTER_AWARE_CACHE_LOGGING:该参数用来开启集群缓存日志,用来故障处理。默认值为NO