自动化管理in-memory 对象
自动内存中和自动数据优化(ADO)动态管理IM列存储中的对象,而无需用户干预。
注意:
自动内存和ADO当前不支持外部表和混合分区表。
配置 in-memory
如果INMEMORY_AUTOMATIC_LEVEL
是HIGH
,所有对象均指定为INMEMORY
默认。自动内存使用访问跟踪和列统计信息来管理IM列存储中的对象。
注意:
如果INMEMORY_FORCE
初始化参数设置为BASE_LEVEL
,则即使设置了自动内存也被禁用INMEMORY_AUTOMATIC_LEVEL
。即使表的压缩级别为AUTO
,也不会运行内存中自动后台操作。
自动化 in-memory 的目的
自动内存可以在更改SQL工作负载时对其进行优化,而无需手动干预。
该工作数据集包括最频繁查询段。通常,对于许多应用程序,工作数据集会随时间而变化。用户必须确定将哪些段启用为INMEMORY
,监视使用情况以决定要填充和逐出的IM段,并创建ADO IM策略。这些任务需要对工作量有透彻的了解。为了使DBA免于手动维护工作,“ 自动内存”使用经常更新的内部统计信息来维护IM列存储中的工作数据集。Oracle数据库决定填充什么,驱逐什么以及何时进行。从某种意义上说,IM列存储变为“自动驾驶”。
自动化in-memory 是如何工作的?
自动内存使用内部统计信息来确定内存对象和列的访问频率。
自动化in-memory 的数据热度级别
“自动内存中”使用类似于热图的列统计基础结构监视分段。
如下图所示,自动内存使用热量级别统计信息来确定要填充和逐出的段以及要压缩的列。
图1自动化 in-memory
图1 说明
当INMEMORY_AUTOMATIC_LEVEL
为时HIGH
,“ 自动内存”将连续监视IM存储中的列统计信息。该数据库通过内部列统计信息来识别IM存储区的寒冷区域,这些区域类似于热图所使用的区域,但无需HEAT_MAP
设置为ON
。通过使用热量级别统计信息,自动内存可以通过填充和逐出对象以及压缩列来优化存储。
如何把一个对象放在自动化in-memory工作
根据INMEMORY_AUTOMATIC_LEVEL
设置,数据库或用户将启用特定对象以进行内存访问。
将INMEMORY_AUTOMATIC_LEVEL
初始化参数设置HIGH
为时,INMEMORY
将自动标记所有不具有预先存在的设置的段INMEMORY MEMCOMPRESS AUTO
。对于分区表,Oracle数据库现有分区和新分区的压缩级别设置为MEMCOMPRESS AUTO。在所有情况下,如果段具有预先存在的 INMEMORY 设置,则保留先前的设置。
该MEMCOMPRESS AUTO
设置意味着将自动启用段以进行内存中访问,而无需DDL。请注意,内存中表具有DML的开销。如果您担心具有中等或较高DML级别的表的HIGH
启用INMEMORY
级别,则可以NO INMEMORY
手动指定这些表。您可以NO INMEMORY
通过指定INMEMORY MEMCOMPRESS AUTO
子句来重新启用表。
如果INMEMORY_AUTOMATIC_LEVEL
不是HIGH
,则NO INMEMORY
默认情况下所有对象都是。如果设置INMEMORY_AUTOMATIC_LEVEL
为HIGH
,并且以后又将其设置为其他值,则数据库会将之前的所有段都更改MEMCOMPRESS AUTO
为NO INMEMORY
。在这种情况下,您必须执行DDL以启用所需的段以进行内存访问,就像未启用“ Automatic In-Memory”时必须执行的操作一样。例子 设置 自动化in-memory 为high
在此示例中,启用了IM列存储,但是当前没有任何段具有用户指定的INMEMORY
设置,并且禁用了“ Automatic In-Memory”。您salespdb
以管理员身份登录,然后执行以下操作:
- 查询数据字典以确定是否将任何表指定为
INMEMORY
:
`
SELECT TABLE_NAME, PARTITIONED, INMEMORY, INMEMORY_COMPRESSION FROM DBA_TABLES WHERE OWNER='SH' AND TABLE_NAME IN ('COUNTRIES', 'PRODUCTS', 'TIMES') ORDER BY TABLE_NAME; TABLE_NAME PAR INMEMORY INMEMORY_COMPRESS -------------------------- --- -------- ----------------- COUNTRIES NO DISABLED PRODUCTS NO DISABLED TIMES NO DISABLED
复制
`
设置countries表使用 in-memory
ALTER TABLE sh.countries INMEMORY MEMCOMPRESS FOR CAPACITY HIGH;
复制
查询数据字典进行确认
SELECT TABLE_NAME, PARTITIONED, INMEMORY, INMEMORY_COMPRESSION FROM DBA_TABLES WHERE OWNER='SH' AND TABLE_NAME IN ('COUNTRIES', 'PRODUCTS', 'TIMES') ORDER BY TABLE_NAME; TABLE_NAME PAR INMEMORY INMEMORY_COMPRESS -------------------------- --- -------- ----------------- COUNTRIES NO ENABLED FOR CAPACITY HIGH PRODUCTS NO DISABLED TIMES NO DISABLED
复制
连接CDB 根并设置INMEMORY_AUTOMATIC_LEVEL为High
ALTER SYSTEM SET INMEMORY_AUTOMATIC_LEVEL = 'HIGH' SCOPE=SPFILE
复制
重启CDB
SHUTDOWN IMMEDIATE STARTUP
复制
登录 salespdb 并查询数据字典确认现在in-memory 压缩设置
SELECT TABLE_NAME, PARTITIONED, INMEMORY, INMEMORY_COMPRESSION FROM DBA_TABLES WHERE OWNER='SH' AND TABLE_NAME IN ('COUNTRIES', 'PRODUCTS', 'TIMES') ORDER BY TABLE_NAME; TABLE_NAME PAR INMEMORY INMEMORY_COMPRESS -------------------------- --- -------- ----------------- COUNTRIES NO ENABLED FOR CAPACITY HIGH PRODUCTS NO ENABLED AUTO TIMES NO ENABLED AUTO
复制
countries
手动指定为的表将INMEMORY
保留其先前的设置。现在,其他表具有压缩级别AUTO
。
将INMEMORY MEMCOMPRESS AUTO
属性应用于countries
表:
ALTER TABLE sh.countries INMEMORY MEMCOMPRESS AUTO;
复制
查询数据字典以确定当前的INMEMORY
压缩设置:
ELECT TABLE_NAME, PARTITIONED, INMEMORY, INMEMORY_COMPRESSION FROM DBA_TABLES WHERE OWNER='SH' AND TABLE_NAME IN ('COUNTRIES', 'PRODUCTS', 'TIMES') ORDER BY TABLE_NAME; TABLE_NAME PAR INMEMORY INMEMORY_COMPRESS -------------------------- --- -------- ----------------- COUNTRIES NO ENABLED AUTO PRODUCTS NO ENABLED AUTO TIMES NO ENABLED AUTO
复制
现在所有表都显示压缩级别AUTO
。