【12.2新特性】在Oracle Active Data Guard上部署列式存储

摘要:本文将介绍Oracle 12.2中关于ADG的新特性,在ADG上部署列式存储。关于12.2更多新特性,

注:本文来自官方文档翻译。

一、In-Memory and Active Data Guard

在Active Data Guard上部署列式存储的目的

可以选在在主库、备库或者两者同时部署列式存储。当在主备库上同时部署了列式存储的时候,可以在两个库上对相同或者不同的对象集做操作,如果是操作不同的对象集,那就相当于增加了In-Memory的存储大小。

  • 在主备库上部署同样的In-Memory。

在最简单的情况下,主数据库和备用数据库都包含具有相同大小(不是必需的)的IM列存储。 IM列存储包含相同的对象。

此方案的优点是分析查询可以访问任一数据库上的IM列存储。 因此,可以将分析查询定向到备用数据库,而不消耗主数据库上的资源。主数据库用于支持事务工作负载,备用数据库支持分析工作负载。

实现方案如下:

1、在主数据库实例和备用数据库实例上设置INMEMORY_SIZE初始化参数。 2、确保备用数据库实例上的INMEMORY_ADG_ENABLED初始化参数设置为true(默认值)。 3、在要填充到两个IM列存储中的所有对象上设置INMEMORY属性。

如果更改对象的INMEMORY属性,则主数据库将更改传播到备用数据库。 例如,如果在销售表上设置NO INMEMORY属性,那么两个IM列存储都会逐出销售。

在主数据库上,可以启用表的一部分列以填充到IM列存储中。还可以为不同的列指定不同的压缩级别。启用特定列涉及字典更改。 主数据库上的DDL将传播到Oracle Active Data Guard数据库。

  • 只在standby 库上部署列存储

在此方案中,IM列存储存在于备用数据库中,但不存在于主数据库中。

在这种情况下,主数据库可以充当纯OLTP数据库。在IM列存储的主数据库中不需要额外的内存。可以将分析报告应用程序引导到备用数据库,而不会牺牲性能或消耗主数据库上的资源。

实现方案如下:

1、将备用数据库实例中的INMEMORY_SIZE初始化参数设置为非零值,并在主数据库实例中将其设置为0。 2、确保备用数据库实例上的INMEMORY_ADG_ENABLED初始化参数设置为true(默认值)。 3、使用要在备用数据库中的IM列存储中填充的所有对象的DISTRIBUTE FOR SERVICE子句设置INMEMORY属性。

例如,如果登录到主数据库,并且如果在shsales表上设置INMEMORY属性,则该表将不会填充到主数据库上的IM列存储中 - 因为没有IM列存储这个数据库。但是,备用数据库将继承sh.sales表上的INMEMORY属性。该表将填充在备用数据库中的IM列存储中。

  • 主库IN-MEMORY和备库IN-MEMORY存储不同对象

最灵活的场景是单独配置主数据库和备用数据库的IM列存储。

此方案的优点是您可以在每个数据库中运行不同的工作负载。 例如,HR应用程序在主数据库中运行报告,而销售历史记录应用程序在备用数据库中运行报告。 因此,两个数据库都没有承担分析报告的全部负载。

实现方案如下:

1、在备用数据库和主数据库实例上将INMEMORY_SIZE初始化参数设置为非零值。 这些值不需要相同。 2、确保备用数据库实例上的INMEMORY_ADG_ENABLED初始化参数设置为true(默认值)。 3、对要在两个IM列存储中填充的所有对象设置INMEMORY ... DISTRIBUTE FOR SERVICE子句。 服务指定填充对象的实例。

对应的三种服务:

在以上三种典型的配置中,将会创建三种服务:仅备用,仅主用、主用和备用三种服务。 例如,如果需要主实例中最近一个月的销售事实表数据,而备用实例中存储前一个月的销售数据。 则需要在两个实例中填充维度表。 对于每个销售分区,可以使用INMEMORY ... DISTRIBUTE FOR SERVICE指定备用或主要服务。 对于每个维度表,指定包括主数据库实例和备用数据库实例的服务。

注:在Oracle RAC中,可以将用于指定用于填充的实例的FOR SERVICE子句与控制IMCU分发的DISTRIBUTE AUTO或DISTRIBUTE BY子句组合。 但是,在Oracle Active Data Guard中,FOR SERVICE子句指定要在其中填充指定对象的主实例或备用实例:您不能使用DISTRIBUTE AUTO或DISTRIBUTE BY在主实例和备用实例之间分发IMCU。 例如,不能在主实例和备用实例之间划分销售表的总体,因此一半的IMCU位于主实例中,一半的IMCU位于备用实例中。

二、How IM Column Stores Work in Oracle Active Data Guard

在Oracle Active Data Guard环境中,对象级别PRIORITY属性控制填充。 仅在服务处于活动状态的数据库实例中填充对象。

用户是基于优先级的按需,取决于PRIORITY值。 当发生角色更改或切换时,数据库根据服务最新映射到的数据库实例集合重新填充表。

下图说明了使用主数据库中的重做更新备用数据库的内部机制。

实现方案如下:

1、主数据库生成重做,然后将重做传输到备用数据库。 2、在主数据库上为所有DML语句生成的重做包括指示是否对INMEMORY对象进行更改的元数据。 3、备用数据库将重做应用于存储在磁盘中的数据块。 4、由于备用数据库将正在进行的操作生成的重做应用于主数据库,备用数据库使它们在事务上保持一致。 5、如果修改了INMEMORY对象,则备用数据库将使用事务日志和快照元数据单元(SMU)来跟踪更改,从而使已修改的行无效,就像在主数据库上一样。

重新填充机制在备用数据库中的工作方式与在主数据库中相同。 当对象上发生足够的DML以达到内部阈值时,备用数据库会重新填充IM列存储中的对象。

三、Configuring IM Column Stores in an Oracle Active Data Guard Environment

在Oracle Active Data Guard中配置IM列存储需要设置INMEMORY_SIZE,并为要填充的对象正确设置INMEMORY属性。此任务需要充分了解Oracle Active Data Guard的概念和过程。

必须满足以下要求

COMPATIBLE设置必须为12.2.0或更大。 要填充每个数据库中的不同对象,请配置相应的服务。

要在Oracle Active Data Guard环境中配置IM列存储:

1、在将包含IM列存储的数据库实例上设置INMEMORY_SIZE初始化参数。

请遵循以下准则:

  • 要在主数据库和备用数据库上配置IM列存储,请在两个数据库实例上设置INMEMORY_SIZE。
  • 要仅在备用数据库上配置IM列存储,请在备用数据库实例上设置INMEMORY_SIZE。

2、确保备用数据库实例上的INMEMORY_ADG_ENABLED初始化参数设置为true(默认值)。

3、在主数据库上,使用INMEMORY属性执行DDL语句。

任务取决于IM列存储的存在位置,以及是否在每个IM列存储中填充不同的对象:

  • 如果两个数据库中都存在IM列存储,则连接到主数据库,并设置INMEMORY属性,而不使用DISTRIBUTE FOR SERVICE子句。例如,将INMEMORY属性应用于sh.sales表。

根据标准规则,在每个数据库上出现人口。例如,如果备用数据库上的销售优先级为NONE,那么触发完全扫描销售的备用数据库的查询会填充备用IM列存储中的此表。

  • 如果IM列存储仅存在于备用数据库中,则登录到主数据库,并设置INMEMORY属性而不使用DISTRIBUTE FOR SERVICE子句。

在重做传输期间,备用数据库从主数据库接收此DDL语句。 Population以正常方式出现在备用数据库上。例如,如果sales具有INMEMORY属性并且优先级为NONE,则表必须经历全面扫描以进行填充。

  • 如果两个数据库中都存在IM列存储,并且希望这些IM列存储包含不同的对象,请登录到主数据库,然后根据每个对象设置INMEMORY ... DISTRIBUTE FOR SERVICE。

在每个DDL语句中,服务指定应填充对象的实例。例如,要仅在备用数据库中启用销售,请在DDL语句中指定仅备用服务。要在两个数据库中启用产品群,请在DDL语句中指定一个备用和主要服务。

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

原文发表时间:2017-03-10

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

追本溯源:Oracle 只读表空间的探索实践

作者简介 ? 胡中豪 云和恩墨西区交付工程师,多年一线 DBA 经验,曾服务于运营商、电网、政府行业、银行等行业客户;擅长数据库故障处理、性能优化、实施升级 本...

2613
来自专栏Java呓语

第23章、存储程序和视图

本章讨论存储的程序和视图,这些数据库对象是根据存储在服务器上供以后执行的SQL代码定义的数据库对象。

593
来自专栏MYSQL轻松学

MYSQL常用的性能指标

(1) QPS(每秒Query量) QPS = Questions(or Queries) / seconds mysql > show global sta...

3547
来自专栏Rgc

mysql数据库优化(三)--分区

分区:把一个数据表的文件和索引分散存储在不同的物理文件中。 特点:业务层透明,无需任何修改,即使从新分表,也是在mysql层进行更改(业务层代码不动)

633
来自专栏破晓之歌

Mysql入门 原

712
来自专栏维C果糖

史上最简单的 MySQL 教程(三十九)「事务(下)」

事务原理:在事务开启之后,所有的操作都会被临时存储到事务日志,事务日志只有在收到commit命令之后,才会将操作同步到数据表,其他任何情况都会清空事务日志,例如...

39710
来自专栏散尽浮华

Mysql优化系列(1)--Innodb引擎下mysql自身配置优化

1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一...

3245
来自专栏网站那些事

利用 Zipkin 追踪 Mysql 数据库调用链

在前面:微服务调用链追踪中心搭建 一文中我们利用 Zipkin 搭建了一个微服务调用链的追踪中心,并且模拟了微服务调用的实验场景。利用 Zipkin 的库 Br...

54913
来自专栏抠抠空间

MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义。同真实的表...

3297
来自专栏友弟技术工作室

Beego Models 之 一ORM 使用方法

beego ORM 是一个强大的 Go 语言 ORM 框架。她的灵感主要来自 Django ORM 和 SQLAlchemy。

1833

扫码关注云+社区