Oracle 26ai 新特性: True Cache(真实缓存)
True Cache 是 Oracle 26ai 引入的内存中、一致性、自动管理的缓存层,它位于主数据库(Primary Database)和应用程序之间,专门用于加速只读工作负载。│ 应用程序层 ││ │ 应用 A │ │ 应用 B │ │ 应用 C │ ││ │ (读写) │ │ (只读) │ │ (只读) │ ││ │ │ │ ││ │ │ ││ │ │ │ ││ │ ▼ ▼ ││ │ │
·
我来详细解析 Oracle 26ai 中的 True Cache(真实缓存) 特性:
一、True Cache 概述
什么是 True Cache
True Cache 是 Oracle 26ai 引入的内存中、一致性、自动管理的缓存层,它位于主数据库(Primary Database)和应用程序之间,专门用于加速只读工作负载。
┌─────────────────────────────────────────────────────────────┐
│ 应用程序层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 应用 A │ │ 应用 B │ │ 应用 C │ │
│ │ (读写) │ │ (只读) │ │ (只读) │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
│ │ └────────────┘ │
│ │ │ │
│ │ ┌──────┴──────┐ │
│ │ │ │ │
│ │ ▼ ▼ │
│ │ ┌─────────────┐ ┌─────────────┐ │
│ │ │ True Cache │ │ True Cache │ ◄── 内存中 │
│ │ │ 节点 1 │ │ 节点 2 │ 一致性 │
│ │ │ (只读缓存) │ │ (只读缓存) │ 缓存层 │
│ │ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └──────────────┴───────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────┐ │
│ │ Primary Database │ ◄── 主数据库 │
│ │ (读写 + 持久化) │ (唯一数据源) │
│ └─────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
与类似技术的对比
| 特性 | True Cache | Active Data Guard (ADG) | 应用层缓存 (Redis/Memcached) |
|---|---|---|---|
| 主要目的 | 性能加速 | 高可用/灾难恢复 | 性能加速 |
| 数据一致性 | ✅ 强一致性(自动同步) | 强一致性(物理复制) | 最终一致性(需应用处理) |
| 数据位置 | 内存中 | 磁盘(可配置 ADG 内存优化) | 内存中 |
| 管理复杂度 | 低(自动管理) | 中(需配置日志传输) | 高(需应用改造) |
| SQL 兼容性 | 100% Oracle SQL | 100% Oracle SQL | 有限(需改写应用) |
| 事务支持 | 只读(自动路由到主库) | 只读(可配置实时应用) | 无 |
| 故障切换 | 不涉及(非高可用组件) | 支持(Switchover/Failover) | 不涉及 |
二、核心架构与原理
架构组件
┌─────────────────────────────────────────────────────────────┐
│ True Cache 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Primary Database │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Buffer │ │ Redo Log │ │ True Cache │ │ │
│ │ │ Cache │ │ (实时传输) │ │ 管理进程 │ │ │
│ │ │ │ │ │ │ (TCM) │ │ │
│ │ └─────────────┘ └──────┬──────┘ └──────┬──────┘ │ │
│ │ │ │ │ │
│ └──────────────────────────┼─────────────────┼─────────┘ │
│ │ │ │
│ Redo Transport (实时) │ 元数据同步 │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ True Cache 节点 │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ In-Memory │ │ Redo │ │ SQL │ │ │
│ │ │ Column │◄─┤ Apply │ │ Engine │ │ │
│ │ │ Store │ │ (实时应用) │ │ (只读) │ │ │
│ │ │ (IMCS) │ │ │ │ │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ │ 特点: │ │
│ │ • 无独立磁盘存储(纯内存) │ │
│ │ • 通过 Redo 实时同步主库变更 │ │
│ │ • 自动管理缓存内容(LRU + 访问模式) │ │
│ │ • 自动失效和刷新 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
数据同步机制
-- 主库数据变更流程
Primary Database True Cache
┌──────────────┐ ┌──────────────┐
│ UPDATE emp │ ──1. 生成 Redo ───→ │ Redo Apply │
│ SET sal=5000 │ │ (实时应用) │
│ WHERE id=1; │ ──2. 传输 Redo ──→ │ │
└──────────────┘ │ ┌──────────┐ │
│ │ 检查缓存 │ │
│ │ 是否有id=1│ │
│ └────┬─────┘ │
│ │ │
│ 命中/未命中 │
│ │ │
│ ┌────▼─────┐ │
│ │ 更新/跳过 │ │
│ │ 内存数据 │ │
│ └──────────┘ │
└──────────────┘
-- 同步特点:
-- • 异步复制(零主库性能影响)
-- • 亚秒级延迟(通常 < 100ms)
-- • 自动处理缓存一致性
三、配置与使用方法
步骤 1:主库配置
-- 1. 启用 True Cache 功能(主库)
ALTER SYSTEM SET TRUE_CACHE_ENABLED = TRUE SCOPE = SPFILE;
-- 2. 配置 Redo 传输(用于同步)
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG = 'DG_CONFIG=(orcl,tcache)' SCOPE = BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 =
'SERVICE=tcache LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=tcache' SCOPE = BOTH;
-- 3. 创建 True Cache 专用用户
CREATE USER tc_admin IDENTIFIED BY password;
GRANT TRUE_CACHE_ADMIN TO tc_admin;
GRANT CREATE SESSION TO tc_admin;
步骤 2:部署 True Cache 节点
# 1. 安装 True Cache 软件(简化版 Oracle 软件)
# 与主库版本必须一致(26ai)
$ ./runInstaller -trueCache
# 2. 使用 DBCA 创建 True Cache
$ dbca -configureTrueCache \
-sourceDB orcl \
-trueCacheName tcache1 \
-memorySize 32G \
-cacheMode IN_MEMORY_COLUMN_STORE
# 或交互式创建
$ dbca
# 选择 "Configure True Cache"
步骤 3:应用连接配置
// JDBC Thin 驱动自动路由(推荐方式)
// 连接 URL 配置
String url = "jdbc:oracle:thin:@(DESCRIPTION=" +
"(LOAD_BALANCE=on)" +
"(FAILOVER=on)" +
"(ADDRESS=(HOST=primary_host)(PORT=1521)(PROTOCOL=tcp))" +
"(ADDRESS=(HOST=tcache_host)(PORT=1521)(PROTOCOL=tcp))" +
"(CONNECT_DATA=(SERVICE_NAME=orcl)" +
"(TRUE_CACHE_MODE=AUTO)" + // 关键参数:自动路由只读到 True Cache
"))";
Properties props = new Properties();
props.setProperty("user", "app_user");
props.setProperty("password", "password");
props.setProperty("oracle.jdbc.trueCacheRouting", "true");
Connection conn = DriverManager.getConnection(url, props);
// 驱动自动处理:
// - SELECT 语句 → 路由到 True Cache
// - INSERT/UPDATE/DELETE → 路由到 Primary
// - 事务内所有操作 → 路由到 Primary(保证一致性)
步骤 4:手动控制路由(可选)
-- 方式 1:会话级强制使用 True Cache
ALTER SESSION SET TRUE_CACHE_READ = TRUE;
-- 方式 2:Hint 级控制
SELECT /*+ TRUE_CACHE */ * FROM employees WHERE department_id = 10;
-- 方式 3:Hint 级禁用 True Cache
SELECT /*+ NO_TRUE_CACHE */ * FROM employees WHERE salary > 10000;
-- (适用于需要最新数据的查询)
四、缓存管理
自动缓存策略
-- True Cache 自动管理以下内容的缓存:
-- 1. 热点表(基于访问频率)
-- 自动识别并缓存高频访问的表
SELECT table_name, cached_blocks, cache_priority
FROM v$true_cache_objects
WHERE cache_status = 'CACHED';
-- 2. 列式存储(IMCS)
-- 自动选择适合列存的列
SELECT table_name, column_name, compression_ratio
FROM v$true_cache_im_columns;
-- 3. 索引缓存
-- 自动缓存常用索引
SELECT index_name, cached_entries, hit_rate
FROM v$true_cache_indexes;
手动管理缓存内容
-- 预加载特定表到 True Cache
BEGIN
DBMS_TRUE_CACHE.POPULATE(
table_name => 'HR.EMPLOYEES',
priority => DBMS_TRUE_CACHE.PRIORITY_HIGH
);
END;
/
-- 驱逐特定表
BEGIN
DBMS_TRUE_CACHE.EVICT(
table_name => 'HR.OLD_LOGS'
);
END;
/
-- 查看缓存统计
SELECT
cache_name,
total_memory_gb,
used_memory_gb,
hit_rate_percent,
populate_lag_seconds
FROM v$true_cache_statistics;
五、监控与诊断
关键性能视图
-- 1. True Cache 整体状态
SELECT * FROM v$true_cache;
-- 2. 缓存对象详情
SELECT
object_name,
object_type,
cache_mode, -- IN_MEMORY | COLUMNAR | ROW
memory_used_mb,
last_access_time,
access_count
FROM v$true_cache_objects
ORDER BY access_count DESC;
-- 3. SQL 路由统计
SELECT
sql_id,
sql_text,
execution_count,
true_cache_executions,
primary_executions,
avg_latency_ms
FROM v$true_cache_sql_stats
WHERE true_cache_executions > 0;
-- 4. Redo 应用延迟
SELECT
name,
value,
unit
FROM v$true_cache_metrics
WHERE name IN ('REDO_APPLY_LAG', 'REDO_TRANSPORT_LAG');
AWR/ASH 报告增强
-- 生成 True Cache 专项 AWR 报告
@?/rdbms/admin/awrrpt.sql
-- 选择报告类型:True Cache Performance Report
-- 关键指标:
-- • True Cache Hit Ratio(命中率,目标 > 95%)
-- • Redo Apply Rate(Redo 应用速率)
-- • Routing Efficiency(路由效率)
-- • Cache Population Time(缓存填充时间)
六、典型应用场景
场景 1:报表系统加速
问题:电商平台的日报/周报生成查询慢,影响交易系统
解决方案:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 交易系统 │─────→│ Primary │←─────│ 数据写入 │
│ (读写) │ │ Database │ │ (订单/支付) │
└─────────────┘ └──────┬──────┘ └─────────────┘
│
│ Redo 实时同步
▼
┌─────────────┐
│ True Cache │◄── 32GB 内存
│ (报表专用) │ 列式存储
└──────┬──────┘
│
▼
┌─────────────┐
│ 报表系统 │
│ (Tableau/ │
│ BI工具) │
└─────────────┘
收益:
• 报表查询延迟从 30s → 2s
• 不再影响交易系统性能
• 数据延迟 < 1秒(准实时)
场景 2:微服务读扩展
问题:微服务架构中,多个服务读取同一数据库,连接数过多
解决方案:
┌─────────────┐
│ Primary │
│ Database │
│ (读写) │
└──────┬──────┘
│
┌───────────────┼───────────────┐
│ Redo Sync │ Redo Sync │ Redo Sync
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│TrueCache│ │TrueCache│ │TrueCache│
│ 节点 1 │ │ 节点 2 │ │ 节点 3 │
│(用户服务)│ │(商品服务)│ │(订单服务)│
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└───────────────┴───────────────┘
│
┌─────────────┐
│ API Gateway │
│ (自动路由) │
└─────────────┘
收益:
• 主库连接数从 1000+ → 100
• 每个微服务独立缓存策略
• 线性扩展读能力
场景 3:实时分析(HTAP)
问题:需要同时支持 OLTP 和实时分析,不想引入复杂的数据管道
解决方案:
┌─────────────────────────────────────────────────────────┐
│ Primary Database │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ OLTP 表 │ │ Redo Log │ │ True Cache │ │
│ │ (行存) │ │ (实时捕获) │ │ 管理进程 │ │
│ └─────────────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
└────────────────────────────┼───────────────────┼────────┘
│ │
│ 实时同步 │
▼ ▼
┌─────────────────────────────────────────────────────────┐
│ True Cache 节点 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ In-Memory Column Store (IMCS) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │ │
│ │ │ 销售分析 │ │ 库存分析 │ │ 用户画像 │ │ │
│ │ │ (列存) │ │ (列存) │ │ (列存) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 支持: │
│ • 复杂聚合查询(秒级→毫秒级) │
│ • 实时仪表板(数据延迟<1秒) │
│ • 即席查询(Ad-hoc) │
└─────────────────────────────────────────────────────────┘
收益:
• 无需 ETL 或数据仓库
• 单一数据源保证一致性
• 实时分析能力
七、限制与注意事项
| 限制项 | 说明 | 解决方案 |
|---|---|---|
| 只读限制 | True Cache 仅支持只读查询 | 写操作自动路由到主库 |
| 数据延迟 | 存在亚秒级复制延迟 | 对强一致性要求高的查询使用 /*+ NO_TRUE_CACHE */ |
| 内存容量 | 受限于单节点内存 | 部署多个 True Cache 节点横向扩展 |
| 数据类型 | 不支持某些复杂类型(如 BFILE) | 这些查询自动路由到主库 |
| DML 触发器 | True Cache 不执行触发器 | 触发器逻辑在主库执行,结果通过 Redo 同步 |
| 序列(Sequence) | 使用主库的序列值 | 自动路由序列访问到主库 |
八、与 Active Data Guard 的关键区别
虽然两者都基于 Redo 复制,但设计目标不同:
-- Active Data Guard (ADG)
-- 主要目的:高可用和灾难恢复
-- 特点:
-- • 完整的物理数据库副本(磁盘+内存)
-- • 支持 Switchover/Failover
-- • 可配置为实时查询(但主要是备用角色)
-- • 需要 License(Active Data Guard 选项)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
-- True Cache
-- 主要目的:性能加速
-- 特点:
// • 纯内存缓存(无独立磁盘持久化)
// • 不支持 Failover(不是高可用组件)
// • 专为只读优化(列式存储、自动缓存管理)
// • 包含在 Oracle 26ai 基础许可中
可以同时部署:主库 → ADG(灾备)+ True Cache(性能加速)
九、总结
True Cache 是 Oracle 26ai 针对现代应用架构(微服务、云原生、HTAP)推出的关键特性,核心价值在于:
| 价值点 | 说明 |
|---|---|
| 零应用改造 | JDBC 驱动自动路由,无需修改 SQL |
| 强一致性 | 基于 Redo 的实时同步,非最终一致性 |
| 自动管理 | 缓存内容自动识别、填充、失效 |
| 成本优化 | 内存缓存比扩展主库更经济 |
| 性能提升 | 10-100 倍查询加速(典型场景) |
对于读多写少的应用(如电商平台、SaaS 应用、实时报表),True Cache 可以显著降低主库负载并提升用户体验。
更多推荐


所有评论(0)