【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区域。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


当启用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的表空间:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


7、查询FastStart区域的大小:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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


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

先决条件

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



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

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

2、查询V $ INMEMORY_FASTSTART_AREA视图。


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

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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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表空间的名称:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


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

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


本文来自Oracle官方文档翻译,若有不能理解之处,请参考原文。


文章转自数据和云公众号,原文链接

相关文章
|
3月前
|
存储 缓存 关系型数据库
InnoDB 引擎底层存储和缓存原理
InnoDB 引擎底层存储和缓存原理
|
11月前
|
存储 NoSQL 关系型数据库
【Cassandra从入门到放弃系列 二】Column-based存储模式
【Cassandra从入门到放弃系列 二】Column-based存储模式
160 0
|
存储 关系型数据库 MySQL
MySQL数据库 InnoDB引擎索引原理与设计索引调优简述
  MySQL的InnoDB引擎比较常用,了解它的索引原理,才能在设计索引的时候得心应手,轻松应对数据库表的优化。   也叫聚簇索引。   聚集索引 !=主键索引;   任何表都必然会有聚集索引,而主键索引并非必然存在。
133 0
|
存储 Linux Go
Boltdb学习笔记之一--存储管理
Boltdb学习笔记之一--存储管理
144 0
Boltdb学习笔记之一--存储管理
|
存储 缓存 算法
|
存储 SQL 容器
列式存储系列(二): Vertica
本文就 Vertica 的数据模型、存储、执行引擎以及这几个方面与 C-Store 的区别进行了简单的介绍。总的来说,Vertica 是一个纯正的列式存储数据库,为此,Vertica 设计实现了 projection 这一数据模型,并围绕该模型设计实现了一套大数据分析管理引擎。
|
SQL 存储 NoSQL
深入解析:DB2 V10.5新特性列式存储表的优点与缺点
相对于列存储,行存储的好处是增加修改数据容易,适合于 OLTP 事务型应用。
2529 0