Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
MySQL 5.7
InnoDB Features
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Satya Bodapati satya.bodapati@oracle.com
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
The following is intended to outline our general product direction. It is intended
for information purposes only, and may not be incorporated into any contract.
It is not a commitment to deliver any material, code, or functionality, and should
not be relied upon in making purchasing decisions. The development, release,
and timing of any features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
 Features
 Performance
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Partitions
Native Partitioning
Reduced memory overhead
Native partitioning is the default for InnoDB
mysql_upgrade will support metadata upgrade (no data copied)
Import/Export of Partitions (5.6 supports only non-partitioned tables)
ICP (Index condition pushdown) is now supported for partitions – better
query processing
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Partitions
Native Partitioning memory overhead improvement
Example Table with 8K partitions
CREATE TABLE `t1` (
`a` int(10) unsigned NOT NULL AUTO_INCREMENT,`b` varchar(1024) DEFAULT NULL, PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY HASH (a) PARTITIONS 8192;
Memory overhead comparison
One open instance uses 49 % less memory (111 MB vs 218 MB)
Ten open instances take 90 % less memory (113 MB vs 1166 MB)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Partitions
Import/Export support
Importing a single partition
# If the table doesn't already exist, create it
mysql> CREATE TABLE partitioned_table <same as the source>;
# Discard the tablespaces for the partitions to be restored
mysql> ALTER TABLE partitioned_table DISCARD PARTITION p1,p4 TABLESPACE;
# Copy the tablespace files
$ cp /path/to/backup/db-name/partitioned_table#P#p{1,4}.{ibd,cfg} /path/to/mysql-datadir/db-name/
# Import the tablespaces
mysql> ALTER TABLE partitioned_table IMPORT PARTITION p1,p4 TABLESPACE;
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Tablespace management
General Tablespaces
SQL syntax for explicit tablespace management
CREATE TABLESPACE Logs ADD DATAFILE 'log01.ibd';
CREATE TABLE http_req(c1 varchar) TABLESPACE=Logs ;
ALTER TABLE some_table TABLESPACE=Logs;
DROP TABLESPACE Logs; - must be empty
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Buffer Pool
Dynamic buffer pool size re-size
Done in a separate thread
--innodb-buffer-pool-chunk-size – resize done in chunk size
Example:
SET GLOBAL innodb-buffer-pool-size=402653184;
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : UNDO Truncate
UNDO Log Space Management
Requires separate UNDO tablespaces to work
•
--innodb-undo-log-truncate := on | off – default off
•
--innodb-max-undo-log-size – default 1G
•
--innodb-purge-rseg-truncate-frequency – default 128 - advanced
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Larger Page Sizes
Support for 32K and 64K Page Sizes
Larger BLOBs can be stored “on-page”
Better compression with the new transparent page compression
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : GIS
Spatial index
Implemented as an R-Tree
Supports all MySQL geometric types
Currently only 2D supported
Supports transactions & MVCC
Uses predicate locking to avoid phantom reads
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Virtual Columns and Index
on Virtual Columns in InnoDB (the JSON story)
Virtual column is not stored within the InnoDB table (unless indexed)
Only virtual column’s meta-data stored in the data dictionary
CREATE TABLE t (a INT, b INT, c INT GENERATED ALWAYS AS(a+b), PRIMARY KEY(a));
ALTER TABLE t ADD new_col INT GENERATED ALWAYS AS (a - b) VIRTUAL;
ALTER TABLEt ADD INDEX IDX(new_col);
Current limitations:
Primary Keys cannot contain any virtual columns
Spatial and fulltext index not supported (for now)
Cannot be used as a foreign key
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Virtual Columns and Index
on Virtual Columns in InnoDB (the JSON story)
mysql> CREATE TABLE jemp (
-> c JSON,
-> g INT GENERATED ALWAYS AS (c->"$.id"),
-> INDEX i (g)
-> );
Query OK, 0 rows affected (0.28 sec)
mysql> INSERT INTO jemp (c) VALUES
> ('{"id": "1", "name": "Fred"}'), ('{"id": "2", "name": "Wilma"}'),
> ('{"id": "3", "name": "Barney"}'), ('{"id": "4", "name": "Betty"}');
Query OK, 4 rows affected (0.04 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Virtual Columns and Index
on Virtual Columns in InnoDB (the JSON story)
mysql> SELECT c->>"$.name" AS name
> FROM jemp WHERE g > 2;
+--------+
| name |
+--------+
| Barney |
| Betty |
+--------+
2 rows in set (0.00 sec)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Virtual Columns and Index
on Virtual Columns in InnoDB (the JSON story)
mysql> EXPLAIN SELECT c->>"$.name" AS name
> FROM jemp WHERE g > 2G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: jemp
partitions: NULL
type: range
possible_keys: i
key: i
key_len: 5
..
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : InnoDB Tablespace Encryption
Two tier encryption
Master Key
– Key ring plugin provides interface to manage the Master Key
– Only the Master Key Is rotated
Tablespace key (automatically generated)
– Stored in the tablespace header
– Encrypted with the Master Key
Algorithm: AES - block encryption mode(CBC)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : InnoDB Tablespace Encryption
Example:
Start the server with:
--early-plugin-load=keyring_file.so –keyring_file_data=./ring
CREATE TABLE t … ENCRYPTION=”Y”;
ALTER TABLE t ENCRYPTION=”N”, ALGORITHM=COPY;
FLUSH TABLES t FOR EXPORT;
Copy t.cfg, t.cfp and t.ibd to another server
ALTER TABLE t DISCARD TABLESPACE;
ALTER TABLE t IMPORT TABLESPACE;
Note: Only supports COPY
Limitations
– Doesn't encrypt the UNDO and REDO logs
– Doesn't encrypt shared and temporary tablespaces
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Full Text Search
Support for external parser (ngram, mecab)
For tokenizing the document and the query
Example:
CREATE TABLE t1 (
id INT AUTO_INCREMENT PRIMARY KEY,
doc CHAR(255), FULLTEXT INDEX (doc) WITH PARSER my_parser) ENGINE=InnoDB;
ALTER TABLE articles ADD FULLTEXT INDEX (body) WITH PARSER my_parser;
CREATE FULLTEXT INDEX ft_index ON articles(body) WITH PARSER my_parser;
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Sandisk/FusionIO Atomic Writes
No new configuration variables
System wide setting
Disables the doublewrite buffer if the system tablespace is on NVMFS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Transparent PageIO Compression
Proof of concept patch originally from FusionIO
Currently Linux/Windows only
Requires sparse file support : NVMFS, XFS, EXT4 & NTFS
Linux 2.6.39+ added PUNCH HOLE support
Can co-exist with current Zip tables
Only works on tablespaces that are not shared (file per table)
Doesn't work on the system tablespace
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Transparent PageIO Compression
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Zip compression
 Tested and tried, works well enough
 Complicates buffer pool code
 Special page format required
 No IO layer changes
 Algorithm supported - Zlib
 Can't compress system tablespace
 Can't compress UNDO tablespace
Features : Zip vs Page IO compression
PageIO compression
 Requires OS/FS support
 Simple
 Works with all file types, system tablespaces
 Potential fragmentation issues
 NVMFS doesn't suffer from fragmentation
 Adds to the cost of IO
 Current algorithms are tuned to existing
assumptions
 Requires multi-threaded flushing
 Easy to add new algorithms.
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : PageIO Compression Benchmark
FusionIO – 25G BP – maxid 50 Million 64 Requesters - Linkbench
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Transparent PageIO Compression
New syntax
CREATE TABLE T(C INT) ENGINE=InnoDB, COMPRESSION=”ZLIB”;
CREATE TABLE T(C INT) ENGINE=InnoDB, COMPRESSION=”LZ4”;
ALTER TABLE T COMPRESSION=”LZ4”;
ALTER TABLE T COMPRESSION=”ZLIB”;
ALTER TABLE T COMPRESSION=”NONE”;
OPTIMIZE TABLE T;
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Observability
Integrate PFS memory instrumentation with InnoDB
Memory allocated by InnoDB is accounted in PFS.
Start mysqld with –performance-schema-instrument='memory/%=on'
Monitor Buffer pool load and "ALTER TABLE" progress
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Features : Observability
Better SHOW ENGINE INNODB MUTEX;
mysql> show engine innodb mutex;
+--------+-----------------------------+---------+
| Type | Name | Status |
+--------+-----------------------------+---------+
| InnoDB | rwlock: log0log.cc:785 | waits=2 |
| InnoDB | sum rwlock: buf0buf.cc:1379 | waits=1 |
+--------+-----------------------------+---------+
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Performance improvements in 5.7 (brief)
 Transaction pools
 Transaction Life cycle improvements
 Faster CREATE/DROP of temporary tables
 Faster DMLs on temporary tables
 improved checksums on redo log (crc32)
 Better Buffer pool management (page ref_count -
atomic, multiple page cleaners)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Performance improvements in 5.7 (brief)
 Memcached improvements (1.1 M QPS with GETs)
 Index→lock optimization
 InnoDB Intrinsic tables (used by optimizer). Faster than
MyISAM, can help optimizer to save intermediate data
quickly.
 TRUNCATE TABLE is atomic
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Performance improvements in 5.7 (brief)
 Faster DDL. Build index bottom-up
 Split AHI – improvements in R/W workload when AHI
enabled
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Performance : Sysbench Point Selects
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Performance : Sysbench OLTP Read-Only
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Performance : Sysbench OLTP Read-Write
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Questions?
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |
Thank You!
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.

Inno db 5_7_features

  • 1.
    Copyright © 2015,Oracle and/or its affiliates. All rights reserved. | MySQL 5.7 InnoDB Features Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Satya Bodapati satya.bodapati@oracle.com
  • 2.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
  • 3.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Program Agenda  Features  Performance
  • 4.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Partitions Native Partitioning Reduced memory overhead Native partitioning is the default for InnoDB mysql_upgrade will support metadata upgrade (no data copied) Import/Export of Partitions (5.6 supports only non-partitioned tables) ICP (Index condition pushdown) is now supported for partitions – better query processing
  • 5.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Partitions Native Partitioning memory overhead improvement Example Table with 8K partitions CREATE TABLE `t1` ( `a` int(10) unsigned NOT NULL AUTO_INCREMENT,`b` varchar(1024) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY HASH (a) PARTITIONS 8192; Memory overhead comparison One open instance uses 49 % less memory (111 MB vs 218 MB) Ten open instances take 90 % less memory (113 MB vs 1166 MB)
  • 6.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Partitions Import/Export support Importing a single partition # If the table doesn't already exist, create it mysql> CREATE TABLE partitioned_table <same as the source>; # Discard the tablespaces for the partitions to be restored mysql> ALTER TABLE partitioned_table DISCARD PARTITION p1,p4 TABLESPACE; # Copy the tablespace files $ cp /path/to/backup/db-name/partitioned_table#P#p{1,4}.{ibd,cfg} /path/to/mysql-datadir/db-name/ # Import the tablespaces mysql> ALTER TABLE partitioned_table IMPORT PARTITION p1,p4 TABLESPACE;
  • 7.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Tablespace management General Tablespaces SQL syntax for explicit tablespace management CREATE TABLESPACE Logs ADD DATAFILE 'log01.ibd'; CREATE TABLE http_req(c1 varchar) TABLESPACE=Logs ; ALTER TABLE some_table TABLESPACE=Logs; DROP TABLESPACE Logs; - must be empty
  • 8.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Buffer Pool Dynamic buffer pool size re-size Done in a separate thread --innodb-buffer-pool-chunk-size – resize done in chunk size Example: SET GLOBAL innodb-buffer-pool-size=402653184;
  • 9.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : UNDO Truncate UNDO Log Space Management Requires separate UNDO tablespaces to work • --innodb-undo-log-truncate := on | off – default off • --innodb-max-undo-log-size – default 1G • --innodb-purge-rseg-truncate-frequency – default 128 - advanced
  • 10.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Larger Page Sizes Support for 32K and 64K Page Sizes Larger BLOBs can be stored “on-page” Better compression with the new transparent page compression
  • 11.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : GIS Spatial index Implemented as an R-Tree Supports all MySQL geometric types Currently only 2D supported Supports transactions & MVCC Uses predicate locking to avoid phantom reads
  • 12.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Virtual Columns and Index on Virtual Columns in InnoDB (the JSON story) Virtual column is not stored within the InnoDB table (unless indexed) Only virtual column’s meta-data stored in the data dictionary CREATE TABLE t (a INT, b INT, c INT GENERATED ALWAYS AS(a+b), PRIMARY KEY(a)); ALTER TABLE t ADD new_col INT GENERATED ALWAYS AS (a - b) VIRTUAL; ALTER TABLEt ADD INDEX IDX(new_col); Current limitations: Primary Keys cannot contain any virtual columns Spatial and fulltext index not supported (for now) Cannot be used as a foreign key
  • 13.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Virtual Columns and Index on Virtual Columns in InnoDB (the JSON story) mysql> CREATE TABLE jemp ( -> c JSON, -> g INT GENERATED ALWAYS AS (c->"$.id"), -> INDEX i (g) -> ); Query OK, 0 rows affected (0.28 sec) mysql> INSERT INTO jemp (c) VALUES > ('{"id": "1", "name": "Fred"}'), ('{"id": "2", "name": "Wilma"}'), > ('{"id": "3", "name": "Barney"}'), ('{"id": "4", "name": "Betty"}'); Query OK, 4 rows affected (0.04 sec)
  • 14.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Virtual Columns and Index on Virtual Columns in InnoDB (the JSON story) mysql> SELECT c->>"$.name" AS name > FROM jemp WHERE g > 2; +--------+ | name | +--------+ | Barney | | Betty | +--------+ 2 rows in set (0.00 sec)
  • 15.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Virtual Columns and Index on Virtual Columns in InnoDB (the JSON story) mysql> EXPLAIN SELECT c->>"$.name" AS name > FROM jemp WHERE g > 2G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: jemp partitions: NULL type: range possible_keys: i key: i key_len: 5 ..
  • 16.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : InnoDB Tablespace Encryption Two tier encryption Master Key – Key ring plugin provides interface to manage the Master Key – Only the Master Key Is rotated Tablespace key (automatically generated) – Stored in the tablespace header – Encrypted with the Master Key Algorithm: AES - block encryption mode(CBC)
  • 17.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : InnoDB Tablespace Encryption Example: Start the server with: --early-plugin-load=keyring_file.so –keyring_file_data=./ring CREATE TABLE t … ENCRYPTION=”Y”; ALTER TABLE t ENCRYPTION=”N”, ALGORITHM=COPY; FLUSH TABLES t FOR EXPORT; Copy t.cfg, t.cfp and t.ibd to another server ALTER TABLE t DISCARD TABLESPACE; ALTER TABLE t IMPORT TABLESPACE; Note: Only supports COPY Limitations – Doesn't encrypt the UNDO and REDO logs – Doesn't encrypt shared and temporary tablespaces
  • 18.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Full Text Search Support for external parser (ngram, mecab) For tokenizing the document and the query Example: CREATE TABLE t1 ( id INT AUTO_INCREMENT PRIMARY KEY, doc CHAR(255), FULLTEXT INDEX (doc) WITH PARSER my_parser) ENGINE=InnoDB; ALTER TABLE articles ADD FULLTEXT INDEX (body) WITH PARSER my_parser; CREATE FULLTEXT INDEX ft_index ON articles(body) WITH PARSER my_parser;
  • 19.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Sandisk/FusionIO Atomic Writes No new configuration variables System wide setting Disables the doublewrite buffer if the system tablespace is on NVMFS
  • 20.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Transparent PageIO Compression Proof of concept patch originally from FusionIO Currently Linux/Windows only Requires sparse file support : NVMFS, XFS, EXT4 & NTFS Linux 2.6.39+ added PUNCH HOLE support Can co-exist with current Zip tables Only works on tablespaces that are not shared (file per table) Doesn't work on the system tablespace
  • 21.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Transparent PageIO Compression
  • 22.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Zip compression  Tested and tried, works well enough  Complicates buffer pool code  Special page format required  No IO layer changes  Algorithm supported - Zlib  Can't compress system tablespace  Can't compress UNDO tablespace Features : Zip vs Page IO compression PageIO compression  Requires OS/FS support  Simple  Works with all file types, system tablespaces  Potential fragmentation issues  NVMFS doesn't suffer from fragmentation  Adds to the cost of IO  Current algorithms are tuned to existing assumptions  Requires multi-threaded flushing  Easy to add new algorithms.
  • 23.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : PageIO Compression Benchmark FusionIO – 25G BP – maxid 50 Million 64 Requesters - Linkbench
  • 24.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Transparent PageIO Compression New syntax CREATE TABLE T(C INT) ENGINE=InnoDB, COMPRESSION=”ZLIB”; CREATE TABLE T(C INT) ENGINE=InnoDB, COMPRESSION=”LZ4”; ALTER TABLE T COMPRESSION=”LZ4”; ALTER TABLE T COMPRESSION=”ZLIB”; ALTER TABLE T COMPRESSION=”NONE”; OPTIMIZE TABLE T;
  • 25.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Observability Integrate PFS memory instrumentation with InnoDB Memory allocated by InnoDB is accounted in PFS. Start mysqld with –performance-schema-instrument='memory/%=on' Monitor Buffer pool load and "ALTER TABLE" progress
  • 26.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Features : Observability Better SHOW ENGINE INNODB MUTEX; mysql> show engine innodb mutex; +--------+-----------------------------+---------+ | Type | Name | Status | +--------+-----------------------------+---------+ | InnoDB | rwlock: log0log.cc:785 | waits=2 | | InnoDB | sum rwlock: buf0buf.cc:1379 | waits=1 | +--------+-----------------------------+---------+
  • 27.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Performance improvements in 5.7 (brief)  Transaction pools  Transaction Life cycle improvements  Faster CREATE/DROP of temporary tables  Faster DMLs on temporary tables  improved checksums on redo log (crc32)  Better Buffer pool management (page ref_count - atomic, multiple page cleaners)
  • 28.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Performance improvements in 5.7 (brief)  Memcached improvements (1.1 M QPS with GETs)  Index→lock optimization  InnoDB Intrinsic tables (used by optimizer). Faster than MyISAM, can help optimizer to save intermediate data quickly.  TRUNCATE TABLE is atomic
  • 29.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Performance improvements in 5.7 (brief)  Faster DDL. Build index bottom-up  Split AHI – improvements in R/W workload when AHI enabled
  • 30.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Performance : Sysbench Point Selects
  • 31.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Performance : Sysbench OLTP Read-Only
  • 32.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Performance : Sysbench OLTP Read-Write
  • 33.
    Copyright © 2015,Oracle and/or its affiliates. All rights reserved. | Questions? Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
  • 34.
    Copyright © 2015,Oracle and/or its affiliates. All rights reserved. | Thank You! Copyright © 2015, Oracle and/or its affiliates. All rights reserved.