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

相关文章

来自专栏沃趣科技

事件统计 | performance_schema全方位介绍

在上一篇 《事件记录 | performance_schema全方位介绍"》中,我们详细介绍了performance_schema的事件记录表,恭喜大家在学习p...

1333
来自专栏JavaWeb

MySQL-大批量数据如何快速的数据迁移

1072
来自专栏Java帮帮-微信公众号-技术文章全总结

【数据库】MySQL进阶四、select

【数据库】MySQL进阶四、select mysql中select * for update 注: FOR UPDATE 仅适用于InnoDB,且必须在事务区...

4067
来自专栏沃趣科技

数据库对象事件与属性统计 | performance_schema全方位介绍

上一篇《事件统计 | performance_schema全方位介绍》详细介绍了performance_schema的事件统计表,但这些统计数据粒度太粗,仅仅按...

1394
来自专栏Rgc

项目中记录影响性能的缓慢数据库查询

如果程序性能随着时间推移不断降低,那很有可能是因为数据库查询变慢了,随着数据库规模的增长,这一情况还会变得更糟。优化数据库有时很简单,需要在程序和数据库之间加入...

33911
来自专栏前端架构

MySQL事务处理

事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的...

401
来自专栏乐沙弥的世界

Oracle OWI 等待事件视图(v$session_wait/v$session_event/v$system_event)

    通常情况下,用户提交一条SQL语句,总会存在这样或那样的等待事件。也就是说由于所需资源被占用导致进程不得不处于等待状态。Oracle为我们提供了获取这些...

603
来自专栏架构师之路

58到家MySQL军规升级版

一、基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读: (1)通用,无乱码风险,汉字3字节,英文1字节 (...

37315
来自专栏

使用splice实现高效的代理服务器

很多网络应用场景下, 当原设备与目标设备无法直接建立连接时,这时就需要一台代理服务器进行中转。代理服务器只需要将来自源设备的报文 原封不动的转发给目标设备,而并...

1839
来自专栏chenssy

【死磕Sharding-jdbc】---路由&执行

继续以 sharding-jdbc-example-jdbc模块中的 com.dangdang.ddframe.rdb.sharding.example.jdb...

763

扫描关注云+社区