b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

新IM存储不会增加双倍的内存需求,列格式加速分析

电脑杂谈  发布时间:2021-03-15 13:05:41  来源:网络整理

打开

参考

内存是Oracle的一个选项,类似于RAC,ADG,已发布在1 2. 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会自动保持数据的一致性,并在后台自动刷新列式存储。所有这些对应用程序都是透明的。

同样,列数据不是高速缓存,因此在高速缓存中没有“老化”的概念。加载时,必须加载指定列中的所有数据行,但是无法选择某些行。

内存列存储

DBIM需要在内存中保留空间,该内存属于SGA中的静态池,这是纯列存储。列存储不能代替缓冲区高速缓存,而是作为补充,因此现在可以以行和列格式将数据存储在内存中。

通过INMEMORY_SIZE控制DBIM内存的大小,至少100M,如果大于0,则启用DBIM功能。

作为静态池,在重新启动实例之前,对INMEMORY_SIZE参数所做的任何更改都不会生效。

内存中区域可分为两个池:1MB池,用于存储填充到内存中的实际列格式数据,称为内存中压缩单元(IMCU);一个64K的池,用于存储填充的IMCU。存储在该列中的对象的元数据和事务的状态称为快照元数据单元(Snapshot Metadata Unit,SMU)。修改数据后,SCU可以记录哪些列数据已过期并且需要修改。

填充内存列存储

将填充列存储在内存中也称为填充。 DBIM向表和实例化视图添加了一个新的INMEMORY属性。具有INMEMORY属性的对象可以加载到IM列存储中。

可以在表空间,表,(子)分区或实例化视图上指定INMEMORY属性。您可以通过消除的方式选择一些列和一些分区,但是不能选择一些行。

ALTER TABLESPACE ts_data INMEMORY; -- 所有表空间中的表
ALTER TABLE sales INMEMORY; -- 表的所有列
ALTER TABLE sales INMEMORY NO INMEMORY(prod_id); -- 表的所有列,除去prod_id
ALTER TABLE sales MODIFY PARTITION SALES_Q1_1998 NO INMEMORY; -- 表的所有分区,除去SALES_Q1_1998分区

IM列存储由一组称为工作进程(ora_w001_orcl)的后台进程填充。填充后,即可完全访问。

oracle内存_oracle内存设置_oracle expdp全库备份

其他制造商的纯内存需要等待,直到所有数据都填充到内存中,然后才能访问它们,但这会导致严重的可用性问题。

填充是一种流机制,该机制使用列格式并在填充时压缩数据。

就像磁盘上的表空间由多个段组成一样,IM列存储也由多个内存中压缩单元(IMCU)组成。

每个工作流程都分配自己的IMCU,并用一些块填充它。在填充过程中,不会以任何特定方式对数据进行排序或排列。数据以行格式显示的顺序读取。

在打开后,将立即按照优先级将对象填充到IM列存储中,或者将在第一次扫描(查询)之后将对象填充到IM列存储中。对象的加载顺序由关键字PRIORITY控制,该关键字具有五个级别。默认的“优先级”为“无”,这意味着仅在第一次扫描后才填充对象。

对于索引组织表(IOT)和集群表,由于它们的功能是面向OLTP的,因此DBIM不支持它们,也不支持像LONG这样的离线LOB。

当前,DBIM不能在ADG的备用实例中使用。将来会得到支持,以便灾难恢复站点可以用于分析并提高其投资回报率。

内存中压缩

压缩通常仅被视为节省空间的机制。但是,使用一组新的压缩算法压缩填充到IM列存储中的数据。这种新的压缩算法不仅有助于节省空间,而且可以提高查询性能。这种新的Oracle内存中压缩格式允许直接在压缩列上执行查询。这意味着将对非常少量的数据执行所有扫描和过滤操作。仅当结果集需要数据时才解压缩数据。使用关键字MEMCOMPRESS(INMEMORY属性的分子语句)指定内存中压缩。有六个级别,每个级别提供不同的压缩级别和性能。

默认情况下,FOR QUERY LOW选项用于压缩数据,从而提供最佳的查询性能。用这种方式压缩对性能影响很小的原因是它使用了字典压缩,实际上是重复数据删除。

表的每个列或每个分区可以使用不同的压缩技术,例如:

CREATE TABLE employees
( c1 NUMBER, c2 NUMBER,
c3 VARCHAR2(10),  CLOB ) 
INMEMORY MEMCOMPRESS FOR QUERY 
NO INMEMORY() 
INMEMORY MEMCOMPRESS FOR CAPCITY HIGH(c2);

使用Oracle Compression Advisor(DBMS_COMPRESSION)可以评估哪种压缩方式。

在内存中扫描

内存中的扫描速度取决于以下因素。

列式存储

这时,最基本的事情是分析只访问部分列,从而避免了很多I / O。好处类似于分区,但垂直分区。

存储索引

这项技术已经出现在Exadata中,其原理在DBIM中是相同的。内存中存储索引跟踪IMCU中每一列的最小值和最大值,其好处类似于分区修剪。

存储索引会自动保存在内存中,但是我不知道每次重新启动它是否都需要重新计算。

SIMD矢量处理

SIMD也称为处理多个数据的单指令。 SIMD不是Oracle的技术,最初用于计算机生成的和高性能计算。

优点是SIMD向量处理允许发出一个CPU指令来估计一组列值,而不是一次在列中输入一个条目

加入内存

除了内存速度进行分配,可以指定DISTRIBUTE BY PARTITION来将分区分配给不同的节点,也可以指定DISTRIBUTE BY SUBPARTITION来将子分区分配给不同的节点。

RAC可以使用DISTRIBUTE来实现分布式和并行处理,而Exadata上的RAC可以与DUPLICATE结合使用以实现容错能力并提高并行度。

DUPLICATE只能复制到另一个RAC节点,或通过DUPLICATE ALL复制到所有节点,但是复制和一致性维护的成本应该相对较高。

多租户环境中的内存中列存储

Oracle Multitenant是一种新的集成模型,其中多个可插拔(PDB)集成在容器(CDB)中。在保持单个的多个隔离特性的同时,它还支持多个PDB共享一个公共CDB的系统全局区域(SGA)和后台进程。因此,多个PDB也共享一个IM列存储。

通过在CDB中设置INMEMORY_SIZE参数来控制IM列存储的总大小。通过设置每个PDB的INMEMORY_SIZE参数,可以指定它可以使用的共享IM列存储的大小。并非给定CDB中的所有PDB都需要使用内存中列存储。某些PDB可以将INMEMORY_SIZE参数设置为0,这意味着它们根本不使用内存列存储。

PDB的INMEMORY_SIZE参数的总和不必小于或等于CDB的INMEMORY_SIZE参数的大小。 PDB可能会过度使用IM列存储。允许过度使用可确保关闭或拔出可插拔时,不会浪费IM列存储的宝贵空间。由于INMEMORY_SIZE参数是静态的(需要重新启动实例以反映更改),因此最好允许过多使用PDB,以便可以使用IM列存储的所有空间。

但是,由于这种过度使用,一个PDB可能会抢占IM列存储中另一个PDB的空间。如果您不想长时间关闭或拔下任何PDB,建议不要过度使用。

控制针对Oracle内存的核心初始化参数优化器技巧的使用

例如SELECT / + NO_INMEMORY /

监视和管理Oracle内存中哪些对象在内存列存储中

有两个新的vviews-v“> views-v

IM_SEGMENTS和v $ IM_USER_SEGMENTS,这两个视图可以指示当前填充到IM列存储中的对象。

SQL> SELECT v.owner, v.segment_name name,
v.populate_status status, v.bytes_not_populated
FROM v$im_segments v; 
OWNER      NAME        STATUS    BYTES_NOT_POPULATED
---------- --------------- --------- -------------------
SSB    DATE_DIM    COMPLETED               0
SSB    PART        COMPLETED               0
SSB    SUPPLIER    COMPLETED               0
SSB    LINEORDER       STARTED         835780608
SSB    CUSTOMER    COMPLETED               0

USER_TABLES

* _ TABLES字典表中添加了一个新的布尔列(称为INMEMORY),以指示为哪些表分配了INMEMORY属性。

SQL> SELECT table_name, cache, inmemory, inmemory_priority,
inmemory_distribute,inmemory_compression
FROM user_tables; 
TABLE_NAME CACHE        INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS
---------- -------------------- -------- -------- --------------- -----------------
DATE_DIM       Y        ENABLED  NONE     AUTO        FOR QUERY LOW
LINEORDER      Y        ENABLED  NONE     AUTO        FOR QUERY LOW
SUPPLIER       Y        ENABLED  NONE     AUTO        FOR QUERY LOW
CUSTOMER       Y        ENABLED  NONE     AUTO        FOR QUERY LOW
PART           Y        ENABLED  NONE     AUTO        FOR QUERY LOW

管理IM列存储填充的CPU使用率

IM列存储的初始填充是占用大量CPU的操作,并且可能会影响同时运行的其他工作负载的性能。您可以使用Resource Manager2来控制IM列存储填充操作的CPU使用率,并根据需要更改操作的优先级。

参考


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-365114-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...