Oracle 12cR2新特性 – IM FastStart

1. 什么时IM FastStart

当启用Oracle In-Memory特性后,Oracle需要将具有INMEMORY属性的对象填充到In-Memory Area内存中,这个填充过程叫populate,这个填充过程根据IO和CPU的情况,可能会比较慢。Oracle将这些具有INMEMORY属性的对象经过计算、压缩等,存放在In-Memory的IMCU中,而如果数据库重启,那这个填充过程需要重新执行。
而IM FastStart是将已经填充过的IMCU镜像数据定期存放到磁盘上,如果重启库,那就可以直接从磁盘上读取并加载IMCU。磁盘上存储IMCU数据的为IM FastStart表空间。

2. FastStart 表空间

FastStart区域是一个用于存放IMCU的表空间。指定后,Oracle自动管理,无需DBA介入。
对于每个PDB或非容器库,只允许指定一个FastStart表空间,这个表空间指后,就不能alert或者drop。对于RAC库,所有的节点都使用同一个FastStart表空间。

3. 如何启用FastStart

创建ASSM表空间,该表空间至少为inmemory_size的2倍大小

SQL> create tablespace im_fast_start datafile '/data/oracle/oradata/test1/im_fast_start_01.dbf' size 200m autoextend on maxsize 1G segment space management auto;

设置该表空间为FastStart区域

EXEC DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE('im_fast_start');

空间管理工作进程(Wnnn)会创建一个空间SecureFile LOB,名字叫SYSDBXXX_LOBSEG$

COL l_owner FORMAT a10
COL l_seg FORMAT a20
COL l_MB FORMAT 999999
SELECT l.OWNER l_owner, l.SEGMENT_NAME l_seg,
SUM(s.BYTES)/1024/1024 l_MB
FROM DBA_LOBS l, DBA_SEGMENTS s
WHERE l.SEGMENT_NAME = s.SEGMENT_NAME
AND l.TABLESPACE_NAME = 'IM_FAST_START'
GROUP BY l.OWNER, l.SEGMENT_NAME;

L_OWNER    L_SEG                  L_MB
---------- -------------------- -------
SYS        SYSDBIMFS_LOBSEG$          0

注意:这里这个SYSDBIMFS_LOBSEG$段大小为0

强制已填充的对象重新填充

SQL> select bytes/1024/1024 from user_segments where segment_name = 'IMTEST';

BYTES/1024/1024
---------------
            144

SQL> alter table imtest inmemory;

Table altered.

select /* full(i) */ count(*) from imtest i;

检查IM列存储

col owner for a10
col segment_name for a25
col MB for 9999999.99
select owner, segment_name, bytes/1048576 MB from v$im_segments;

OWNER      SEGMENT_NAME                      MB
---------- ------------------------- -----------
SCOTT      IMTEST                        142.63

检查FastStart区域已被填充

COL l_owner FORMAT a10
COL l_seg FORMAT a20
COL l_MB FORMAT 999999
SELECT l.OWNER l_owner, l.SEGMENT_NAME l_seg,
SUM(s.BYTES)/1024/1024 l_MB
FROM DBA_LOBS l, DBA_SEGMENTS s
WHERE l.SEGMENT_NAME = s.SEGMENT_NAME
AND l.TABLESPACE_NAME = 'IM_FAST_START'
GROUP BY l.OWNER, l.SEGMENT_NAME;
L_OWNER    L_SEG                  L_MB
---------- -------------------- -------
SYS        SYSDBIMFS_LOBSEG$          8

注意:这个段大小已为25MB

如果没有填充,可以手工进行IM FastStart的checkpoint

exec dbms_inmemory_admin.faststart_checkpoint;

L_OWNER    L_SEG                  L_MB
---------- -------------------- -------
SYS        SYSDBIMFS_LOBSEG$        16

检查IM FastStart的填充情况和检查点

select * from v$inmemory_faststart_area;

禁止IM FastStart

exec DBMS_INMEMORY_ADMIN.FASTSTART_DISABLE();

未禁止IM FastStart前删除FastStart表空间

SQL> drop tablespace im_fast_start including contents and datafiles;
drop tablespace im_fast_start including contents and datafiles
*
ERROR at line 1:
ORA-64379: Action cannot be performed on the tablespace assigned to FastStart while the feature is enabled

关于紫砂壶

感悟技术人生
此条目发表在Oracle基础知识分类目录,贴了标签。将固定链接加入收藏夹。