TimesTen只读缓存组在初始加载时会检查Aging吗?

2024-02-04 12:38

本文主要是介绍TimesTen只读缓存组在初始加载时会检查Aging吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先说为什么要问这个问题,用户的Oracle数据库中有一个非常大的表,存1年的数据,每天1000万条记录。现在需要用TimesTen来做只读缓存,但只需缓存最近一个月的数据,因此申请的内存也只够缓存1个月的。

那么如果TimesTen在初始加载时,先加载所有数据,然后再使用Aging清除数据。那么加载所有数据这一步就会失败,因为内存不过;而且这么做显得有点多余。

所以按照逻辑来说,应该在初始加载时就会利用Aging排除掉不满足条件的数据。

下面来验证一下。

先在Oracle中创建基础表,然后插入1000条数据,注意插入是倒序的,每月一条

create table orders(ord_num int primary key,ship_time date not null);
grant select on orders to cacheadm;DECLAREord_num NUMBER;
BEGINFOR i IN 1..1000 LOOPSELECTnvl(MAX(ord_num), 0)INTO ord_numFROMorders;INSERT INTO orders VALUES (ord_num + 1,ADD_MONTHS(sysdate,-i));COMMIT;END LOOP;
END;
/SQL> select * from orders;ORD_NUM SHIP_TIME
---------- ---------1 23-NOV-202 23-OCT-203 23-SEP-204 23-AUG-205 23-JUL-206 23-JUN-207 23-MAY-208 23-APR-209 23-MAR-2010 23-FEB-2011 23-JAN-20
...

然后创建只读缓存组,启用Aging为1年,清理周期为10分钟:


CREATE READONLY CACHE GROUP "READCACHE" AUTOREFRESH MODE INCREMENTAL INTERVAL 5 MINUTESSTATE PAUSEDFROM"ORATT"."ORDERS" ("ORD_NUM"   NUMBER(38) NOT NULL,"SHIP_TIME" DATE       NOT NULL,PRIMARY KEY("ORD_NUM"))AGING USE SHIP_TIME LIFETIME 366 days CYCLE 10 minutes ONCommand> select * from orders;
0 rows found.

初始加载(LOAD CACHE GROUP ),发现只加载了满足条件的数据,这正是我们要的结果:

Command> select * from orders;
< 1, 2020-11-23 20:38:12 >
< 2, 2020-10-23 20:38:12 >
< 3, 2020-09-23 20:38:12 >
< 4, 2020-08-23 20:38:12 >
< 5, 2020-07-23 20:38:12 >
< 6, 2020-06-23 20:38:12 >
< 7, 2020-05-23 20:38:12 >
< 8, 2020-04-23 20:38:12 >
< 9, 2020-03-23 20:38:12 >
< 10, 2020-02-23 20:38:12 >
< 11, 2020-01-23 20:38:12 >
< 12, 2019-12-23 20:38:12 >
12 rows found.

在手册中关于LOAD CACHE GROUP 的帮助为:

LOAD CACHE GROUP loads all new cache instances from the Oracle database that satisfy the cache group definition and are not yet present in the cache group.

最后补充一点,如果想修改Aging生命周期和检查频率,可使用alter table,可见这些属性都是表的属性,而非缓存组的属性。例如:

alter table "ORATT"."ORDERS"set aging lifetime 1 days;
alter table "ORATT"."ORDERS"set aging cycle 6 hours

这篇关于TimesTen只读缓存组在初始加载时会检查Aging吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677536

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Redis解决缓存击穿问题的两种方法

《Redis解决缓存击穿问题的两种方法》缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击,本文给大家介绍了Re... 目录引言解决办法互斥锁(强一致,性能差)逻辑过期(高可用,性能优)设计逻辑过期时间引言缓存击穿:给

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

一文详解Nginx的强缓存和协商缓存

《一文详解Nginx的强缓存和协商缓存》这篇文章主要为大家详细介绍了Nginx中强缓存和协商缓存的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、强缓存(Strong Cache)1. 定义2. 响应头3. Nginx 配置示例4. 行为5. 适用场景二、协商缓存(协

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改