【12.2新特性】In-Memory列存储的FastStart管理

启用IM列存储时,In-Memory FastStart通过将IMCU直接存储在磁盘上来优化IM列存储中数据库对象的数量,使数据库通过将列数据存储在磁盘上更快地打开。数据库在崩溃和恢复之后或在复制到其他Oracle RAC实例期间也可以从IM FastStart区域读取。

简介

当数据库实例重新启动时,IM列存储将被填充,这个过程可能是I /O密集型和CPU密集型的慢速操作。

启用IM FastStart时,数据库会定期将一列列数据保存到磁盘中,以便在实例重新启动期间更快的重新填充。 如果数据库在关闭后重新打开,则数据库将从FastStart区域读取列数据,然后将其填充到IM列存储中,确保维护所有事务一致性。

在数据库处于open状态并可操作的情况下,IM FastStart表空间需要间歇性的I/O操作,在数据库重启时,由于避免了CPU密集型压缩和格式化数据的过程,因此在一定程度上提高了性能。

实现原理

FastStart区域是指定的表空间,用于存储和管理INMEMORY对象的数据。 Oracle数据库会自动管理FastStart表空间,无需DBA干预。

每个PDB或非CDB只允许一个FastStart区域和一个指定的FastStart表空间。 指定的IM FastStart表空间后,不能更改或删除。 在Oracle RAC数据库中,所有节点共享FastStart数据。

启用FastStart

使用DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE过程启用FastStart表空间。 空间管理工作进程(Wnnn)创建一个名为SYSDBinstance_name_LOBSEG $的空的SecureFiles LOB。

FastStart区域的管理

在启用FastStart区域后的第一次填充或重新填充期间,数据库将会创建FastStart区域。

数据库自动管理FastStart区域,具体包括:

1、每当发生对象的填充或重新生成时,数据库将其列数据写入FastStart区域。

空间管理工作进程(Wnnn)将IMCU(而不是IMEU或SMU)写入名为SYSDBinstance_name_LOBSEG $的SecureFiles LOB。 数据库将FastStart元数据写入SYSAUX表空间,SYSAUX表空间必须一直处于online状态。

根据CU进行DML操作的频繁程度,FastStart区域中的CU和IM列存储中的CU之间可能存在滞后。 DML越频繁的一个CU,数据库在IM列存储中填充的频率越低,将其写入FastStart区域的频率也越低。 如果数据库崩溃,那么在IM列存储中填充的一些CU可能不存在于FastStart区域中。

2、如果在段上定义ADO策略,则数据库将根据策略中的规则管理FastStart区域中的段。 例如,如果ADO指定对象根据策略将其属性更改为NO INMEMORY,则IM列存储从FastStart区域中删除其数据。

3、如果填充对象的属性更改为NOINMEMORY,则数据库将自动从FastStart区域中删除其IMCU。

4、如果FastStart表空间的空间不足,则数据库使用内部算法来删除最旧的段,并继续写入FastStart区域。 如果没有剩余空间,则数据库停止写入FastStart区域。

当启用FastStart区域时,数据库还会将这些段的IMCU写入fs_tbs中的FastStart区域。 如果数据库重新打开或实例重新启动,则数据库可以验证IMCU进行修改以确保事务一致性,并重新使用IMCU。 无论FastStart区域是否启用,数据库都会将数据块和磁盘区段存储在用户表空间中。

FastStart区域的数据读取

FastStart区域定义的是数据库重新打开时加载哪些数据,而不是什么时候加载数据。

当数据库重新打开时,加载的数据量由优先级决定。例如,数据库根据需要填充PRIORITY NONE的对象时,优先级为CRITICAL的对象会优先于优先级为LOW的对象被填充。

例如,在单实例数据库中,销售,客户和产品表在IM列存储中填充有PRIORITY NONE。在每次重新生成时,数据库将这些表的IMCU保存到FastStart区域。假设实例意外终止,重新打开数据库时,IM列存储空。如果一个查询扫描了销售,客户或产品表,那么数据库将该表的IMCU从FastStart区域加载到IM列存储中。

在大多数情况下,FastStart区域会增加计算的速度。但是,如果FastStart区域中存储的任何CU达到DML活动的内部阈值,则数据库将从数据文件而不是FastStart区域填充行数据。

启用FastStart

使用DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE过程为FastStart区域指定表空间。

设置为FastStart区域创建的LOB的日志记录模式。如果nologging参数设置为FALSE(默认),则数据库将使用NOLOGGING选项创建LOB。如果nologging设置为TRUE,则数据库将使用LOGGING选项创建FastStart LOB。

先决条件

要创建FastStart区域,必须满足以下先决条件:

1、将被指定为FastStart区域的表空间必须存在。

2、此表空间必须有足够的空间存储IM列存储的数据,并且在将其指定为FastStart区域之前,它不能包含任何其他数据。 Oracle建议您创建具有INMEMORY_SIZE设置大小的两倍的FastStart表空间。

3、必须具有管理员权限。

如何创建IM FastStart区域:

1、在SQL * Plus或SQL Developer中,使用必要的权限登录数据库。

2、使用DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE过程。

以下示例创建一个表空间并将其指定为FastStart区域。

1、在SQL * Plus或SQL Developer中,以管理权限登录数据库。

2、创建一个名为fs_tbs的表空间:

3、启用IM FastStart,并使用FastStart LOB的默认NOLOGGING选项将fs_tbs表空间指定为FastStart区域:

4、查询FastStart区域的状态和大小:

在这个阶段,FastStart区域中没有用户数据。

5、查询FastStart LOB的日志记录模式:

6、强制IM列存储重新填充任何当前填充的对象。以下查询强制重新销售销售,产品和客户表:

7、查询FastStart区域的大小:

通过查询V$ INMEMORY_FASTSTART_AREA视图获取当前指定为FastStart区域的表空间的名称。

如果没有启用FastStart表空间,则STATUS列显示NOT ENABLED; 否则,该列显示表空间名称。

先决条件

要检索FastStart表空间的名称,必须具有管理员权限。

如何检索FastStart表空间的名称:

1、在SQL * Plus或SQL Developer中,使用必要的权限登录数据库。 2、查询V $ INMEMORY_FASTSTART_AREA视图。

以下示例获取当前IM FastStart表空间的名称

此示例查询FastStart表空间的名称和状态(包括示例输出):

FastStart区域的迁移

可以通过在DBMS_INMEMORY_ADMIN包中运行FASTSTART_MIGRATE_STORAGE过程将FastStart区域迁移到其他表空间。

在非CDB或PDB中,一次只能指定一个表空间作为FastStart区域。

先决条件

1、将被指定为新的FastStart区域的表空间必须存在。

2、此表空间必须有足够的空间来存储IM列存储的数据,并且在将其指定为FastStart区域之前,它不能包含任何其他数据。

3、必须具有管理员权限。

迁移IM FastStart区域的步骤:

1、在SQL * Plus或SQL Developer中,使用必要的权限登录数据库。 2、运行DBMS_INMEMORY_ADMIN.FASTSTART_MIGRATE_STORAGE过程。

以下示例将FastStart区域迁移到不同的表空间

将IM FastStart区域迁移到new_fs_tbs表空间。

1、在SQL * Plus或SQL Developer中,以管理权限登录数据库。

2、查询当前FastStart表空间的名称:

3、创建一个名为new_fs_tbs的表空间:

4、将FastStart区域迁移到新的表空间:

5、查询当前FastStart表空间的名称:

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-05-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

Percona XtraDB Cluster集群状态监控(PXC 5.7)

每个节点可以有不同的集群视图。没有集中化监视节点。为了追踪问题的来源,您必须独立监控每个节点。

640
来自专栏大数据学习笔记

Hadoop基础教程-第14章 大数据面试笔试题汇总(持续更新)

第14章 大数据面试笔试题汇总(持续更新) 注意:大部分题目来自互联网,部分题目来自同事口述 14.1 Zookeeper (1)Zookeeper是什...

3156
来自专栏Linux驱动

第3阶段——内核启动分析之start_kernel初始化函数(5)

内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只...

26510
来自专栏算法channel

HDFS|基本概念和读写原理

01 — HDFS设计目的 A distributed file system that provides high-throughput access to ...

3117
来自专栏Python

MySQL常见的库操作,表操作,数据操作集锦及一些注意事项

一 库操作(文件夹) 1 数据库命名规则 可以由字母、数字、下划线、@、#、$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数...

1919

Kafka体系结构:日志压缩

这篇文章是从我们介绍Kafka 体系结构的一系列文章中获得的启发,包括Kafka topic架构,Kafka生产者架构,Kafka消费者架构和Kafka生态系统...

1873
来自专栏用户2442861的专栏

初学Redis(1)——认识Redis

http://blog.csdn.net/qtyl1988/article/details/39553339

702
来自专栏小樱的经验随笔

新人入坑Redis必会的吐血总结

Redis是一个使用C语言开发的开源的高性能的key-value存储系统,我们可以把它近似理解为Java Map。简单来讲,Redis是一种NOSQL内存数据库...

2312
来自专栏逸鹏说道

C#线程篇---让你知道什么是线程(1)

线程线程,进程进程,到底什么是线程,什么是熟练多线程编程? 今天来和大家一起讨论讨论线程基础,让大家知道线程的基本构造。 说线程之前,先要了解下进程,这个可不能...

3519
来自专栏xingoo, 一个梦想做发明家的程序员

大数据之Yarn——Capacity调度器概念以及配置

试想一下,你现在所在的公司有一个hadoop的集群。但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求。那么他们肯定会遇到同时提交...

2319

扫码关注云+社区