12c oracle 修改内存_Oracle Database 12c In-Memory(内存数据库) 基本原理与简介

转    https://blog.csdn.net/stevensxiao/article/details/51437274

参考文献

https://www.zhihu.com/question/19883454

https://blog.csdn.net/zhangzheng0413/article/details/8271322/

Database In-Memory是Oracle数据库的选项,类似于RAC,ADG,发布于12.0.1.2。

它的主要目的是利用内存的速度和优化的列格式来加速分析。以下我们用DBIM或IM作为Database In-Memory的缩写。

Oracle Database In-Memory 选件

行格式与列格式

传统的数据库概念中,行式数据库适合于OLTP的DML操作,如Oracle, Mysql;而列式数据库适合于分析,如Sybase IQ, SAP HANA。

而在一个混合负载的环境中,就会面临两难的选择。

DBIM在Oracle传统的行式存储之外提供了内存中的列式存储,然后自动的为用户访问选择后端的行式或列式存储,从而解决了此难题。

换句话说,在磁盘上只有一份数据,而在内存中则存在行式的Cache和列式的IM内存数据。

新的IM存储不会增加双倍的内存需求,首先因为我们无需将所有的列式数据都载入内容,其次内存中列式数据可以压缩,而且由于重复值较多,压缩的比率也较高。

增加了DBIM,通常内存需求会增加20%,具体可以使用In-Memory Advisor计算。

虽然列式数据适合于只读的情形,但并不意味数据不可修改,数据修改后,DBIM自动维护数据的一致性,自动在后台刷新列式存储,这一切对于应用都是透明的。

再次强调,列式数据不是Cache,因此也就没有Cache中Aging的概念。加载时需要将指定列的所有行数据加载,而不能选择某些行。

内存中列存储

DBIM在内存中需要预留空间,属于SGA中的静态池分,是纯列式存储。列存储不会取代缓冲区缓存,而是作为一种补充,以便数据现在可同时以行格式和列格式存储在内存中。

通过INMEMORY_SIZE控制DBIM内存的大小,至少为100M,当其大于0时,启用DBIM功能。

作为静态池,对 INMEMORY_SIZE 参数所做的任何更改在重启数据库实例后才会生效。

内存中区域可分为两个池:一个 1MB 池,用于存储填充到内存中的实际列格式数据,称为In Memory Compression Units

(IMCUs);一个 64K 池,用于存储填充到 IM 列存储的对象的元数据以及交易的状态, 称为 Snapshot Metadata

Units (SMUs)。当数据被修改是,SCU可以记录哪些列式数据是过期的,需要修改。

填充内存中列存储

填充内存中列存储又称为populate。DBIM为表和物化视图添加了一个新的 INMEMORY 属性,具有 INMEMORY 属性的对象可以加载到 IM 列存储。

可以在表空间、表、(子)分区或物化视图上指定 INMEMORY 属性。可以通过排除法的方式选择部分列和部分分区,但不能选择部分行。

ALTER TABLESPACE ts_data INMEMORY; -- 所有表空间中的表

ALTER TABLE sales INMEMORY; -- 表的所有列

ALTER TABLE sales INMEMORY NO INMEMORY(prod_id); -- 表的所有列,除去prod_id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值