1 说明

When IM FastStart is enabled, the database periodically saves a copy of columnar data to disk for faster repopulation during instance restarts. If the database re-opens after being closed, then the database reads columnar data from the FastStart area, and then populates it into the IM column store, ensuring that all transactional consistencies are maintained.

An IM FastStart tablespace requires intermittent I/O while the database is open and operational. The performance gain occurs when the database re-opens because the database avoids the CPU-intensive compression and formatting of data.

当启用了IM列存储,那么In-Memory FastStart能够通过列存储数据将数据库快速打开。

FastStart aera

Oracle 12C R2-新特性-IM FastStart_sed

2 启用FastStart

2.1 前提条件

  • 创建一个表空间用于存储FastStart数据
  • 该表空间不可以包含其他数据,且Oracle推荐该表空间大小为IM大小的两倍。
  • 你必须具有管理员权限

2.2 具体例子

2.2.1 创建表空间fs_tbs

CREATE TABLESPACE fs_tbs
DATAFILE 'fs_tbs.dbf' SIZE 500M REUSE
AUTOEXTEND ON NEXT 500K MAXSIZE 1G;

2.2.2 将表空间fs_tbs作为FastStart area

EXEC DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE('fs_tbs');

2.2.3 查看FastStart area状态和大小

COL TABLESPACE_NAME FORMAT a15
SELECT TABLESPACE_NAME, STATUS,
( (ALLOCATED_SIZE/1024) / 1024 ) AS ALLOC_MB,
( (USED_SIZE/1024) / 1024 ) AS USED_MB
FROM V$INMEMORY_FASTSTART_AREA;
TABLESPACE_NAME STATUS ALLOC_MB USED_MB
--------------- -------------------- ---------- ----------
FS_TBS ENABLE 500 .0625

2.2.4 查看 FastStart LOB的logging模式

COL SEGMENT_NAME FORMAT a20
SELECT SEGMENT_NAME, LOGGING
FROM DBA_LOBS
WHERE TABLESPACE_NAME = 'FS_TBS';

SEGMENT_NAME LOGGING
-------------------- -------
SYSDBIMFS_LOBSEG$ NO

2.2.5 强制IM重新填充当前已经填充的对象

SELECT /*+ FULL(s) NO_PARALLEL(s) */ COUNT(*) FROM sh.sales s;
SELECT /*+ FULL(p) NO_PARALLEL(p) */ COUNT(*) FROM sh.products p;
SELECT /*+ FULL(c) NO_PARALLEL(c) */ COUNT(*) FROM sh.customers c;

2.2.6 查看 FastStart area大小和使用大小

COL TABLESPACE_NAME FORMAT a15
SELECT TABLESPACE_NAME, STATUS,
( (ALLOCATED_SIZE/1024) / 1024 ) AS ALLOC_MB,
( (USED_SIZE/1024) / 1024 ) AS USED_MB
FROM V$INMEMORY_FASTSTART_AREA;

TABLESPACE_NAME STATUS ALLOC_MB USED_MB
--------------- -------------------- ---------- ----------
FS_TBS ENABLE 500 2.25

3 迁移FastStart area到其他表空间

3.1 查看当前FastStart area的表空间

COL TABLESPACE_NAME FORMAT a15
SELECT TABLESPACE_NAME, STATUS
FROM V$INMEMORY_FASTSTART_AREA;

TABLESPACE_NAME STATUS
--------------- -----------
FS_TBS ENABLE

3.2 创建新的表空间new_fs_tbs

CREATE TABLESPACE new_fs_tbs
DATAFILE 'new_fs_tbs.dbf' SIZE 500M REUSE
AUTOEXTEND ON NEXT 500K MAXSIZE 1G;

3.3 将FastStart area迁移到新的表空间中

EXEC DBMS_INMEMORY_ADMIN.FASTSTART_MIGRATE_STORAGE('new_fs_tbs'); 

3.4 查看当前FastStart 的表空间:

SELECT TABLESPACE_NAME, STATUS
FROM V$INMEMORY_FASTSTART_AREA;
TABLESPACE_NAME STATUS
-------------------- --------------------
NEW_FS_TBS ENABLE

4 禁用IM FastStart

4.1 执行下面存储过程即可:

EXEC DBMS_INMEMORY_ADMIN.FASTSTART_DISABLE;

4.2 删除FastStart 表空间

DROP TABLESPACE fs_tbs INCLUDING CONTENTS AND DATAFILES; 

更多内容,请查看官方文档:
​​​https://docs.oracle.com/en/database/oracle/oracle-database/12.2/inmem/managing-im-faststart-for-im-column-store.html#GUID-CAA790EA-0CF6-44A8-A332-3CE23EC0FE79​