OBIEE中的缓存

      BIEE的缓存是基于文件的,而不是在内存中,缓存文件以.tbl为扩展名。缓存对于提高查询效率很有帮助,它可以让查询直接从缓存文件中产生结果,而不用访问数据库,避免了数据库查询和网络传输上的时间损耗。但cache也带来其它问题,如缓存管理(如何提高cache命中率?怎样保持cache的中的数据不会过期?),占用物理资源等。
Cache System Archicture

开启BIEE中的缓存:NQSConfig.ini配置文件中,将[CACHE]部分的ENABLE设置为YES

管理缓存

  • 在NGSConfig.ini中配置缓存大小,缓存条目单体大小,缓存条目数量等信息(参数含义见下文)
  • 在Administration中控制缓存
    • 在Manage > Cache中可以强制刷新缓存(refresh),可以看到NGSConfig的配置信息(show info),以及当前的缓存内容,并且可以对已有缓存进行管理,查看其sql,将其手动清除purge等
    • 在物理层中,可以对单个表设置是否缓存,以及缓存过期时间

    Cache Operations

缓存的清除

  • 缓存数目达到MAX_CACHE_ENTRIES定义的数目时,系统会将最久远的cache清除来缓存新的
  • 缓存到了物理表定义的过期时间时,会被清除
  • Cache Manager中手工清除cache

Seeding Cache:其思想是在终端用户去跑报表之前,我们先手工或自动去跑报表,让cache生成于系统之中,之后用户再运行的时候就可以利用到缓存了

  • 通过手工方式去跑报表
  • 通过ibot设置定期运行报表:要在delivers中创建ibot,并且在destination标签页中设置勾选Oracle BI server cache选项
    Seeding Cache
查询没有被缓存的几种情况
  1. 非缓存的SQL。如果SQL中包含Current_Timestamp, Current_Time,Rand, Populate, or a parameter marker,这时查询将不被缓存
  2. Non-cacheable表。如果一个查询相关的物理表在Oracle BI Server资料库中被标记为Non-cacheable,则不会被缓存
  3. 缓存命中。通常情况缓存命中的查询将不会被缓存,除了POPULATE_AGGREGATE_ROLLUP_HITS参数为YES的情况。
  4. Cache本身没被启动。在NQSConfig中ENABLE = YES条件下可以开启缓存
  5. 结果集太大。如果结果集有太多行,超过了MAX_ROWS_PER_CACHE_ENTRY,该条目不会被缓存;如果结果集占用空间太大,超过了MAX_CACHE_ENTRY_SIZE,该条目不会被缓存
  6. Cache中参数设置不合理:如果MAX_CACHE_ENTRY_SIZE比DATA_STORAGE_PATH路径能承受的大小还要大,那就无法缓存了
  7. 查询在presentation server被取消或者查询超时,则不会创建缓存
  8. OracleBI sever是集群的。集群中,查询缓存存在本地,而不会被传播,比如在节点1产生查询,缓存被存到该节点,而不会在节点2中也生成。

NQSconfig.ini文件中Cache相关的参数:

  1. Cache默认是开启的(ENABLE=YES),但在开发环境中可以将其关闭以提高效率
  2. 通过DATA_STORAGE_PATHS参数指定缓存的存放目录以及缓存大小,可以设置多个缓存,以逗号分隔,缓存最大不要超过4GB;在同一磁盘设备上设置多个缓存目录并不能提高性能,通常对每个磁盘设备设置一个缓存目录即可,如果超过一个,磁盘I/O加大会损害性能。
  3. MAX_ROWS_PER_CACHE_ENTRY,设置查询结果集中的最大行数,用来限制查询缓存的存储,如果一个查询超过这个指定值,该查询不会被缓存;为0时无限制
  4. MAX_CACHE_ENTRY_SIZE,设置每个缓存条目的最大值,如果超过该值则不会被缓存(即单个缓存文件的大小)
  5. MAX_CACHE_ENTRIES:设置缓存中被允许的缓存条目最大值(即共有多少缓存文件)。如果达到、超过最大值,系统会将最久远的cache清除来缓存新的。
  6. POPULATE_AGGREGATE_ROLLUP_HITS,该参数用来确定是否合计之前的缓存查询结果集,然后创建一个新缓存查询条目来累积缓存命中率。默认值为NO。把这个参数设置为YES的话,可以提高查询性能,但是会使更多的条目加到缓存中去,增加了缓存压力。比如一个查询语句为sales by region通常我们可以从缓存中sales by district,region解析。但是该参数为YES情况下,sales by region也会以新的条目加入到缓存中去。
  7. USE_ADVANCED_HIT_DETECTION:该参数为缓存命中提供了一个扩展的查询算法,具体算法还不清楚。这个扩展查询算法会影响性能。默认情况下参数设置为NO
  8. MAX_SUEXPR_SEARCH_DEPTH:该参数用来配置命中探测器查询一个不精确匹配查询表达式的深度。该参数默认值为5。如果该参数使用默认值,而查询表达式为sin(cos(tan(abs(round(trunc(profit))))))则不会命中。因为该表达式级别为7。修改参数到7的时候则能命中。
  9. GLOBAL_CACHE_STORAGE_PATH:该参数指定的路径用来存储集群的共享缓存条目。集群的所有节点使用同一个路径。
  10. MAX_GLOBAL_CACHE_ENTRIES:上述路径中保存缓存的最大条目数
  11. CACHE_POLL_SECONDS:每个节点从GLOBAL_CACHE_STORAGE_PATH指定的共享路径中取缓存数据的间隔,单位为秒
  12. CLUSTER_AWARE_CACHE_LOGGING:该参数用来开启集群缓存日志,用来故障处理。默认值为NO

猜你喜欢

转载自sudongyuan.iteye.com/blog/1703181