暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 数据库管理员必读:True Cache 的简介

DBA巫师 2024-11-28
178
    、            加入我们的微信群,你将获得不仅仅是知识,还能享受免费最新GPT-4o模型微信机器人+Oracle MOS免费查询+职业发展规划咨询+数据库大佬交流+IT运维分享,很多志同道合的小伙伴,欢迎加群一起探讨、学习、进步!
选择”比“努力”更重要。
扫描下方二维码添加作者微信,回复“DBA理想”即可开启你的数据库学习之旅。
致力于让每一位DBAers能无障碍地享受最先进的人工智能技术。我们相信,科技应该为每个人服务,而不是仅限于少数专家。

        应用程序需要更快速地处理大量数据,这给传统数据库系统带来了很大压力。为了解决这个问题,Oracle在其最新的 23ai 版本中推出了一个新功能 -- Oracle True Cache(真实缓存)。这个功能就像是数据库的"快速记忆区",可以让数据访问变得更快。本文会用简单的方式介绍 True Cache 是什么、怎么用,以及如何设置,帮助数据库管理人员和开发人员更好地使用这个实用工具。


Oracle True Cache 概述

Oracle True Cache 是一种内存中、一致且自动管理的 SQL 和键值(对象或 JSON)缓存机制,旨在提升数据读取性能,同时保持数据的一致性和可靠性。其主要特点包括:
  • 内存缓存:True Cache 作为主数据库前的内存缓存层,存储频繁访问的数据,减少对主数据库的直接读取请求。
  • 数据一致性:通过应用主数据库的重做日志(redo apply),True Cache 保持与主数据库的数据一致性,确保返回的始终是已提交的数据。
  • 自动管理:True Cache 自动管理缓存的数据块,无需人工干预,简化了缓存的维护工作。


True Cache 的架构与工作原理

在 True Cache 的架构中,应用程序可以选择从 True Cache 或主数据库查询数据。其工作流程如下:
  1. 查询处理:当应用程序向 True Cache 发起查询请求时,True Cache 首先在其内存中查找所需数据。如果数据已缓存,则直接返回;否则,从主数据库获取数据并缓存,以备后续请求使用。
  2. 缓存填充:True Cache 启动时为空,会读取大量数据块以填充缓存,确保常用数据的快速访问。
  3. 数据更新:缓存中的数据块通过从主数据库应用重做日志(redo apply)自动更新,类似于 Oracle Active Data Guard 的更新机制。
  4. 负载均衡:如果存在多个 True Cache 实例服务于同一数据库应用服务,监听器会自动分配和负载均衡会话到各个缓存实例。


应用程序与 True Cache 的集成

在配置 True Cache 后,应用程序需要决定是从 True Cache 还是主数据库查询数据。主要有两种集成方式:
  1. 双物理连接模式:应用程序维护两个物理连接:一个连接到主数据库,另一个连接到 True Cache。每个连接都有各自的数据库应用服务,应用程序根据操作类型(读取或写入)选择使用哪个连接。这种模式适用于任何现有的客户端驱动程序和编程语言。
  2. 单逻辑连接模式:应用程序维护一个逻辑连接,使用主数据库的数据库应用服务。从 Oracle Database 23c 开始,JDBC Thin 驱动程序会维护到主数据库和 True Cache 的物理连接。这种模式仅适用于 Java 应用程序。应用程序无需指定实例名称即可在 True Cache 和主数据库之间切换。通过调用特定的方法将逻辑连接标记为只读或读写:如果是只读,查询会被发送到 True Cache;否则,发送到主数据库。
以下示例代码展示了如何在 Java 应用程序中使用 JDBC Thin 驱动程序实现上述功能:
    // 创建逻辑连接,连接到名为 SALES 的主数据库应用服务
    Connection conn = DriverManager.getConnection(
    "jdbc:oracle:thin:@//host:port/service",
    "username",
    "password"
    );


    // 启用 True Cache 功能
    ((OracleConnection) conn).setUseTrueCacheDriverConnection(true);


    // 将连接设置为只读模式,查询将被路由到 True Cache
    conn.setReadOnly(true);
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM your_table");
    // 处理结果集
    rs.close();
    stmt.close();


    // 将连接设置为读写模式,查询将被路由到主数据库
    conn.setReadOnly(false);
    stmt = conn.createStatement();
    stmt.executeUpdate("UPDATE your_table SET column = value");
    // 提交更改
    conn.commit();
    stmt.close();


    // 关闭连接
    conn.close();
    应用程序可以灵活地在 True Cache 和主数据库之间路由查询,以优化性能并确保数据一致性。


    True Cache 的配置策略

    根据业务需求,True Cache 提供了多种配置策略,以满足不同的性能和可用性要求。

    统一配置(Uniform Configuration)

    示例架构:
    • 主数据库PRIMDBI
    • True Cache 实例TCDB1I
      TCDB2I
    • 远程监听器sales_rl
    • 应用程序:两个独立的应用程序
    在此配置中,True Cache 实例在启动时,会根据 FAL_CLIENT
    参数(如 TCDB1I
    TCDB2I
    )指定的网络名称,注册到主数据库的网络名称(由 FAL_SERVER
    参数指定,如 PRIMDBI
    )。
    如果应用程序手动管理连接,它会通过 True Cache 的数据库应用服务发送查询,而将其他查询和更新操作发送到主数据库的应用服务。为了实现更高的应用透明性,您可以使用 JDBC 方法,将主数据库的应用服务与 True Cache 的应用服务关联起来。
    在此示例中:
    • 主数据库(PRIMDBI
      )运行名为 SALES
      的数据库应用服务。
    • 两个 True Cache 实例(TCDB1I
      TCDB2I
      )共享名为 SALES_TC
      的数据库应用服务。
    通过在主数据库的应用服务(SALES
    )中设置 TRUE_CACHE_SERVICE
    参数为 SALES_TC
    ,实现两者的关联。应用程序代码只需了解主数据库的应用服务(SALES
    )。要使用 SALES_TC
    数据库应用服务,应用程序只需更改 SALES
    JDBC 连接的 setReadOnly
    标志(TRUE
    FALSE
    )。
    在这种配置下,True Cache 实例和主数据库共享一个远程监听器(sales_rl
    )。如果存在多个 True Cache 实例并服务于同一个数据库应用服务,监听器会自动分配并负载均衡会话到各个缓存实例。
    通过这种统一配置,Oracle True Cache 提供了高可用性和负载均衡的解决方案,确保应用程序在多个缓存实例之间高效地分配查询请求。

    总结

        Oracle True Cache 是 Oracle 23ai 版本推出的创新内存缓存解决方案,旨在提升数据库性能和可扩展性。它通过内存缓存层存储频繁访问的数据,并通过重做日志应用机制保持与主数据库的数据一致性。系统支持双物理连接和单逻辑连接两种集成模式,并提供灵活的配置选项。True Cache 的自动管理特性和负载均衡功能,使其成为解决高并发数据访问需求的理想选择,同时简化了数据库管理工作。

    Oracle数据库的国产化替代,应该从哪些角度考虑


    Oracle数据库架构选择指南


    SQL*Plus工具的继任者--Oracle sqlcl


    Oracle 11.2.0.4 RAC环境节点重新添加


    Oracle运维脚本分享



    文章转载自DBA巫师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论