本文参考文档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)
参考
- Announcing Oracle Database 23ai : General Availability
- New Database In-Memory Features in Oracle Database 23ai
- 23ai Deep Dive - In-Memory Vector Join Enhancements
- New In-Memory Eligibility Test
- New Livelab available - In-Memory Advanced Features
- Oracle Database 23ai Fast Ingest Enhancements
- Office Hour: Database In-Memory 23c New Features
- Office Hour: 23c In-Memory Deep Vectorization Enhancements