【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 条评论
登录 后参与评论

相关文章

来自专栏遊俠扎彪

如何解决MySQL中文乱码及插入中文信息错误的问题

从前和最近,帮人做点东西的时候,都遇到过MySQL与中文不兼容的问题,从前都是凭借尝试与运气解决问题这次好好总结一下:

1996
来自专栏互联网技术栈

Redis 队列

举例: 队列主要用在系统解耦、流量削峰、异步处理、数据顺序处理等场景。新手在使用时可能会犯一些常见的错误。下面讲一个新手容易犯的错误,在这个示例中把队列的入...

3235
来自专栏菜鸟计划

angularjs MVC、模块化、依赖注入详解

一、MVC ? <!doctype html> <html ng-app> <head> <meta charset="utf-8"> ...

3576
来自专栏Java技术分享

PDF.js专题

前言     英文是github上的原文,找不到中文资料,我根据自己理解翻译的,有些词意思拿不准就直接把单词留在原地了,看这个文档应该可以凑合着用了。 PDF....

1.4K10
来自专栏张戈的专栏

【 ES 私房菜】ElasticSearch 详细部署教程

Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。本文详细介绍了elasticserch的部署...

1.2K1
来自专栏何俊林

一个强大的网络库RxEasyHttp

本文来自周游的投稿,封装的网络请求库,github:https://github.com/zhou-you/RxEasyHttp,欢迎点击【阅读原文】,查看更多...

3698
来自专栏京东技术

必须掌握的ADB命令 | 让你的测试事半功倍

ADB的全称是Android Debug Bridge,是一个与模拟器或者连接设备通讯的桥梁。ADB是CS结构包含三个部分:

1.1K4
来自专栏云计算教程系列

开源资产管理系统Snipe-IT安装教程

在IT行业中,需要完整的生命周期跟踪资产的资产管理,包括采购,维护,存储和处置。Snipe-IT是专为IT资产管理而设计的免费开源应用程序,提供基于Web的界面...

1.1K4
来自专栏分布式系统进阶

Kafka重置消费的OffsetKafka源码分析-汇总

4002
来自专栏wireboy编程加油站

用Vue.js搭建一个小说阅读网站

这是一个使用vue.js + mint-ui + .net core api的小说网站。

2000

扫码关注云+社区