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 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