编辑手记: In-Memory 是 Oracle 在 12.1.0.2 中引入的新特性,旨在加速分析型 SQL 的速度。传统的 OLTP 应用通过 buffer cache 修改数据,分析性的 SQL 从 IM 列式存储中扫描数据,避免物理读成为性能瓶颈。那么在12.2最新版本中,In-Memory有哪些增强特性呢?我们一起来学习。
注:文章内容来自官方文档翻译。若需要了解更多,请查阅官方文档。文中配图来自Oracle文档。
1、In-Memory Expressions(列式存储表达式)
内存中列存储允许以压缩的列格式将对象(表,分区和子分区)填充到内存中。 内存表达式使经常评估的查询表达式能够在内存中列存储中实现,以供后续重用。
将经常使用的查询表达式的实现值填充到内存中列存储中大大减少了执行查询所需的系统资源,并提供更高的可扩展性。
2、In-Memory Virtual Columns(虚拟列)
内存虚拟列使表的某些或所有用户定义的虚拟列能够将其值实现(预先计算)并填充到内存中列存储以及该表的所有非虚拟列。
将用户定义的虚拟列的值实现到内存中列存储可以通过使用内存中技术(例如SIMD(单指令,多数据)向量处理)来扫描和过滤虚拟列值,从而大大提高查询性能, 就像一个非虚拟列。
3、In-Memory FastStart(列式存储快速启动)
内存列存储允许以压缩的柱形格式在内存中填充对象(例如表、分区和子分区)。 到目前为止,柱形格式只能在内存中使用。 这意味着在数据库重新启动后,必须使用多步骤过程从头开始填充内存中列存储,该过程将传统的行格式化数据转换为压缩的列格式并放入内存中。
内存中快速启动使数据以比以前更快的速度重新填充到内存中列存储中,方法是以压缩的柱形格式保存磁盘上内存列存储中当前填充的数据副本。
内存中的FastStart主要减少了系统重新启动后将数据重新填充到内存中列存储所需的时间。 这允许企业开始利用分析查询的性能优势,比以前更快地以柱形格式访问数据。
4、Automatic Data Optimization Support for In-Memory Column Store(列式存储自动数据优化支持)
自动数据优化(ADO)可实现信息生命周期管理(ILM)任务的自动化。 ADO的自动功能取决于热图功能,它在行级(聚合到块级统计)和段级跟踪访问。 最初,ADO支持使用在段或表空间级别定义的策略进行压缩分层和存储分层。 ADO支持现在已经扩展到包括内存中列存储。 ADO通过基于热图统计将对象(表,分区或子分区)移入和移出内存来管理内存中列存储。对内存中列存储的ADO支持可确保基于热图统计信息最优化使用内存中列存储。
由于内存中列存储是从系统全局区域(SGA)分配的,它使用主内存,主内存资源有限并且昂贵。 ADO确保只使用用户定义的策略在内存中列存储中填充最佳候选对象,提供了最佳性能,而不需要DBA经常干预手动管理内存中列存储的内容。
5、Join Groups(组连接)
填充到内存中列存储中的数据使用许多不同的编码技术进行压缩。 如果在连接中一起使用的两个列使用不同的技术编码,则必须解压缩这两个列以执行连接。 连接组允许用户指定哪些列用于跨表的连接,因此这些列始终可以使用相同的编码技术进行压缩。
在使用相同技术编码的连接中一起使用的列使得能够进行连接,而不必通过提高连接的效率来解压缩列。
6、Expression Tracking(表达式跟踪)
SQL语句通常包括诸如“+”或“ - ”的表达式。 更复杂的示例包括PL / SQL函数或SQL函数,如LTRIM和TO_NUMBER。 存储库维护在编译期间识别并在执行期间捕获的相关表达式的使用信息。 涉及多个列或函数的复杂表达式造成难以精确地估计优化器中的选择性,从而导致次优计划。 通过表达式跟踪,处理有关表达式及其用法的更多信息对于建立更好的查询执行计划很有用。
7、Oracle Database In-Memory Support on Oracle Active Data Guard(Oracle ADG上的列式存储支持)
Oracle Active Data Guard允许以只读模式打开standby数据库。 此功能使企业能够将生产报告工作负载从primary数据库卸载到同步standby数据库。 因此,现在可以在Oracle Active Data Guard standby数据库上使用内存中列存储。 这使得standby 数据库上处理的报告工作负载能够利用在存储器中以压缩柱状格式访问数据。 这也使扫描、联接和聚合的执行速度比传统磁盘格式的快。
还可以在primary数据库和standby数据库上的内存中列存储中填充完全不同的数据集,从而有效地将应用程序可用的内存中列存储的大小增加一倍。
通过启用在Oracle Active Data Guard standby数据库上运行的报告工作负载来使用内存中列存储,可以极大地提高工作负载的执行性能。 这是因为处理可以充分利用在存储器中以压缩柱形格式访问数据。
8、In-Memory Column Store Dynamic Resizing(列式存储自动调整列大小)
假设SGA中有足够的内存可用,就可以在数据库打开时动态增加内存区域的大小,可以调整内存中列存储的大小,而无需重新启动数据库。