Database In-Memory: A Deep Dive and a Future Preview

Similar documents
Oracle Database In-Memory

Oracle Database In-Memory

Oracle Database In-Memory

Copyright 2018, Oracle and/or its affiliates. All rights reserved.

Oracle Database In-Memory What s New and What s Coming

An Oracle White Paper June Exadata Hybrid Columnar Compression (EHCC)

Copyright 2014, Oracle and/or its affiliates. All rights reserved.

Oracle Database In-Memory

Oracle Database Database In-Memory Guide. 12c Release 2 (12.2)

Performance Innovations with Oracle Database In-Memory

Oracle Database In-Memory with Oracle Database 18c

Copyright 2013, Oracle and/or its affiliates. All rights reserved.

Oracle Database In-Memory with Oracle Database 12c Release 2

Recent Innovations in Data Storage Technologies Dr Roger MacNicol Software Architect

Oracle Database In-Memory By Example

Table Compression in Oracle9i Release2. An Oracle White Paper May 2002

Exadata Implementation Strategy

An Oracle White Paper February Optimizing Storage for Oracle PeopleSoft Applications

Was ist dran an einer spezialisierten Data Warehousing platform?

Real-World Performance Training Exadata and Database In-Memory

Exadata Implementation Strategy

Hybrid Columnar Compression (HCC) on Oracle Database 18c O R A C L E W H IT E P A P E R FE B R U A R Y

In-Memory is Your Data Warehouse s New BFF

Oracle Enterprise Data Architecture

Automatic Data Optimization with Oracle Database 12c O R A C L E W H I T E P A P E R S E P T E M B E R

Safe Harbor Statement

Oracle In-Memory & Data Warehouse: The Perfect Combination?

Copyright 2017, Oracle and/or its affiliates. All rights reserved.

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Oracle Exadata Implementation Strategy HHow to Implement Exadata In-house

The Role of Database Aware Flash Technologies in Accelerating Mission- Critical Databases

Improving Performance With 12c In-Memory Option

Insider s Guide on Using ADO with Database In-Memory & Storage-Based Tiering. Andy Rivenes Gregg Christman Oracle Product Management 16 November 2016

Storage Optimization with Oracle Database 11g

Copyright 2017, Oracle and/or its affiliates. All rights reserved.

#1290. Oracle Core: InMemory Column Performing Databases GmbH Mitterteich / Germany

An Oracle White Paper October Advanced Compression with Oracle Database 11g

Security and Performance advances with Oracle Big Data SQL

Oracle Exadata: Strategy and Roadmap

Automating Information Lifecycle Management with

Infrastructure at your Service. In-Memory-Pläne für den 12.2-Optimizer: Teuer oder billig?

Oracle Advanced Compression. An Oracle White Paper June 2007

Oracle Partitioning in Oracle Database 12c Release 2

Oracle Database Exadata Cloud Service Exadata Performance, Cloud Simplicity DATABASE CLOUD SERVICE

Part 1: Indexes for Big Data

Key to A Successful Exadata POC

Oracle Database 12c: JMS Sharded Queues

Oracle Big Data SQL High Performance Data Virtualization Explained

Oracle Database 11g for Data Warehousing and Business Intelligence

Oracle 1Z0-515 Exam Questions & Answers

Eine für Alle - Oracle DB für Big Data, In-memory und Exadata Dr.-Ing. Holger Friedrich

Copyright 2015, Oracle and/or its affiliates. All rights reserved.

VLDB. Partitioning Compression

The Next Generation of Extreme OLTP Processing with Oracle TimesTen

<Insert Picture Here> Controlling resources in an Exadata environment

Oracle Spatial and Graph: Benchmarking a Trillion Edges RDF Graph ORACLE WHITE PAPER NOVEMBER 2016

Oracle Exam 1z0-027 Oracle Exadata Database Machine X3 Administration Version: 6.13 [ Total Questions: 72 ]

Data Warehousing 11g Essentials

Oracle Database 12c Release 2 for Data Warehousing and Big Data O R A C L E W H I T E P A P E R N O V E M B E R

An Oracle White Paper September Oracle Utilities Meter Data Management Demonstrates Extreme Performance on Oracle Exadata/Exalogic

ORACLE DATA SHEET ORACLE PARTITIONING

ORACLE EXADATA DATABASE MACHINE X6-8

ColumnStore Indexes. מה חדש ב- 2014?SQL Server.

IBM Data Retrieval Technologies: RDBMS, BLU, IBM Netezza, and Hadoop

Oracle Database 11g Release 2 for SAP Advanced Compression. Christoph Kersten Oracle Database for SAP Global Technology Center (Walldorf, Germany)

Oracle Exadata. Smart Database Platforms - Dramatic Performance and Cost Advantages. Juan Loaiza Senior Vice President Oracle Database Systems

Data Warehousing & Big Data at OpenWorld for your smartphone

10/29/2013. Program Agenda. The Database Trifecta: Simplified Management, Less Capacity, Better Performance

An Oracle White Paper July Oracle Advanced Compression with Oracle Database 12c

Scaling JSON Documents and Relational Data in Distributed ShardedDatabases Oracle Code New York

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into

Shark: SQL and Rich Analytics at Scale. Yash Thakkar ( ) Deeksha Singh ( )

An Introduction to Big Data Formats

Oracle Advanced Compression with Oracle Database 12c Release 2 O R A C L E W H I T E P A P E R M A R C H

Oracle Flash Storage System QoS Plus Operation and Best Practices ORACLE WHITE PAPER OCTOBER 2016

Oracle Advanced Compression with Oracle Database 12c Release 2 O R A C L E W H I T E P A P E R S E P T E MB E R

An Oracle White Paper June Enterprise Database Cloud Deployment with Oracle SuperCluster T5-8

Memory Without Bounds: Policy- Based Automation in In-Memory Column Store Content

Oracle Exadata: The World s Fastest Database Machine

ORACLE EXADATA DATABASE MACHINE X7-8

1 Copyright 2012, Oracle and/or its affiliates. All rights reserved.

Copyright 2012, Oracle and/or its affiliates. All rights reserved.

EMC XTREMCACHE ACCELERATES ORACLE

Oracle Advanced Compression. An Oracle White Paper April 2008

Technical Sheet NITRODB Time-Series Database

Optimize OLAP & Business Analytics Performance with Oracle 12c In-Memory Database Option

Evolving To The Big Data Warehouse

Partitioning in Oracle Database 10g Release 2. An Oracle White Paper May 2005

<Insert Picture Here> Introducing Exadata X3

Oracle Database 10G. Lindsey M. Pickle, Jr. Senior Solution Specialist Database Technologies Oracle Corporation

Using Oracle In-Memory Advisor with JD Edwards EnterpriseOne

Oracle Big Data SQL brings SQL and Performance to Hadoop

1Z Oracle Exadata X5 Administration Exam Summary Syllabus Questions

So you think you know everything about Partitioning?

Oracle Database 12c: OCM Exam Preparation Workshop Ed 1

Private Cloud Database Consolidation Name, Title

Actual4Test. Actual4test - actual test exam dumps-pass for IT exams

Oracle Database 18c and Autonomous Database

Chapter 12: Indexing and Hashing

Oracle Big Data SQL. Release 3.2. Rich SQL Processing on All Data

Transcription:

Database In-Memory: A Deep Dive and a Future Preview Tirthankar Lahiri, Markus Kissling Oracle Corporation Keywords: Database In-Memory, Oracle Database 12c, Oracle Database 12.2 1. Introduction The Oracle Database In-Memory option provides a unique dual-format row/column in-memory representation thus avoiding the tradeoffs inherent in single-format in-memory databases. Unlike traditional in-memory databases, the new In-Memory option does not limit the size of the database to the size of available DRAM: the numerous optimizations at all levels in the storage hierarchy: DRAM, Flash, Disk, as well across machines in a RAC cluster, continue to allow databases of virtually unlimited size. OLTP Analytics Analytics Illustration 1. Dual-Format Database Architecture Note that this dual format representation does not double memory requirements. The Oracle Database buffer cache has been highly optimized over decades, and achieves extremely high hit-rates even with a very small size compared to the database size. Also, since the IM column store can replace analytic indexes, the buffer cache size can be further reduced. We therefore expect customers to be able to use 80% or more of their available memory for the IM column store. In this paper Sections 2 through 5 describe the basis architecture of Database In-Memory in Oracle Database 12.1.0.2. Section 6 describes the new innovations in Oracle Database 12.2. 2. New In-Memory Column Format The new column format is a pure in-memory format, introduced in Oracle Database 12.1.0.2. The use of the new in-memory column format has no effect on the existing persistent format for Oracle Database. Because the column store is in-memory only, maintenance of the column store in the presence of DML changes is very efficient, requiring only lightweight in-memory data manipulation. The size of the IM column store is specified by the initialization parameter INMEMORY_SIZE. 2.1 In-Memory Populate The contents of the IM column store are built from the persistent contents within the row store, a mechanism referred to as populate. It is possible to selectively populate the IM column store with a chosen subset of the database. The new INMEMORY clause for CREATE / ALTER statements is used to indicate that the corresponding object is a candidate to be populated into the IM column store.

Correspondingly, an object may be removed from the column store using the NO INMEMORY clause. The INMEMORY declaration can be performed for multiple levels of database objects: Entire Tablespace Entire Table Entire Partition of a table Only a specific Sub-Partition within a Partition The IM column store is populated using a pool of background server processes, the size of which is controlled by the INMEMORY_MAX_POPULATE_SERVERS initialization parameter. If unspecified, the value of this parameter defaults to half the number of CPU cores. Note that there is no application downtime while a table is being populated since it continues to be accessible via the buffer cache. In contrast, most other in-memory databases require that applications must wait till all objects are completely brought into memory before processing any user or application requests 2.2 In-Memory Compression Each table selected for in-memory storage is populated into the IM column store in contiguously allocated units referred to as In-Memory Compression Units (IMCUs). The target size for an IMCU is a large number of rows, e.g. half a million. Within the IMCU, each column is stored contiguously as a column Compression Unit (CU). The column vector itself is compressed with user selectable compression levels, depending on the expected use case. The selection is controlled by a MEMCOMPRESS subclause. There are basically three primary classes of compression algorithms optimized for different criteria: 1) FOR DML: This level of compression performs minimal compression in order to optimize the performance of DML intensive workloads 2) FOR QUERY: These schemes provide the fastest performance for queries while providing a 2x- 10x level of compression compared to on-disk. These schemes allow data to be accessed in-place without any decompression and no additional run-time memory. 3) FOR CAPACITY: These schemes trade some performance for higher compression ratios. They require that the data be decompressed into run-time memory buffers before it can be queried. The decompression imposes a slight performance penalty but provides compression factors of 5x 30x. The CAPACITY LOW sublevel uses an Oracle custom Zip algorithm (OZIP) that provides very fast decompression speeds; many times faster than LZO (which is the typical standard for fast decompression). OZIP is also implemented in a special-purpose coprocessor in the SPARC M7 processor. The compression levels are enumerated in Table II below. It is possible to use different compression levels for different partitions within the same table. For example in a SALES table range partitioned on time by week, the current week s partition is probably experiencing a high volume of updates and inserts, and it would be best compressed FOR DML. On the other hand, earlier partitions up to a year ago are probably used intensively for reporting purposes (including year-over-year comparisons) and can be compressed FOR QUERY. Beyond the one year horizon, even earlier partitions are probably queried much less frequently and should be compressed for CAPACITY to maximize the amount of data that can be kept in memory

3. In-Memory Query Processing The In-Memory column store accelerates all aspects of analytical processing including scans, joins and complex aggregation as described in this section. 3.1 In-Memory Scans Scans against the column store are optimized using vector processing (SIMD) instructions which can process multiple operands in a single CPU instruction. For instance, finding the occurrences of a value in a set of values as in Illustration 2 below, adding successive values as part of an aggregation operation, etc., can all be vectorized down to one or two instructions. Illustration 2: SIMD vector processing A further reduction in the amount of data accessed is possible due to the In-Memory Storage Indexes that are automatically created and maintained on each of the columns in the IM column store. Storage Indexes allow data pruning to occur based on the filter predicates supplied in a SQL statement. An In- Memory Storage Index keeps track of minimum and maximum values for each column CU. When a query specifies a WHERE clause predicate, the In-Memory Storage Index on the referenced column is examined to determine if any entries with the specified column value exist in each CU by comparing the specified value(s) to the minimum and maximum values maintained in the Storage Index. If the value is outside the minimum and maximum range for a CU, the scan of that CU is avoided. Columnar encoding, vector processing and storage indexes allow Billions of rows/sec scan speeds. 3.2 In-Memory Joins Apart from accelerating scans, the IM column store also provides substantial performance benefits for joins. Typical star joins between fact and dimension tables can be reduced to a filtered scan on a dimension table to build a compact Bloom filter of qualifying dimension keys (Illustration 3), and then a subsequent scan on the fact table using the Bloom filter to eliminate values that will not be join candidates. This greatly reduces the values processed by the join allowing 10x faster inmemory joins. lllustration 3: Bloom filter based inmemory joins

3.3 In-Memory Aggregations and Groupings The basic primitives of very fast scans and joins can be further leveraged to accelerate complex reports featuring multiple levels of aggregations and groupings. A new optimizer transformation, called Vector Group By, is used to compute multi-dimensional aggregates in real-time. The Vector Group By transformation is a two-part process similar to the well known star transformation. Let s consider the following query as an example, which lists the total revenue from sales of footwear products in outlet stores, grouped by store and by product: Select Stores.id, Products.id, sum(sales.revenue) From Sales, Stores, Products Where Sales.store_id = Stores.id And Sales.product_id = Products.id And Stores.type = Outlet And Products.type = Footwear Group by Stores.id, Products.id; The following execution steps (depicted in Illustration 4) allow 10x faster complex reporting: Step 1: The Query begins by scanning the STORES and PRODUCTS dimensions. Step 2: A new data structure called a Key Vector is created based on the results of each of these scans. A key vector maps a qualifying dimension key to a dense grouping key (e.g. each store that is of type outlet will have a non-zero grouping key numbered 1..N, while each product that is of type footwear will have a non-zero grouping key numbered 1..M ). Step 3: The key vectors are then used to create an additional multi-dimensional array known as an In- Memory Accumulator. Each dimension of the In-Memory accumulator will have as many entries as the number of non-zero grouping keys corresponding to that dimension; in the above example, it will be an (NxM) array. Step 4: The second part of the execution plan is the scan of the SALES table and the application of the key vectors. For each entry in the SALES table that matches the join conditions based on the key vector entries for the dimension values (i.e. has a non-zero grouping key for each dimension), the corresponding sales amount will be added to the appropriate cell in the In-Memory Accumulator. At the end, the In-Memory Accumulator will have the results of this aggregation. Illustration 4: Vector Group By example

4. In-Memory Column Store and Full Transactional Consistency The IM column store similarly maintains the same consistent read semantics as the buffer cache. Each IMCU is marked with the SCN of the time of its creation. An associated metadata area, known as a Snapshot Metadata Unit (SMU) tracks changes to the rows within the IMCU made beyond that SCN. Illustration 5: Change tracking and repopulate The SMU tracks the validity of rows within the IMCU. Changes made by transactions are processed as usual via the Buffer Cache, but for tables populated into the IM column store, the changes made to them are also logged in an in-memory transaction journal within the SMU. When a column scan runs against the base IMCU, it fetches the changed column values from the journal for all the rows that have been modified within the IMCU at an SCN earlier than the SCN of the scan (according to Consistent Read semantics, changes made at an SCN higher than the SCN of the scan are not visible to the scan). As changes accumulate in the journal, retrieving data from the transaction journal causes increased overhead for scans. Therefore, a background repopulate mechanism periodically rebuilds the IMCU at a new SCN, a process depicted in Illustration 5 above. There are two basic kinds of repopulate: 1) Threshold repopulate: Threshold repopulate is a heuristic driven mechanism that repopulates an IMCU once the changes to the IMCU exceed a certain threshold and various other criteria are met. 2) Trickle Repopulate: Trickle repopulate runs constantly and unobtrusively in the background, consuming a small fraction of the available repopulate server processes. The goal of trickle repopulate is to ensure that eventually any given IMCU will be completely clean even if it is had not been sufficiently modified to qualify for threshold repopulate. The number of populate background processes that can be used for trickle repopulate is controlled by another initialization parameter: INMEMORY_TRICKLE_REPOPULATE_SERVERS_PERCENT. This parameter defaults to 1. For example, if INMEMORY_MAX_POPULATE_SERVERS = 10, at most one-tenth of a single CPU core is dedicated to trickle repopulate by default.

5. In-Memory Column Store Scale-Out Apart from providing in-memory columnar storage on a single machine, Oracle Database In-Memory can scale out across multiple machines using the Oracle Real Application Cluster (RAC) configuration. Illustration 6: In-Memory Scale-Out On a RAC cluster, queries on in-memory tables are automatically parallelized across multiple instances as depicted in Illustration 6 above. This results in each parallel query process accessing local in-memory columnar data on each instance, with each process then only having to perform a fraction of the work. 5.1 Scale-Out Distribution and Parallel Execution The user can specify how the data within a table is to be distributed across the instances of a RAC cluster by using the DISTRIBUTE clause. There are four possible options for thus distributing the contents of a table: 1) DISTRIBUTE BY PARTITION: When a table is partitioned, this distribution scheme assigns all data from the same partition to the same instance and maps different partitions to different instances. This type of distribution is specially suited to hash partitions which usually exhibit uniform access across partitions. Distributing by partition has another potential benefit: It can allow in-memory partition-wise joins between two tables that are partitioned on the same attribute. For instance, if a SALES table is hash partitioned on order_id, and a SHIPMENTS table is likewise hash partitioned by order_id, the SALES to SHIPMENTS join can be accomplished as a set of local in-memory joins on each instance since the partitions will be co-located. 2) DISTRIBUTE BY SUBPARTITION: In Oracle Database, tables can be composite partitioned: i.e. Partitioned by some criteria, and then each partition further sub-partitioned by a different criteria. Distributing by sub-partition can be helpful when the top-level partitioning criteria could cause skewed data access. For instance if a SALES table is partitioned by weekly date ranges, it is likely that distributing by partition would cause skewed access, since more recent date ranges would probably exhibit far more activity. However, if the table were further sub-partitioned by hash on order_id, distributing by sub-partition would provide uniform accesses across instances. Furthermore the above join between SALES and SHIPMENTS could still be done as in-memory local joins, since all the SALES sub-partitions will be collocated with all the SHIPMENTS partitions with the same order_id hash (an optimization known as partition-wise join). 3) DISTRIBUTE BY ROWID RANGE: When a table is not partitioned, or the partitioning criteria used would cause severely skewed access, then it is possible to ensure that the table contents are uniformly distributed across the instances using ROWID RANGE based distribution which places an IMCU on an instance by applying a uniform hash function to the rowid of the first row

within that IMCU. This scheme therefore distributes the contents of the table without regard to the actual values. While this does result in uniform distribution of the table contents and uniform accesses across the instances, it does have the drawback of precluding partition-wise joins. 4) DISTRIBUTE AUTO: Choosing this scheme (which is the default distribution mode) indicates that it is up to the system to automatically select the best distribution scheme from the above three, based on the table s partitioning criteria and optimizer statistics. 5.2 Scale-Out In-Memory Fault Tolerance On Oracle Engineered systems such as Exadata and SPARC Supercluster, a fault-tolerance protocol specially optimized for high-speed networking (direct-to-wire Infiniband) is used to allow in-memory fault tolerance as depicted in Illustration 7 below. Fault-tolerance is specified by the DUPLICATE subclause. For a table, partition, or sub-partition marked as DUPLICATE, all IMCUs for that object are populated in two instances. Having a second copy ensures that there is no downtime if an instance fails since the second copy is instantly available. Both IMCUs are master copies that are populated and maintained independently, and both can be used at all times for query processing. Illustration 7: In-memory column store fault tolerance For small tables containing just a few IMCUs (such as small dimension tables that frequently participate in joins), it is advantageous to populate them on every instance, in order to ensure that all queries obtain local access to them at all times. This full duplication across all instances is achieved using the DUPLICATE ALL subclause. 6. Database In-Memory 12.2 Database In-Memory in release Oracle Database 12.2 further extends the class-leading capabilities of Database In-Memory. The new features in Oracle Database 12.2 serve four primary goals: Performance: Class-leading inmemory columnar performance increased for more use cases Capacity: Make it possible to store even more data in the inmemory column format Availability Further reduction in the impact of instance failures and outages Manageability: While Database In-Memory is very easy to use, 12.2 adds a unique capability to allow users to automate their column store contents

6.1 In-Memory Join Groups Illustration 8: In-Memory Join Groups While Database In-Memory already provides orders of magnitude faster scans and joins, the In- Memory join group construct in 12.2 provides even further benefits. The new JOIN GROUP construct is introduced allowing the user to declare join columns in different tables, such as fact and dimension tables as depicted above. When a join group is declared, a variety of optimizations are enabled, for instance encoding the columns to be joined by the same dictionary, allowing joins directly on dictionary symbols rather than on data. This construct has been shown to provide a 2-3x performance benefit on top of inmemory joins. 6.2 In-Memory Expressions and In-Memory JSON Illustration 9: In-Memory Expression Columns The In-Memory column store accelerates data access by orders of magnitude and in 12.2, it is enhanced to also increase the performance of expression access by orders of magnitude via the inmemory expressions feature. This feature adds the ability to dynamically store the results of an expression on columns within a row in compressed columnar format, in parallel to the column store for the base data. Thus, as depicted above a query that filters by the effective price, i.e. (price + price * tax) can be run at full memory speed without requiring evaluation of the expression for each row.

In-Memory expressions can be manually declared as inmemory virtual columns as in the example above, but they can also be detected and created automatically through a new expression tracking mechanism also added in release 12.2. Expression evaluation is a frequently occurring event in analytic workloads and this feature has been found to increase the performance of complex queries by 3-5x. Illustration 10: In-Memory JSON columns A similar mechanism is used for In-Memory JSON expressions. In 12.2, when an inmemory table has a JSON column, the inmemory columnar representation used for that column is a highly efficient binary representation instead of the base JSON text. Thus scans and filtering of JSON documents can also be performed orders of magnitude faster, leading to up to 60x performance gains for queries involving predicates on JSON documents. Further more, derived expressions on JSON columns such as JSON_TABLE and JSON_VALUE can also be represented as In-Memory JSON expressions to allow superfast columnar processing on those expressions. 6.3 In-Memory on Active Data Guard One of the most commonly requested enhancements to In-Memory was the ability to support In- Memory columnar queries on Active DataGuard instances. In 12.2 this capability is introduced and is controlled with the new DISTRIBUTE FOR SERVICE placement clause. If a table is declared with DISTRIBUTE FOR SERVICE A, that table is populated into the inmemory column store for any instance on which service A is enabled. This service based placement therefore allows completely independent column store contents on the primary and the Active DataGuard standby database. For instance: It is possible to have identical tables inmemory on both databases Completely different and disjoint tables as depicted in the example below Recent table partitions on the primary and older partitions on the standby. In-Memory query processing is thus fully supported on the Active DataGuard standby, allowing for both increased total inmemory columnar capacity (since the column store on the dataguard can now be

used for query processing) as well as increased fault tolerance, since the column store on the data guard continues to be available even during an outage of the primary database. This is depicted in Illustration 11 below where the SALES tables is declared to be populated for SERVICE A, and is therefore populated only on the Primary where Service A is enabled. On the other hand, the SHIPMENTS table is declared to be populated for Service B which is why it is populated only on the Standby where Service B is enabled. Illustration 11: In-Memory on Active Data Guard 6.4 In-Memory format on Exadata Flash Database In-Memory in 12.2 expands the columnar footprint to much larger Exadata flash storage. The same inmemory format that accelerates queries on the compute nodes of Exadata is now available in the Flash cache used in the storage nodes. This allows offloaded Exadata Smart Scans to run with the same performance benefits as inmemory scans on the compute nodes, including the ability to perform vector processing, inmemory storage index pruning, etc. Since the capacity of Exadata flash is 10-100x the size of DRAM on the system, this feature provides an effective 10-100x increase in total columnar capacity of the system. Illustration 12: In-Memory formatted Exadata Flash Cach

6.5 Automatic In-Memory Policies In Oracle Database 12.2, the Oracle Database 12c Automatic Data Optimization (ADO) data-tiering mechanism is enhanced to also allow policies to manage the inmemory column store. With this feature it is possible to add policies to change the compression level for a table or partition, or to remove the table altogether from the column store based on criteria such as time of last access, or time of creation. This capability is very useful for building sliding window column stores for instance, for example, in which only the partitions for the last four quarters are kept inmemory while partitions for older quarters are aged out of the column store since they are less likely to be required for real-time reporting. In-Memory policies must be enabled once when the table is created or altered, but once enabled they are acted on automatically by the ADO task framework. They are very useful for maintaining dynamic column store contents based on changing workload requirements. Illustration 13: Automatic Data Optimization INMEMORY policies 6.6 In-Memory Fast Start In 12.1, the inmemory column store is a pure inmemory structure and recreated from the underlying row format when the database is restarted. Since recreating the column store can be CPU intensive, 12.2 adds the ability to keep a copy of each inmemory column store unit on a Fast-Start area on storage (preferably on Flash or SSD storage). Keeping a copy on storage does increase system IO requirements slightly since the column store units are checkpointed periodically, but provide a 2-5x population time improvement benefit. This translates to a shorter period of performance brown out while the column store is being repopulated following an outage. In order to use FastStart, the user must specify a tablespace designated as the FASTSTART tablespace as depicted in Illustration 14 below. This tablespace will be the destination for In-Memory column store checkpoint writes, which are in the form of SecureFile lob writes for the fastest possible write bandwidth.

Illustration 14: Database In-Memory enhanced with Fast Start 7. Conclusions While the pure columnar format is known to provide substantial speedup for Analytics workloads, it is also unsuited to OLTP workloads characterized by high update volumes and selective queries. The Oracle Database In-Memory Option thus provides a true dual-format in-memory approach that is optimial for both Analytics and OLTP. Database In-Memory is seamlessly built into the Oracle Data Access Layer, which allows it to be instantly compatible with all of the rich functionality of the Oracle Database. In-Memory storage can be selectively applied to important tables and to recent partitions, while leveraging the mature buffer cache, flash storage and disk for increasingly colder data. Oracle 12.2 further enhances the class leading performance, capacity, availability and manageability of Database In-Memory: Performance: In-Memory Join Groups, In-Memory Expressions, and In-Memory JSON Capacity: In-Memory on Active Data Guard, In-Memory formatted Exadata Flash cache Availability: In-Memory on Active Data Guard, In-Memory Fast-Start Manageability: Automatic In-Memory Data Optimization Policies

Contact address: Name Tirthankar Lahiri 400 Oracle Parkway, 4OP14 Redwood Shores, CA 94065 USA Phone: +1(650) 506 6279 Fax: +1(650) 506 6279 Email tirthankar.lahiri@oracle.com Internet: www.oracle.com/timesten, www.oracle.com/database-in-memory Markus Kissling Liebknechtstrasse 35 Stuttgart, 70565 DE Phone : +49 711 72840 134 Fax : +49 711 72840 134 Email : markus.kissling@oracle.com Internet: www.oracle.com/timesten, www.oracle.com/database-in-memory