【新特性视频第2期】关于IMEU与Expression Statistics Store

新特性5分钟,带你循序渐进了解Oracle 12.2的最新特性。优秀就是每天进步一点点。

上一期视频回顾:

【视频】In Memory的内部结构和实现机制

{ 今日主题 }

IMEU与Expression Statistics Store

Oracle 12c 中提出了In Memory 的新特性,将行数据转化为列式存储数据,能够在很大程度上提升查询分析类的业务的性能。在IM存储中,有一个重要的组成部分是IMEU,用于存储数据库常用的表达式。本期视频课程主要讲解IMEU中的表达式的来源,工作机制及管理维护。作者将以最简单明了的方式带你了解神秘的Oracle 12.2.

知识点补充

ESS简介

Expression Statistics Store (ESS)是Oracle数据库中优化器用于存储表达式评估的统计信息的存储库。它不仅保留在SGA中,同时固定在磁盘上。

ESS是数据库的固定且永久的组件,不能被禁用。它跟IN-MEMORY是独立的,并没有直接关联。无论系统有没有配置In-Memory存储,ESS都会正常地运行。

ESS工作原理

ESS的主要作用是确定一个表达式是不是足够“hot”(被评选为hot的表达式就是我们所说的In Memory Expressions)。 在数据库进行硬解析的时候,ESS会获取SQL语句的Select语句,where语句,group by语句中使用的表达式并做评估。

如下图所示,在SQL语句中,employees这张表上使用了表达式,优化器会自动收集表达式相关的统计信息,存在一张表里面形成存储库,并对其中的表达式进行各种指标的评估。

评估的内容包含:

1、表达式执行的频率

2、表达式的开销

3、时间戳的评估

优化器会根据开销和执行次数等信息的评估为每一条表达式打分,相当于权重,这个权重并不是非常精确的,而是近似的。通常越活跃的表达式,其分值就越高。这些评分结果ESS会在内部通过一张列表进行统计。

在ESS中被评估为hot的表达式,会作为填充到IMEU中的候选表达式,但系统真正决定哪些表达式会被填充到IMEU当中,事实上是通过DBMS_INMEMORY_ADMIN的包来控制的。

IMEU的填充

如果在系统中配置了IN-MEMORY存储,系统会将部分热度最高的表达式填充到IMEU中,从而提供更高效的访问。

数据库通过DBMS_INMEMORY_ADMIN包可以控制IM表达式的行为。在这个包中有很多个存储过程,分别实现不同的功能。

(事实上,DBMS_INMEMORY_ADMIN包除了控制IM Expression之外,还负责管理IM FastStart区。这部分我们后面再详细描述。)

其中最主要的两个存储过程如下:

1、存储过程IME_CAPTURE_EXPRESSIONS提示数据库识别并逐渐填充数据库中最热的表达式

2、存储过程IME_POPULATE_EXPRESSIONS强制数据库立即填充表达式。

填充过程如下图所示:

在系统调用IME_CAPTURE_EXPRESSIONS存储过程的时候,就会访问SGA中的ESS,并捕获指定时间段内的访问热度最高的前20个表达式,将其填充到IMEU中,并创建SYS_IME的虚拟列。

时间段可以选择过去24个小时以内的,或者从数据库创建后的任意时间段。一般系统选择的原则是,该表达式设计到的对象至少有部分被填充到了IM Store当中了。也就是对象是满足IN-MEMORY属性的。

如果在上一次调用中,某个处于前20个热度最高的表达式的列表中的项,在这次的调用中并不存在,那么该列的属性将会被设置为No inmemory,这些被标记为No inmemory属性的表达式,会在下次重构的时候被踢出来。

将ESS中热度最高的表达式填充到IMEU需要满足几个条件:

1、初始化参数INMEMORY_EXPRESSIONS_USAGE的值不为 DISABLE。

INMEMORY_EXPRESSIONS_USAGE参数的值有以下四个:

  1. ENABLE - 默认设置,会将动态和静态的IM Expression都填充到到列存储中。
  2. DISABLE - 不进行填充。此时调用IME_CAPTURE_EXPRESSIONS存储过程的时候是不生效的。
  3. STATIC_ONLY - 只填充静态的IM Expression,也就是允许在IM列上存储二进制的JSON对象。在系统内部,二进制的JSON对象被存储为名SYS_IME_OSON的虚拟列;
  4. DYNAMIC_ONLY - 只填充使用频率更高的或被系统标记为'hot'的表达式,在调用IME_CAPTURE_EXPRESSIONS存储过程的时候会自动进行填充。

2、初始化参数INMEMORY_SIZE设置为非0.

3、初始化参数COMPATIBLE必须设置为12.2.0或者更高的值。

COMPATIBLE参数的作用是,当使用较高版本的Oracle时,如果因为特殊需求需要开启旧版本的某些功能,就可以通过将该参数的值调整到合适的版本。默认值是跟数据库当前的版本一致的。

作者简介

孙雪 云和恩墨技术顾问

主讲课程:

Oracle 12.2体系架构及新特性系列视频课程

RAC系列视频课程

视频内容

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

原文发表时间:2017-09-29

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Go 语言实现 MapReduce 框架

MapReduce 是 Google 提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。简而言之,就是将任务切分成很小的任务然后一个一个区的执行最后...

3556
来自专栏PhpZendo

需要掌握的 Laravel Eloquent 搜索技术

当我们的应用程序访问较少时(例如在项目初期阶段),直接进行项目编码就可以解决大多数问题。项目中的搜索功能也是如此,没必要在一开始就引入完整的第三方类库进行搜索功...

502
来自专栏大数据挖掘DT机器学习

用通俗易懂的大白话讲解Map/Reduce原理

Hadoop简介 Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hb...

3238
来自专栏我的小碗汤

19个很有用的 ElasticSearch 查询语句 篇二

另一个结构化查询的例子是 范围查询。在这个例子中,我们要查找 2015 年出版的书。

782
来自专栏编程札记

Lucene构建个人搜索引擎解析

简单来说,Lucene提供了一套完整的工具来帮助开发者构建自己的搜索引擎,开发者只需要import Lucene对应的package即可快速地开发构建自己的业务...

592
来自专栏Java3y

数据库原理

什么是数据库? 数据库是一个以某种有组织的方式存储的数据集合。也就是:保存有组织数据的容器(一个文件或一组文件) 为什么我们需要数据库? 毫无疑问,数据库是用来...

3127
来自专栏JackieZheng

Hadoop阅读笔记(二)——利用MapReduce求平均数和去重

前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里;那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨...

2506
来自专栏数据派THU

独家 | 一文读懂PySpark数据框(附实例)

本文中我们将探讨数据框的概念,以及它们如何与PySpark一起帮助数据分析员来解读大数据集。

541
来自专栏大数据

No.67 Hadoop 实践案例——记录去重

转载声明 本文为灯塔大数据原创内容,欢迎个人转载至朋友圈,其他机构转载请在文章开头标注:转自:灯塔大数据;微信:DTbigdata 编者按:灯塔大数据将每周持续...

1828
来自专栏CSDN技术头条

Hadoop旧mapreduce的map任务切分原理

前言 最近在工作过程中接触一些Hive数据仓库中的表,这些表实际是从关系型数据库通过Sqoop抽到Hive的。在开发过程中对map任务的划分进行性能调优,发现...

18910

扫码关注云+社区