开启INMEMORY比较简单,配置inmemory_size、inmemory_max_populate_servers这2个参数即可生效。
inmemory_size表示占用内存的大小,取值范围100m-16G。CDB、PDB可以独立配置,PDB的inmemory_size的总和不能超过CDB。设置后重启生效。
inmemory_max_populate_servers 是用于设置将数据加载到内存的后台进程数量,建议取值为“CPU_COUNT的一半”与“PGA_AGGREGATE_TARGET除以512M”中的较小者。可以适当调整,但注意不要将该参数的值设置得太高。如果将其设置为接近CPU数或更高,则将没有CPU可供系统其他进程运行。
sys用户下的对象及SYSTEM、SYSAUX表空间上的对象无法使用IMO特性,但通过设置“_enable_imc_sys”隐含参数也可以使用。
SQL> alter system set inmemory_size=100M scope=spfile;
System altered.
SQL> alter system set inmemory_max_populate_servers=2;
System altered.
将表test1从inmemory中剔除
SQL> alter table test1 no inmemory;
Table altered.
SQL> select TABLE_NAME,INMEMORY_PRIORITY,INMEMORY_DISTRIBUTE,INMEMORY_COMPRESSION from user_tables where table_name='TEST1';
TABLE_NAME INMEMORY_PRIORITY INMEMORY_D INMEMORY_COMPRESSION
-------------------- ------------------------ ---------- ---------------------------------------------------
TEST1
重启后查看sga,即可看到In-Memory Area的值。
SQL> show sga
Total System Global Area 2818568848 bytes
Fixed Size 9138832 bytes
Variable Size 637534208 bytes
Database Buffers 2046820352 bytes
Redo Buffers 7634944 bytes
In-Memory Area 117440512 bytes
将表放入内存
SQL> create table test1 as select * from dba_objects;
Table created.
SQL> alter table test1 inmemory;
Table altered.
查看表是否处于inmemory中
SQL> select TABLE_NAME,INMEMORY_PRIORITY,INMEMORY_DISTRIBUTE,INMEMORY_COMPRESSION from user_tables where table_name='TEST1';
TABLE_NAME INMEMORY_PRIORITY INMEMORY_D INMEMORY_COMPRESSION
-------------------- ------------------------ ---------- ---------------------------------------------------
TEST1 NONE AUTO FOR QUERY LOW
另一个没有inmemory的表就没有相应的值
SQL> select TABLE_NAME,INMEMORY_PRIORITY,INMEMORY_DISTRIBUTE,INMEMORY_COMPRESSION from user_tables where table_name='TEST';
TABLE_NAME INMEMORY_PRIORITY INMEMORY_D INMEMORY_COMPRESSION
-------------------- ------------------------ ---------- ---------------------------------------------------
TEST