Oracle Database In-Memory 23ai 新特性

发布于:2025-03-27 ⋅ 阅读:(24) ⋅ 点赞:(0)

本文参考文档Oracle Database New Features第4章Data Analytics中的In-Memory部分。

自动 In-Memory 内存大小调整

借助自动内存大小调整,IM 列存储现在可以作为自动共享内存管理 (ASMM) 的一部分进行管理。这意味着 ASMM 可以根据总体数据库工作负载要求增加或缩小 IM 列存储。

此时INMEMORY_SIZE为最小的IMCS大小。

前提:

  • SGA_TARGET > 0.
  • INMEMORY_AUTOMATIC_LEVEL = MEDIUM 或 HIGH.

AIM增强:性能功能自动启用/禁止

这实际是AIM的子功能,可自动启停的性能功能包括Join Group、连接键列的哈希字典值缓存和In-Memory Optimized Arithmetic。

好处是提高应用程序性能,节省内存空间,和无需手动干预。

前提:

  • inmemory_automatic_level设置为HIGH
  • DBMS_AUTOIM.SET_PARAMETER (‘AIM_TASK’, ‘ENABLE’)

管理和监控可使用DBMS_AUTOIM API和DBA_AIM_PERF_FEATURES视图。

对应的文档见这里

In-Memory 优化的日期

为了提高基于 DATE 的查询的性能,可以利用内存表达式框架提取 DATE 组件(即 DAY、MONTH、YEAR)并将其填充到 IM 列存储中。

此增强功能可以加快对 DATE 列的查询处理速度,从而显著提高基于日期的分析查询的性能。

此功能利用了In-Memory Expression(IME)框架。

前提:

  • inmemory_optimized_date设置为TRUE。
  • inmemory_expressions_usage设置为ENABLE(默认值)

如果启用,则在填充时,DATE 字段将使用 MONTH 和 YEAR 内存表达式填充。然后可以使用 SQL 中的 EXTRACT 函数访问这些字段。不会为其他日期时间或间隔表达式或不经常访问的 MONTH 或 YEAR 字段创建 IME。

对应的文档见这里

可惜文档示例不能用,因为date_dim.d_datekey是NUMBER,而非DATE类型。

In-Memory RAC 级全局字典

实际上此功能还有另一名字:RAC集群Join Groups支持。

之前的Join Groups,是不能跨实例的。因为In-Memory与RAC结合时,需要做行分布,而当时的common dictionary不支持。

现在有了global dictionary,可以在各实例间共享,因此支持Join Groups。

此功能可提升RAC环境下分布式哈希连接的性能。

对应的文档见这里

可选内存列

实际是语法的改进,可以更轻松地添加或排除内存中的列。以前也可以做到,但是比较别扭。

其实就是增加了ALL关键字。

-- 之前
ALTER TABLE <table name> INMEMORY NO INMEMORY (col1, col2);

-- 现在
ALTER TABLE <table name> NO INMEMORY(ALL) INMEMORY(col1, col2);
ALTER TABLE <table name> INMEMORY(ALL) NO INMEMORY(col1, col2);

对应的文档见这里

矢量化查询处理:多级连接和聚合

此功能是21c新功能In-Memory Deep Vectorization(IMDV)功能的增强,默认自动启用。

21c时,IMDV只支持单级连接。

此功能通过充分利用 SIMD 功能来进一步提高哈希连接和分组聚合性能,从而增强了内存深度矢量化框架。新的优化包括整合多级哈希连接支持、完整的内存分组聚合支持以及对多连接键和其他连接方法的支持。

此功能提高了连接和聚合的性能,而连接和聚合是分析查询的基础。这可以实现更快的实时分析性能,并且不需要更改应用程序 SQL。

对应的文档见这里

v$inmemory_area 改变

增加了IM pool metadata,存储​​不适合存储在 64K POOL 中的其他专用元数据结构,是专为RAC使用的。因此之前,在RAC环境下,需要多留出10%的内存用于DBIM的建议不再适用。

IM pool metadata的比例只占1%。1MB POOL和64KB POOL的为70%和29%,和之前的7:3开差不多。

SQL> select * from v$inmemory_area;

POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                    1098907648  630194176 DONE                                3
64KB POOL                    457179136    6029312 DONE                                3
IM POOL METADATA              16777216   16777216 DONE                                3

新数据库嵌入的In-Memory Advisor

以前需要单独安装,现在是数据库的一部分。

依赖热图数据进行分析,热图现在是Oracle数据库企业版的一部分(无需单独许可)。

添加了新的Eligibility Tool(资格工具),可快速识别内存数据库无用的数据库 - 反向移植到 19c (19.20)

参考