我来详细解析 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 可以显著降低主库负载并提升用户体验。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐