SlideShare a Scribd company logo
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
MySQL Server 8.0
Morgan Tocker
MySQL Product Manager (Server)
Copyright © 2017, Oracle and/or its affiliates. All rights reserved.
What's New MySQL 8.0?
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
Safe Harbor Statement
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 © 2017, Oracle and/or its affiliates. All rights reserved. |
MySQL 5.7 – Improvements across the board
• Replication
• InnoDB
• Optimizer
• Security
• Performance Schema
• GIS
• Triggers
• Partitioning
• New! SYS Schema
• New! JSON
• Performance
4
200+ new
features
In total!
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 5
The MySQL 5.7 Story (cont.)
JSON Type
JSON Functions
Virtual Columns
GIS Improvements
Observability
Manageability
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
The MySQL 8.0 Story
• Mobile First
• Developer Centric
• Premium placed on time to Market
6
“Making MySQL Better for Modern Applications”
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
GIS
• Geography Support
• Spatial Reference Systems (SRS) Support
• Standard compliant axis ordering in import/export functions
• Helper functions to manipulate and convert data:
• st_x(geom, x)
• st_y(geom, y)
• st_srid(geom, srid)
7
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
JSON Functions
8
MySQL 5.7 and 8.0
JSON_ARRAY_APPEND()
JSON_ARRAY_INSERT()
JSON_ARRAY()
JSON_CONTAINS_PATH()
JSON_CONTAINS()
JSON_DEPTH()
JSON_EXTRACT()
JSON_INSERT()
JSON_KEYS()
JSON_LENGTH()
JSON_MERGE_[PATCH]()
JSON_OBJECT()
JSON_QUOTE()
JSON_REMOVE()
JSON_REPLACE()
JSON_SEARCH()
JSON_SET()
JSON_TYPE()
JSON_UNQUOTE()
JSON_VALID()
JSON_PRETTY()
JSON_STORAGE_SIZE()
JSON_STORAGE_FREE()

JSON_MERGE_PRESERVE()
JSON_ARRAYAGG()
JSON_OBJECTAGG()
JSON_TABLE() *labs
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
SELECT * FROM seats,
JSON_TABLE(doc, "$.properties.amenities[*]" COLUMNS (
id for ordinality,
amenity_type VARCHAR(100) PATH "$.type",
distance float PATH '$.distance_in_meters')
) AS amenities
WHERE seats.id = 28100
AND amenities.amenity_type IN ('snacks', 'bar')
ORDER BY amenities.distance;
+------+------------------+------------+
| id | amenity_type | distance |
+------+------------------+------------+
| 2 | bar | 100.538 |
| 3 | snacks | 136.647 |
+------+------------------+------------+
2 rows in set (0.00 sec)
9
Labs
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
utfmb4 as default character set
• Support for the latest Unicode 9.0
• Accent and case sensitive collations
• Language specific collations
• including Japanese and Russian!
10
MySQL 8.0
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
UTF-8
• UTF-8 is the dominating
character set in today’s
applications
• Requires 1-4 bytes for storing
characters
• Historically a performance
problem
The character set for the Web
11
https://en.wikipedia.org/wiki/UTF-8
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
MySQL 8.0 vs MySQL 5.7 utf8mb4
12
SELECT DISTINCT_RANGES
0
45000
90000
135000
180000
8 16 64 128 512 1024
OLTP RO
0
10000
20000
30000
40000
8 16 64 128 512 1024
OLTP RW
0
7500
15000
22500
30000
8 16 64 128 512 1024
+300-350% in OLTP RO
+176-233% in OLTP RW
+1500-1800% in SELECT DISTINCT_RANGES
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
MySQL 8.0 utf8mb4 vs MySQL 5.7 utf8mb3
13
SELECT DISTINCT_RANGES
0
45000
90000
135000
180000
8 16 64 128 512 1024
OLTP RO
0
10000
20000
30000
40000
8 16 64 128 512 1024
OLTP RW
0
7500
15000
22500
30000
8 16 64 128 512 1024
+270-340% in OLTP RO
+150-200% in OLTP RW
+1300-1600% in SELECT DISTINCT_RANGES
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
New! UUID and Bit-wise Improvements
• Functions to convert UUID to and from binary:
– UUID_TO_BIN()
– BIN_TO_UUID()
– plus IS_UUID()
• Bit-wise operations on binary data types
• Bit-wise operations on binary data types
– Designed with IPv6 in mind:
– INET6_ATON(address) & INET6_ATON(network)
14
Feature Request

from Developers
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
UUID_TO_BIN Optimization
15
Insert Performance
26 26.75 27.5 28.25 29
Optimized
Original
• Binary format is now smaller and insert-order efficient:
11e678fe53303f87a4778c89a52c4f3b
53303f87-78fe-11e6-a477-8c89a52c4f3bFrom VARCHAR(36)
To VARBINARY(16)
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
New! Better Handling of Hot Row Contention
16
SELECT * FROM tickets
WHERE id IN (1,2,3,4)
AND order_id IS NULL
FOR UPDATE
NOWAIT;
SELECT * FROM tickets
WHERE id IN (1,2,3,4)
AND order_id IS NULL
FOR UPDATE
SKIP LOCKED;
Error
immediately if a
row is already
locked
Non
deterministically
skip over locked
rows
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
New! Common Table Expressions
• “With queries”
• Both Recursive and Non-Recursive Forms
• Simplifies writing complex SQL:



WITH t1 AS (SELECT * FROM tblA WHERE a=‘b’)

SELECT * FROM t1;
17
Feature Request

from Developers
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 18
Print 1 to 10
Recursive CTE (Example)
a
1
2
3
4
5
6
7
8
9
10
WITH RECURSIVE qn AS

( SELECT 1 AS a 

UNION ALL

SELECT 1+a FROM qn WHERE a<10

)

SELECT * FROM qn;
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
New! Window Functions
19
Improving Support for Analytics
Feature Request

from Developers
SELECT name, department_id, salary,
SUM(salary)

OVER (PARTITION BY department_id)
AS department_total
FROM employee
ORDER BY department_id, name;
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 20
Improved to consider buffer pool fit
Optimizer Cost Model
Feature Request

from DBAs
SELECT * FROM Country

WHERE population > 20000000;
Model for a table scan:
# pages in table *
(IO_BLOCK_READ_COST |
MEMORY_BLOCK_READ_COST)

# records * ROW_EVALUATE_COST
= 25.4 100% in memory
= 29.9 100% on disk
Model for a range scan:
# records_in_range *
(IO_BLOCK_READ_COST |
MEMORY_BLOCK_READ_COST)

# records_in_range *
ROW_EVALUATE_COST + #
records_in_range *
ROW_EVALUATE_COST 

= 22.5 100% in memory
= 60 100% on disk
Model accounts for
memory fit. For data on disk an IO
block read defaults to 1.0. In
memory defaults to 0.25.
Much larger
performance difference for
range scan not in memory
(good)
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 21
New! Histograms
• Track distribution skew of data
• Used for operations in the format:

COLUMN operator CONSTANT
• Much lower cost than adding an index
Feature Request

from DBAs
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
New! Descending Indexes
CREATE TABLE t1 (

a INT,

b INT,

INDEX a_desc_b_asc (a DESC, b ASC)

);
22
For B+tree indexes
mysql> EXPLAIN SELECT * FROM t1 ORDER BY a DESC, b ASC;
.. +--------------+---------+------+------+----------+-------------+
.. | key | key_len | ref | rows | filtered | Extra |
.. +--------------+---------+------+------+----------+-------------+
.. | a_desc_b_asc | 10 | NULL | 10 | 100.00 | Using index |
.. +--------------+---------+------+------+----------+-------------+
mysql 8.0> EXPLAIN SELECT * FROM t1 ORDER BY a ASC, b ASC;
.. +--------------+---------+------+------+----------+-----------------------------+
.. | key | key_len | ref | rows | filtered | Extra |
.. +--------------+---------+------+------+----------+-----------------------------+
.. | a_desc_b_asc | 10 | NULL | 10 | 100.00 | Using index; Using filesort |
.. +--------------+---------+------+------+----------+-----------------------------+
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
New! Invisible Indexes
• Indexes are “hidden” to the MySQL Optimizer
– Not the same as “disabled indexes”
– Contents are fully up to date and maintained by DML
• Two use cases:
– Soft Delete (Recycle Bin)
– Staged Rollout
23
Feature Request

from DBAs
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 24
Example Usage
Soft Delete
• I don’t think this index is used any more:

ALTER TABLE Country ALTER INDEX c INVISIBLE;
• I need to revert:

ALTER TABLE Country ALTER INDEX c VISIBLE;
• It is now safe to drop:

ALTER TABLE Country DROP INDEX c;
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
Staged Rollout
• Adding any new index can change existing execution plans
• All change introduces risk of regression



ALTER TABLE Country ADD INDEX c (Continent)
INVISIBLE;

# after some time

ALTER TABLE Country ALTER INDEX c VISIBLE;
25
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 26
SELECT * FROM information_schema.statistics WHERE is_visible='NO';

*************************** 1. row ***************************

TABLE_CATALOG: def

TABLE_SCHEMA: world

TABLE_NAME: Country

NON_UNIQUE: 1

INDEX_SCHEMA: world

INDEX_NAME: c

SEQ_IN_INDEX: 1

COLUMN_NAME: Continent

COLLATION: A

CARDINALITY: 7

SUB_PART: NULL

PACKED: NULL

NULLABLE:

INDEX_TYPE: BTREE

COMMENT: disabled

INDEX_COMMENT:

IS_VISIBLE: NO
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 27
Evolution from MySQL 5.5 to 8.0
Performance Schema
Feature Request

from DBAs
MySQL 8.0
Histograms
Indexes
Data Locks instrumentation
SQL Errors instrumentation
Variables Instrumentation
Replication
Table plugin
Improved Defaults

Digest Query Sample 
MySQL 5.7
Memory Instrumentation
Prepared Statements Instrumentation
Transactions Instrumentation
Scalable Memory Allocation
Bundled SYS schema
Lower Overhead
MySQL 5.6
Statement Instrumentation
Lower Overhead
MySQL 5.5
Event Waits
Mutexes
Files
Threads
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 28
Performance Comparison
Query Time
0 10 20 30 40
MySQL 8.0
MySQL 5.7
Over 30x faster!
SELECT * FROM sys.session

1000 active sessions
Time in Seconds (Lower is better)
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 29
SELECT * FROM test.no_table;
ERROR 1146 (42S02): Table 'test.no_table' doesn't exist
SELECT * FROM performance_schema.events_errors_summary_global_by_error

WHERE sum_error_handled > 0 OR SUM_ERROR_RAISED > 0G
*************************** 1. row ***************************
ERROR_NUMBER: 1146
ERROR_NAME: ER_NO_SUCH_TABLE
SQL_STATE: 42S02
SUM_ERROR_RAISED: 1
SUM_ERROR_HANDLED: 0
FIRST_SEEN: 2016-09-11 20:52:42
LAST_SEEN: 2016-09-11 20:52:42
1 row in set (0.00 sec)
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
query: INSERT INTO `t1` VALUES (...)
db: mysqlslap
total_latency: 54.43 s
exec_count: 58377
lock_latency: 1.70 s
..
digest: 4e0c5b796c4052b0da4548fd7cb694be
first_seen: 2017-04-16 20:59:16
last_seen: 2017-04-16 21:00:34
latency_distribution:
0us+
10us+ #############################
100us+ ####################
1ms+ #
10ms+
100ms+
1s+
10s+
New! Performance Schema Histograms
30
+---------+--------------------------------+-------+
| bucket | visualization | count |
+---------+--------------------------------+-------+
| 0us+ | # | 1253 |
| 10us+ | ############################## | 43102 |
| 100us+ | ################# | 25013 |
| 1ms+ | # | 2003 |
| 10ms+ | | 325 |
| 100ms+ | | 17 |
| 1s+ | | 0 |
| 10s+ | | 0 |
+---------+--------------------------------+-------+
8 rows in set (0.08 sec)
Showing distribution of query time from a run of mysqlslap
Generated with a quick CTE over
events_statements_histogram_global
Feature Request

from DBAs
Available on a per
statement digest level. Can quickly
aggregate top-N statements with
latency distribution.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
New! Performance Schema Data Locks
31
SELECT thread_id, object_name, index_name, lock_type, lock_mode, lock_data 

FROM performance_schema.data_locks WHERE object_name = 'seats';
+-----------+-------------+------------+-----------+-----------+-----------+
| thread_id | object_name | index_name | lock_type | lock_mode | lock_data |
+-----------+-------------+------------+-----------+-----------+-----------+
| 33 | seats | NULL | TABLE | IX | NULL |
| 33 | seats | PRIMARY | RECORD | X | 3, 5 |
| 33 | seats | PRIMARY | RECORD | X | 3, 6 |
| 33 | seats | PRIMARY | RECORD | X | 4, 5 |
| 33 | seats | PRIMARY | RECORD | X | 4, 6 |
+-----------+-------------+------------+-----------+-----------+-----------+
5 rows in set (0.00 sec)
Feature Request

from DBAs
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 32
New! Persist Configuration
• Persist GLOBAL Server Variables
– SET PERSIST max_connections = 500;
– SET PERSIST_ONLY innodb_log_file_size = 128*1024*1024;
• Examples Include:
– Offline_mode
– Read_Only
• Requires no filesystem access
Cloud Friendly
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
New! Variables Info
33
Find the source of variables changed on your installation
SELECT * FROM performance_schema.variables_info WHERE variable_source != 'COMPILED';
+------------------------+-----------------+--------------------+-----------+-----------+---------------------+----------+-----------+
| VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST |
+------------------------+-----------------+--------------------+-----------+-----------+---------------------+----------+-----------+
| autocommit | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost |
| basedir | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | |
| bind_address | EXPLICIT | [..]my.sandbox.cnf | 0 | 0 | 2017-04-16 21:08:11 | | |
| character_set_client | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost |
| character_set_results | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost |
| collation_connection | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost |
| datadir | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | |
| foreign_key_checks | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost |
| log_error | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | |
| lower_case_table_names | EXPLICIT | [..]my.sandbox.cnf | 0 | 2 | 2017-04-16 21:08:11 | | |
| pid_file | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | |
| plugin_dir | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | |
| port | COMMAND_LINE | | 0 | 65535 | 2017-04-16 21:08:11 | | |
| socket | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | |
| sql_mode | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost |
| sql_notes | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost |
| time_zone | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost |
| tmpdir | EXPLICIT | [..]my.sandbox.cnf | 0 | 0 | 2017-04-16 21:08:11 | | |
| unique_checks | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost |
+------------------------+-----------------+--------------------+-----------+-----------+---------------------+----------+-----------+
19 rows in set (0.00 sec)
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
New! Transactional Data Dictionary
• Crash-safe Database
• Common data dictionary for
the server and InnoDB
• Crash-safe & Atomic DDL
• CREATE USER <userlist>, DROP
DATABASE with all-or-none
semantic
• Simplifies replication failure
cases
34
• Meta-data locking for FK
constraints
• FK moved from InnoDB to
server layer
• Scalable Information Schema
• Queries are now executed as
set of SQL views on tables
• Large performance
improvements
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
30x
Faster
SELECT TABLE_SCHEMA,

TABLE_NAME, TABLE_TYPE,

ENGINE, ROW_FORMAT

FROM information_schema.tables

WHERE TABLE_SCHEMA LIKE 'db%';
35
Test Performed with 100 schemas, each with 50 tables.
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
Defaults
• Event Scheduler On
• Utf8mb4 Character Set
• Performance Schema: Memory,
Transactions, MDL
• InnoDB: autoinc_lock_mode=2,
flush_neighbors=0,
max_dirty_pages_pct_lwm=10,
max_dirty_pages_pct
default=90
• Improvements to back_log
auto-calculation
• max_error_count=1024
• max_allowed_packet=64M
36
Server-Core
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
Defaults (cont.)
• Binary Log, log-slave-updates on
• {master,relay-log}—info-repository = TABLE
• transaction-write-set-extraction = XXHASH64
• slave-rows-search-algorithms = ‘INDEX_SCAN,HASH_SCAN’
• expire_logs_days=30
• server-id=1
37
Replication
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
InnoDB Dedicated Server
• Great for Virtual Machines & Cloud Deployments
• Auto scales Log File Size, Buffer Pool Size, Flush Method
• Easiest way to enable:



SET PERSIST_ONLY innodb_dedicated_server = TRUE
38
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
Performance Improvements
• Improved Query Consistency
• Histograms
• Improved Cost Model
• Faster Table/Range Scans
• FORCE INDEX skips index
dives where possible
• Expanded Hints Support
• JSON Partial Update
(Optimizer, Replication)
39
• Parallel Replication
• UTF8MB4
• Information Schema
• Performance Schema Indexes
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
QueriesperSecond
0
40,000
80,000
120,000
160,000
Users
1 2 4 8 16 32 64 128 256 512
MySQL 8.0 Labs
MySQL 5.7
MySQL 5.6
MySQL 8.0 Labs: Sysbench Benchmark: IO-bound OLTP RW Updates-only

Intel(R) Xeon(R) Platinum 8168 CPU
2CPU-sockets, 48cores-HT
2x Intel Optane
Oracle Linux 7.3
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
QueriesperSecond
0
300,000
600,000
900,000
1,200,000
Users
1 2 4 8 16 32 64 128 256 512
MySQL 8.0 Labs
MySQL 5.7
MySQL 5.6
MySQL 8.0 Labs: Sysbench Benchmark: IO-bound OLTP RO Point-Selects

Intel(R) Xeon(R) Platinum 8168 CPU
2CPU-sockets, 48cores-HT
2x Intel Optane
Oracle Linux 7.3
1,000,000+
QPS
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
MySQL 8.0 RC: Resource Group Example
QueriesperSecond
0
40,000
80,000
120,000
160,000
No Resource Group With Resource Group
Select
Update
System Configuration :
Oracle Linux 7,
Intel(R) Xeon(R) CPU E7-4860 2.27GHz
40 cores-HT
(40 Cores Shared) (40 Cores for Select)
(10 Cores for Update RG)
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |
• Source code now documented with Doxygen
• New Plugin Infrastructure
• Improved BLOB Storage
• Improved Memcached Interface
• InnoDB Auto Increment Persists
• Parser Refactoring
• Improvements to Temporary Tables
• C++11 and Toolchain Improvements
• GTID_PURGED always settable
• Undo tablespaces now dynamic
• In memory storage engine
• SQL Roles Support
• Encryption for Redo and General Tablespaces
• InnoDB Cats lock scheduler algorithm
• Improved Parallel Replication
• SQL Grouping Function
• Optimizer Trace detailed sort statistics
• Smaller Package Downloads
• Improved usability of cost constant configuration
43
All these features plus…
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 44
What's New MySQL 8.0?

More Related Content

What's hot (20)

MySQL 5.7 - What's new and How to upgrade
MySQL 5.7 - What's new and How to upgrade
Abel Flórez
 
MySQL Document Store for Modern Applications
MySQL Document Store for Modern Applications
Olivier DASINI
 
MySQL Day Paris 2018 - Introduction & The State of the Dolphin
MySQL Day Paris 2018 - Introduction & The State of the Dolphin
Olivier DASINI
 
MySQL High Availability Solutions - Avoid loss of service by reducing the r...
MySQL High Availability Solutions - Avoid loss of service by reducing the r...
Olivier DASINI
 
MySQL 5.7 + JSON
MySQL 5.7 + JSON
Morgan Tocker
 
MySQL Monitoring 101
MySQL Monitoring 101
Ronald Bradford
 
MySQL 5.7 NEW FEATURES, BETTER PERFORMANCE, AND THINGS THAT WILL BREAK -- Mid...
MySQL 5.7 NEW FEATURES, BETTER PERFORMANCE, AND THINGS THAT WILL BREAK -- Mid...
Dave Stokes
 
MySQL partitioning
MySQL partitioning
OracleMySQL
 
MySQL8.0 in COSCUP2017
MySQL8.0 in COSCUP2017
Shinya Sugiyama
 
MySQL For Oracle DBA's and Developers
MySQL For Oracle DBA's and Developers
Ronald Bradford
 
Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0
Olivier DASINI
 
Perf Tuning Short
Perf Tuning Short
Ligaya Turmelle
 
MySQL NoSQL APIs
MySQL NoSQL APIs
Morgan Tocker
 
Upgrade to MySQL 5.7 and latest news planned for MySQL 8
Upgrade to MySQL 5.7 and latest news planned for MySQL 8
Ted Wennmark
 
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
Dave Stokes
 
Ohio Linux Fest -- MySQL's NoSQL
Ohio Linux Fest -- MySQL's NoSQL
Dave Stokes
 
MySQL JSON Functions
MySQL JSON Functions
Sveta Smirnova
 
MySQL Performance Metrics that Matter
MySQL Performance Metrics that Matter
Morgan Tocker
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD Tour
Ronald Bradford
 
MySQL Performance Schema in 20 Minutes
MySQL Performance Schema in 20 Minutes
Sveta Smirnova
 
MySQL 5.7 - What's new and How to upgrade
MySQL 5.7 - What's new and How to upgrade
Abel Flórez
 
MySQL Document Store for Modern Applications
MySQL Document Store for Modern Applications
Olivier DASINI
 
MySQL Day Paris 2018 - Introduction & The State of the Dolphin
MySQL Day Paris 2018 - Introduction & The State of the Dolphin
Olivier DASINI
 
MySQL High Availability Solutions - Avoid loss of service by reducing the r...
MySQL High Availability Solutions - Avoid loss of service by reducing the r...
Olivier DASINI
 
MySQL 5.7 NEW FEATURES, BETTER PERFORMANCE, AND THINGS THAT WILL BREAK -- Mid...
MySQL 5.7 NEW FEATURES, BETTER PERFORMANCE, AND THINGS THAT WILL BREAK -- Mid...
Dave Stokes
 
MySQL partitioning
MySQL partitioning
OracleMySQL
 
MySQL For Oracle DBA's and Developers
MySQL For Oracle DBA's and Developers
Ronald Bradford
 
Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0
Olivier DASINI
 
Upgrade to MySQL 5.7 and latest news planned for MySQL 8
Upgrade to MySQL 5.7 and latest news planned for MySQL 8
Ted Wennmark
 
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
Dave Stokes
 
Ohio Linux Fest -- MySQL's NoSQL
Ohio Linux Fest -- MySQL's NoSQL
Dave Stokes
 
MySQL Performance Metrics that Matter
MySQL Performance Metrics that Matter
Morgan Tocker
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD Tour
Ronald Bradford
 
MySQL Performance Schema in 20 Minutes
MySQL Performance Schema in 20 Minutes
Sveta Smirnova
 

Similar to What's New MySQL 8.0? (20)

Developers’ mDay u Banjoj Luci - Bogdan Kecman, Oracle – MySQL Server 8.0
Developers’ mDay u Banjoj Luci - Bogdan Kecman, Oracle – MySQL Server 8.0
mCloud
 
Developers' mDay 2017. - Bogdan Kecman Oracle
Developers' mDay 2017. - Bogdan Kecman Oracle
mCloud
 
MySQL 8.0.1 DMR
MySQL 8.0.1 DMR
MySQL Brasil
 
MySQL 8.0 Optimizer Guide
MySQL 8.0 Optimizer Guide
Morgan Tocker
 
What's New in MySQL 8.0 @ HKOSC 2017
What's New in MySQL 8.0 @ HKOSC 2017
Ivan Ma
 
MySQL 8.0 in a nutshell
MySQL 8.0 in a nutshell
OracleMySQL
 
MySQL 5.7 - What's new, How to upgrade and Document Store
MySQL 5.7 - What's new, How to upgrade and Document Store
Abel Flórez
 
20190713_MySQL開発最新動向
20190713_MySQL開発最新動向
Machiko Ikoma
 
MySQL Tech Tour 2015 - 5.7 Whats new
MySQL Tech Tour 2015 - 5.7 Whats new
Mark Swarbrick
 
SQL for Analytics.pdfSQL for Analytics.pdf
SQL for Analytics.pdfSQL for Analytics.pdf
namtunguyen6
 
MySQL 8.0 Released Update
MySQL 8.0 Released Update
Keith Hollman
 
MySQL 5.7 New Features for Developers
MySQL 5.7 New Features for Developers
Zohar Elkayam
 
Mysql8for blr usercamp
Mysql8for blr usercamp
Mysql User Camp
 
제3회난공불락 오픈소스 인프라세미나 - MySQL
제3회난공불락 오픈소스 인프라세미나 - MySQL
Tommy Lee
 
Node.js and the MySQL Document Store
Node.js and the MySQL Document Store
Rui Quelhas
 
MySQL 8 loves JavaScript
MySQL 8 loves JavaScript
Sanjay Manwani
 
Optimizer percona live_ams2015
Optimizer percona live_ams2015
Manyi Lu
 
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
Olivier DASINI
 
MySQL Goes to 8! FOSDEM 2020 Database Track, January 2nd, 2020
MySQL Goes to 8! FOSDEM 2020 Database Track, January 2nd, 2020
Geir Høydalsvik
 
OSC Online MySQL Version up
OSC Online MySQL Version up
DAISUKE INAGAKI
 
Developers’ mDay u Banjoj Luci - Bogdan Kecman, Oracle – MySQL Server 8.0
Developers’ mDay u Banjoj Luci - Bogdan Kecman, Oracle – MySQL Server 8.0
mCloud
 
Developers' mDay 2017. - Bogdan Kecman Oracle
Developers' mDay 2017. - Bogdan Kecman Oracle
mCloud
 
MySQL 8.0 Optimizer Guide
MySQL 8.0 Optimizer Guide
Morgan Tocker
 
What's New in MySQL 8.0 @ HKOSC 2017
What's New in MySQL 8.0 @ HKOSC 2017
Ivan Ma
 
MySQL 8.0 in a nutshell
MySQL 8.0 in a nutshell
OracleMySQL
 
MySQL 5.7 - What's new, How to upgrade and Document Store
MySQL 5.7 - What's new, How to upgrade and Document Store
Abel Flórez
 
20190713_MySQL開発最新動向
20190713_MySQL開発最新動向
Machiko Ikoma
 
MySQL Tech Tour 2015 - 5.7 Whats new
MySQL Tech Tour 2015 - 5.7 Whats new
Mark Swarbrick
 
SQL for Analytics.pdfSQL for Analytics.pdf
SQL for Analytics.pdfSQL for Analytics.pdf
namtunguyen6
 
MySQL 8.0 Released Update
MySQL 8.0 Released Update
Keith Hollman
 
MySQL 5.7 New Features for Developers
MySQL 5.7 New Features for Developers
Zohar Elkayam
 
제3회난공불락 오픈소스 인프라세미나 - MySQL
제3회난공불락 오픈소스 인프라세미나 - MySQL
Tommy Lee
 
Node.js and the MySQL Document Store
Node.js and the MySQL Document Store
Rui Quelhas
 
MySQL 8 loves JavaScript
MySQL 8 loves JavaScript
Sanjay Manwani
 
Optimizer percona live_ams2015
Optimizer percona live_ams2015
Manyi Lu
 
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
Olivier DASINI
 
MySQL Goes to 8! FOSDEM 2020 Database Track, January 2nd, 2020
MySQL Goes to 8! FOSDEM 2020 Database Track, January 2nd, 2020
Geir Høydalsvik
 
OSC Online MySQL Version up
OSC Online MySQL Version up
DAISUKE INAGAKI
 
Ad

More from OracleMySQL (9)

MySQL Performance Tuning (In Korean)
MySQL Performance Tuning (In Korean)
OracleMySQL
 
Solving Performance Problems Using MySQL Enterprise Monitor
Solving Performance Problems Using MySQL Enterprise Monitor
OracleMySQL
 
6 Tips to MySQL Performance Tuning
6 Tips to MySQL Performance Tuning
OracleMySQL
 
MySQL Performance Tuning 101 (Bahasa)
MySQL Performance Tuning 101 (Bahasa)
OracleMySQL
 
Robust easy affordable disaster recovery for MySQL Data
Robust easy affordable disaster recovery for MySQL Data
OracleMySQL
 
MySQL in oracle_environments(Part 2): MySQL Enterprise Monitor & Oracle Enter...
MySQL in oracle_environments(Part 2): MySQL Enterprise Monitor & Oracle Enter...
OracleMySQL
 
MySQL in Oracle environment : Quick start guide for Oracle DBA (Part 1)
MySQL in Oracle environment : Quick start guide for Oracle DBA (Part 1)
OracleMySQL
 
Infographic oracle-my sql-cloud
Infographic oracle-my sql-cloud
OracleMySQL
 
MySQL in oracle_public_cloud
MySQL in oracle_public_cloud
OracleMySQL
 
MySQL Performance Tuning (In Korean)
MySQL Performance Tuning (In Korean)
OracleMySQL
 
Solving Performance Problems Using MySQL Enterprise Monitor
Solving Performance Problems Using MySQL Enterprise Monitor
OracleMySQL
 
6 Tips to MySQL Performance Tuning
6 Tips to MySQL Performance Tuning
OracleMySQL
 
MySQL Performance Tuning 101 (Bahasa)
MySQL Performance Tuning 101 (Bahasa)
OracleMySQL
 
Robust easy affordable disaster recovery for MySQL Data
Robust easy affordable disaster recovery for MySQL Data
OracleMySQL
 
MySQL in oracle_environments(Part 2): MySQL Enterprise Monitor & Oracle Enter...
MySQL in oracle_environments(Part 2): MySQL Enterprise Monitor & Oracle Enter...
OracleMySQL
 
MySQL in Oracle environment : Quick start guide for Oracle DBA (Part 1)
MySQL in Oracle environment : Quick start guide for Oracle DBA (Part 1)
OracleMySQL
 
Infographic oracle-my sql-cloud
Infographic oracle-my sql-cloud
OracleMySQL
 
MySQL in oracle_public_cloud
MySQL in oracle_public_cloud
OracleMySQL
 
Ad

Recently uploaded (20)

No-Code Workflows for CAD & 3D Data: Scaling AI-Driven Infrastructure
No-Code Workflows for CAD & 3D Data: Scaling AI-Driven Infrastructure
Safe Software
 
Kubernetes Security Act Now Before It’s Too Late
Kubernetes Security Act Now Before It’s Too Late
Michael Furman
 
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
Safe Software
 
“From Enterprise to Makers: Driving Vision AI Innovation at the Extreme Edge,...
“From Enterprise to Makers: Driving Vision AI Innovation at the Extreme Edge,...
Edge AI and Vision Alliance
 
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
 
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Alliance
 
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance
 
Providing an OGC API Processes REST Interface for FME Flow
Providing an OGC API Processes REST Interface for FME Flow
Safe Software
 
The State of Web3 Industry- Industry Report
The State of Web3 Industry- Industry Report
Liveplex
 
Viral>Wondershare Filmora 14.5.18.12900 Crack Free Download
Viral>Wondershare Filmora 14.5.18.12900 Crack Free Download
Puppy jhon
 
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
 
Data Validation and System Interoperability
Data Validation and System Interoperability
Safe Software
 
Oracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI Professional
VICTOR MAESTRE RAMIREZ
 
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc
 
High Availability On-Premises FME Flow.pdf
High Availability On-Premises FME Flow.pdf
Safe Software
 
Down the Rabbit Hole – Solving 5 Training Roadblocks
Down the Rabbit Hole – Solving 5 Training Roadblocks
Rustici Software
 
June Patch Tuesday
June Patch Tuesday
Ivanti
 
AudGram Review: Build Visually Appealing, AI-Enhanced Audiograms to Engage Yo...
AudGram Review: Build Visually Appealing, AI-Enhanced Audiograms to Engage Yo...
SOFTTECHHUB
 
Edge-banding-machines-edgeteq-s-200-en-.pdf
Edge-banding-machines-edgeteq-s-200-en-.pdf
AmirStern2
 
Reducing Conflicts and Increasing Safety Along the Cycling Networks of East-F...
Reducing Conflicts and Increasing Safety Along the Cycling Networks of East-F...
Safe Software
 
No-Code Workflows for CAD & 3D Data: Scaling AI-Driven Infrastructure
No-Code Workflows for CAD & 3D Data: Scaling AI-Driven Infrastructure
Safe Software
 
Kubernetes Security Act Now Before It’s Too Late
Kubernetes Security Act Now Before It’s Too Late
Michael Furman
 
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
Safe Software
 
“From Enterprise to Makers: Driving Vision AI Innovation at the Extreme Edge,...
“From Enterprise to Makers: Driving Vision AI Innovation at the Extreme Edge,...
Edge AI and Vision Alliance
 
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
 
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Alliance
 
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance Seminar State of Passkeys.pptx
FIDO Alliance
 
Providing an OGC API Processes REST Interface for FME Flow
Providing an OGC API Processes REST Interface for FME Flow
Safe Software
 
The State of Web3 Industry- Industry Report
The State of Web3 Industry- Industry Report
Liveplex
 
Viral>Wondershare Filmora 14.5.18.12900 Crack Free Download
Viral>Wondershare Filmora 14.5.18.12900 Crack Free Download
Puppy jhon
 
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
 
Data Validation and System Interoperability
Data Validation and System Interoperability
Safe Software
 
Oracle Cloud Infrastructure Generative AI Professional
Oracle Cloud Infrastructure Generative AI Professional
VICTOR MAESTRE RAMIREZ
 
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc Webinar - 2025 Global Privacy Survey
TrustArc
 
High Availability On-Premises FME Flow.pdf
High Availability On-Premises FME Flow.pdf
Safe Software
 
Down the Rabbit Hole – Solving 5 Training Roadblocks
Down the Rabbit Hole – Solving 5 Training Roadblocks
Rustici Software
 
June Patch Tuesday
June Patch Tuesday
Ivanti
 
AudGram Review: Build Visually Appealing, AI-Enhanced Audiograms to Engage Yo...
AudGram Review: Build Visually Appealing, AI-Enhanced Audiograms to Engage Yo...
SOFTTECHHUB
 
Edge-banding-machines-edgeteq-s-200-en-.pdf
Edge-banding-machines-edgeteq-s-200-en-.pdf
AmirStern2
 
Reducing Conflicts and Increasing Safety Along the Cycling Networks of East-F...
Reducing Conflicts and Increasing Safety Along the Cycling Networks of East-F...
Safe Software
 

What's New MySQL 8.0?

  • 1. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | MySQL Server 8.0 Morgan Tocker MySQL Product Manager (Server) Copyright © 2017, Oracle and/or its affiliates. All rights reserved.
  • 3. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Safe Harbor Statement 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
  • 4. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | MySQL 5.7 – Improvements across the board • Replication • InnoDB • Optimizer • Security • Performance Schema • GIS • Triggers • Partitioning • New! SYS Schema • New! JSON • Performance 4 200+ new features In total!
  • 5. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 5 The MySQL 5.7 Story (cont.) JSON Type JSON Functions Virtual Columns GIS Improvements Observability Manageability
  • 6. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | The MySQL 8.0 Story • Mobile First • Developer Centric • Premium placed on time to Market 6 “Making MySQL Better for Modern Applications”
  • 7. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | GIS • Geography Support • Spatial Reference Systems (SRS) Support • Standard compliant axis ordering in import/export functions • Helper functions to manipulate and convert data: • st_x(geom, x) • st_y(geom, y) • st_srid(geom, srid) 7
  • 8. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | JSON Functions 8 MySQL 5.7 and 8.0 JSON_ARRAY_APPEND() JSON_ARRAY_INSERT() JSON_ARRAY() JSON_CONTAINS_PATH() JSON_CONTAINS() JSON_DEPTH() JSON_EXTRACT() JSON_INSERT() JSON_KEYS() JSON_LENGTH() JSON_MERGE_[PATCH]() JSON_OBJECT() JSON_QUOTE() JSON_REMOVE() JSON_REPLACE() JSON_SEARCH() JSON_SET() JSON_TYPE() JSON_UNQUOTE() JSON_VALID() JSON_PRETTY() JSON_STORAGE_SIZE() JSON_STORAGE_FREE()
 JSON_MERGE_PRESERVE() JSON_ARRAYAGG() JSON_OBJECTAGG() JSON_TABLE() *labs
  • 9. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | SELECT * FROM seats, JSON_TABLE(doc, "$.properties.amenities[*]" COLUMNS ( id for ordinality, amenity_type VARCHAR(100) PATH "$.type", distance float PATH '$.distance_in_meters') ) AS amenities WHERE seats.id = 28100 AND amenities.amenity_type IN ('snacks', 'bar') ORDER BY amenities.distance; +------+------------------+------------+ | id | amenity_type | distance | +------+------------------+------------+ | 2 | bar | 100.538 | | 3 | snacks | 136.647 | +------+------------------+------------+ 2 rows in set (0.00 sec) 9 Labs
  • 10. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | utfmb4 as default character set • Support for the latest Unicode 9.0 • Accent and case sensitive collations • Language specific collations • including Japanese and Russian! 10 MySQL 8.0
  • 11. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | UTF-8 • UTF-8 is the dominating character set in today’s applications • Requires 1-4 bytes for storing characters • Historically a performance problem The character set for the Web 11 https://en.wikipedia.org/wiki/UTF-8
  • 12. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | MySQL 8.0 vs MySQL 5.7 utf8mb4 12 SELECT DISTINCT_RANGES 0 45000 90000 135000 180000 8 16 64 128 512 1024 OLTP RO 0 10000 20000 30000 40000 8 16 64 128 512 1024 OLTP RW 0 7500 15000 22500 30000 8 16 64 128 512 1024 +300-350% in OLTP RO +176-233% in OLTP RW +1500-1800% in SELECT DISTINCT_RANGES
  • 13. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | MySQL 8.0 utf8mb4 vs MySQL 5.7 utf8mb3 13 SELECT DISTINCT_RANGES 0 45000 90000 135000 180000 8 16 64 128 512 1024 OLTP RO 0 10000 20000 30000 40000 8 16 64 128 512 1024 OLTP RW 0 7500 15000 22500 30000 8 16 64 128 512 1024 +270-340% in OLTP RO +150-200% in OLTP RW +1300-1600% in SELECT DISTINCT_RANGES
  • 14. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | New! UUID and Bit-wise Improvements • Functions to convert UUID to and from binary: – UUID_TO_BIN() – BIN_TO_UUID() – plus IS_UUID() • Bit-wise operations on binary data types • Bit-wise operations on binary data types – Designed with IPv6 in mind: – INET6_ATON(address) & INET6_ATON(network) 14 Feature Request
 from Developers
  • 15. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | UUID_TO_BIN Optimization 15 Insert Performance 26 26.75 27.5 28.25 29 Optimized Original • Binary format is now smaller and insert-order efficient: 11e678fe53303f87a4778c89a52c4f3b 53303f87-78fe-11e6-a477-8c89a52c4f3bFrom VARCHAR(36) To VARBINARY(16)
  • 16. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | New! Better Handling of Hot Row Contention 16 SELECT * FROM tickets WHERE id IN (1,2,3,4) AND order_id IS NULL FOR UPDATE NOWAIT; SELECT * FROM tickets WHERE id IN (1,2,3,4) AND order_id IS NULL FOR UPDATE SKIP LOCKED; Error immediately if a row is already locked Non deterministically skip over locked rows
  • 17. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | New! Common Table Expressions • “With queries” • Both Recursive and Non-Recursive Forms • Simplifies writing complex SQL:
 
 WITH t1 AS (SELECT * FROM tblA WHERE a=‘b’)
 SELECT * FROM t1; 17 Feature Request
 from Developers
  • 18. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 18 Print 1 to 10 Recursive CTE (Example) a 1 2 3 4 5 6 7 8 9 10 WITH RECURSIVE qn AS
 ( SELECT 1 AS a 
 UNION ALL
 SELECT 1+a FROM qn WHERE a<10
 )
 SELECT * FROM qn;
  • 19. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | New! Window Functions 19 Improving Support for Analytics Feature Request
 from Developers SELECT name, department_id, salary, SUM(salary)
 OVER (PARTITION BY department_id) AS department_total FROM employee ORDER BY department_id, name;
  • 20. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 20 Improved to consider buffer pool fit Optimizer Cost Model Feature Request
 from DBAs SELECT * FROM Country
 WHERE population > 20000000; Model for a table scan: # pages in table * (IO_BLOCK_READ_COST | MEMORY_BLOCK_READ_COST)
 # records * ROW_EVALUATE_COST = 25.4 100% in memory = 29.9 100% on disk Model for a range scan: # records_in_range * (IO_BLOCK_READ_COST | MEMORY_BLOCK_READ_COST)
 # records_in_range * ROW_EVALUATE_COST + # records_in_range * ROW_EVALUATE_COST 
 = 22.5 100% in memory = 60 100% on disk Model accounts for memory fit. For data on disk an IO block read defaults to 1.0. In memory defaults to 0.25. Much larger performance difference for range scan not in memory (good)
  • 21. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 21 New! Histograms • Track distribution skew of data • Used for operations in the format:
 COLUMN operator CONSTANT • Much lower cost than adding an index Feature Request
 from DBAs
  • 22. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | New! Descending Indexes CREATE TABLE t1 (
 a INT,
 b INT,
 INDEX a_desc_b_asc (a DESC, b ASC)
 ); 22 For B+tree indexes mysql> EXPLAIN SELECT * FROM t1 ORDER BY a DESC, b ASC; .. +--------------+---------+------+------+----------+-------------+ .. | key | key_len | ref | rows | filtered | Extra | .. +--------------+---------+------+------+----------+-------------+ .. | a_desc_b_asc | 10 | NULL | 10 | 100.00 | Using index | .. +--------------+---------+------+------+----------+-------------+ mysql 8.0> EXPLAIN SELECT * FROM t1 ORDER BY a ASC, b ASC; .. +--------------+---------+------+------+----------+-----------------------------+ .. | key | key_len | ref | rows | filtered | Extra | .. +--------------+---------+------+------+----------+-----------------------------+ .. | a_desc_b_asc | 10 | NULL | 10 | 100.00 | Using index; Using filesort | .. +--------------+---------+------+------+----------+-----------------------------+
  • 23. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | New! Invisible Indexes • Indexes are “hidden” to the MySQL Optimizer – Not the same as “disabled indexes” – Contents are fully up to date and maintained by DML • Two use cases: – Soft Delete (Recycle Bin) – Staged Rollout 23 Feature Request
 from DBAs
  • 24. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 24 Example Usage Soft Delete • I don’t think this index is used any more:
 ALTER TABLE Country ALTER INDEX c INVISIBLE; • I need to revert:
 ALTER TABLE Country ALTER INDEX c VISIBLE; • It is now safe to drop:
 ALTER TABLE Country DROP INDEX c;
  • 25. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Staged Rollout • Adding any new index can change existing execution plans • All change introduces risk of regression
 
 ALTER TABLE Country ADD INDEX c (Continent) INVISIBLE;
 # after some time
 ALTER TABLE Country ALTER INDEX c VISIBLE; 25
  • 26. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 26 SELECT * FROM information_schema.statistics WHERE is_visible='NO';
 *************************** 1. row ***************************
 TABLE_CATALOG: def
 TABLE_SCHEMA: world
 TABLE_NAME: Country
 NON_UNIQUE: 1
 INDEX_SCHEMA: world
 INDEX_NAME: c
 SEQ_IN_INDEX: 1
 COLUMN_NAME: Continent
 COLLATION: A
 CARDINALITY: 7
 SUB_PART: NULL
 PACKED: NULL
 NULLABLE:
 INDEX_TYPE: BTREE
 COMMENT: disabled
 INDEX_COMMENT:
 IS_VISIBLE: NO
  • 27. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 27 Evolution from MySQL 5.5 to 8.0 Performance Schema Feature Request
 from DBAs MySQL 8.0 Histograms Indexes Data Locks instrumentation SQL Errors instrumentation Variables Instrumentation Replication Table plugin Improved Defaults
 Digest Query Sample  MySQL 5.7 Memory Instrumentation Prepared Statements Instrumentation Transactions Instrumentation Scalable Memory Allocation Bundled SYS schema Lower Overhead MySQL 5.6 Statement Instrumentation Lower Overhead MySQL 5.5 Event Waits Mutexes Files Threads
  • 28. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 28 Performance Comparison Query Time 0 10 20 30 40 MySQL 8.0 MySQL 5.7 Over 30x faster! SELECT * FROM sys.session
 1000 active sessions Time in Seconds (Lower is better)
  • 29. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 29 SELECT * FROM test.no_table; ERROR 1146 (42S02): Table 'test.no_table' doesn't exist SELECT * FROM performance_schema.events_errors_summary_global_by_error
 WHERE sum_error_handled > 0 OR SUM_ERROR_RAISED > 0G *************************** 1. row *************************** ERROR_NUMBER: 1146 ERROR_NAME: ER_NO_SUCH_TABLE SQL_STATE: 42S02 SUM_ERROR_RAISED: 1 SUM_ERROR_HANDLED: 0 FIRST_SEEN: 2016-09-11 20:52:42 LAST_SEEN: 2016-09-11 20:52:42 1 row in set (0.00 sec)
  • 30. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | query: INSERT INTO `t1` VALUES (...) db: mysqlslap total_latency: 54.43 s exec_count: 58377 lock_latency: 1.70 s .. digest: 4e0c5b796c4052b0da4548fd7cb694be first_seen: 2017-04-16 20:59:16 last_seen: 2017-04-16 21:00:34 latency_distribution: 0us+ 10us+ ############################# 100us+ #################### 1ms+ # 10ms+ 100ms+ 1s+ 10s+ New! Performance Schema Histograms 30 +---------+--------------------------------+-------+ | bucket | visualization | count | +---------+--------------------------------+-------+ | 0us+ | # | 1253 | | 10us+ | ############################## | 43102 | | 100us+ | ################# | 25013 | | 1ms+ | # | 2003 | | 10ms+ | | 325 | | 100ms+ | | 17 | | 1s+ | | 0 | | 10s+ | | 0 | +---------+--------------------------------+-------+ 8 rows in set (0.08 sec) Showing distribution of query time from a run of mysqlslap Generated with a quick CTE over events_statements_histogram_global Feature Request
 from DBAs Available on a per statement digest level. Can quickly aggregate top-N statements with latency distribution.
  • 31. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | New! Performance Schema Data Locks 31 SELECT thread_id, object_name, index_name, lock_type, lock_mode, lock_data 
 FROM performance_schema.data_locks WHERE object_name = 'seats'; +-----------+-------------+------------+-----------+-----------+-----------+ | thread_id | object_name | index_name | lock_type | lock_mode | lock_data | +-----------+-------------+------------+-----------+-----------+-----------+ | 33 | seats | NULL | TABLE | IX | NULL | | 33 | seats | PRIMARY | RECORD | X | 3, 5 | | 33 | seats | PRIMARY | RECORD | X | 3, 6 | | 33 | seats | PRIMARY | RECORD | X | 4, 5 | | 33 | seats | PRIMARY | RECORD | X | 4, 6 | +-----------+-------------+------------+-----------+-----------+-----------+ 5 rows in set (0.00 sec) Feature Request
 from DBAs
  • 32. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 32 New! Persist Configuration • Persist GLOBAL Server Variables – SET PERSIST max_connections = 500; – SET PERSIST_ONLY innodb_log_file_size = 128*1024*1024; • Examples Include: – Offline_mode – Read_Only • Requires no filesystem access Cloud Friendly
  • 33. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | New! Variables Info 33 Find the source of variables changed on your installation SELECT * FROM performance_schema.variables_info WHERE variable_source != 'COMPILED'; +------------------------+-----------------+--------------------+-----------+-----------+---------------------+----------+-----------+ | VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST | +------------------------+-----------------+--------------------+-----------+-----------+---------------------+----------+-----------+ | autocommit | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost | | basedir | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | | | bind_address | EXPLICIT | [..]my.sandbox.cnf | 0 | 0 | 2017-04-16 21:08:11 | | | | character_set_client | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost | | character_set_results | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost | | collation_connection | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost | | datadir | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | | | foreign_key_checks | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost | | log_error | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | | | lower_case_table_names | EXPLICIT | [..]my.sandbox.cnf | 0 | 2 | 2017-04-16 21:08:11 | | | | pid_file | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | | | plugin_dir | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | | | port | COMMAND_LINE | | 0 | 65535 | 2017-04-16 21:08:11 | | | | socket | COMMAND_LINE | | 0 | 0 | 2017-04-16 21:08:11 | | | | sql_mode | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost | | sql_notes | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost | | time_zone | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost | | tmpdir | EXPLICIT | [..]my.sandbox.cnf | 0 | 0 | 2017-04-16 21:08:11 | | | | unique_checks | DYNAMIC | | 0 | 0 | 2017-04-16 20:56:53 | msandbox | localhost | +------------------------+-----------------+--------------------+-----------+-----------+---------------------+----------+-----------+ 19 rows in set (0.00 sec)
  • 34. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | New! Transactional Data Dictionary • Crash-safe Database • Common data dictionary for the server and InnoDB • Crash-safe & Atomic DDL • CREATE USER <userlist>, DROP DATABASE with all-or-none semantic • Simplifies replication failure cases 34 • Meta-data locking for FK constraints • FK moved from InnoDB to server layer • Scalable Information Schema • Queries are now executed as set of SQL views on tables • Large performance improvements
  • 35. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 30x
Faster SELECT TABLE_SCHEMA,
 TABLE_NAME, TABLE_TYPE,
 ENGINE, ROW_FORMAT
 FROM information_schema.tables
 WHERE TABLE_SCHEMA LIKE 'db%'; 35 Test Performed with 100 schemas, each with 50 tables.
  • 36. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Defaults • Event Scheduler On • Utf8mb4 Character Set • Performance Schema: Memory, Transactions, MDL • InnoDB: autoinc_lock_mode=2, flush_neighbors=0, max_dirty_pages_pct_lwm=10, max_dirty_pages_pct default=90 • Improvements to back_log auto-calculation • max_error_count=1024 • max_allowed_packet=64M 36 Server-Core
  • 37. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Defaults (cont.) • Binary Log, log-slave-updates on • {master,relay-log}—info-repository = TABLE • transaction-write-set-extraction = XXHASH64 • slave-rows-search-algorithms = ‘INDEX_SCAN,HASH_SCAN’ • expire_logs_days=30 • server-id=1 37 Replication
  • 38. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | InnoDB Dedicated Server • Great for Virtual Machines & Cloud Deployments • Auto scales Log File Size, Buffer Pool Size, Flush Method • Easiest way to enable:
 
 SET PERSIST_ONLY innodb_dedicated_server = TRUE 38
  • 39. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Performance Improvements • Improved Query Consistency • Histograms • Improved Cost Model • Faster Table/Range Scans • FORCE INDEX skips index dives where possible • Expanded Hints Support • JSON Partial Update (Optimizer, Replication) 39 • Parallel Replication • UTF8MB4 • Information Schema • Performance Schema Indexes
  • 40. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | QueriesperSecond 0 40,000 80,000 120,000 160,000 Users 1 2 4 8 16 32 64 128 256 512 MySQL 8.0 Labs MySQL 5.7 MySQL 5.6 MySQL 8.0 Labs: Sysbench Benchmark: IO-bound OLTP RW Updates-only
 Intel(R) Xeon(R) Platinum 8168 CPU 2CPU-sockets, 48cores-HT 2x Intel Optane Oracle Linux 7.3
  • 41. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | QueriesperSecond 0 300,000 600,000 900,000 1,200,000 Users 1 2 4 8 16 32 64 128 256 512 MySQL 8.0 Labs MySQL 5.7 MySQL 5.6 MySQL 8.0 Labs: Sysbench Benchmark: IO-bound OLTP RO Point-Selects
 Intel(R) Xeon(R) Platinum 8168 CPU 2CPU-sockets, 48cores-HT 2x Intel Optane Oracle Linux 7.3 1,000,000+ QPS
  • 42. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | MySQL 8.0 RC: Resource Group Example QueriesperSecond 0 40,000 80,000 120,000 160,000 No Resource Group With Resource Group Select Update System Configuration : Oracle Linux 7, Intel(R) Xeon(R) CPU E7-4860 2.27GHz 40 cores-HT (40 Cores Shared) (40 Cores for Select) (10 Cores for Update RG)
  • 43. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | • Source code now documented with Doxygen • New Plugin Infrastructure • Improved BLOB Storage • Improved Memcached Interface • InnoDB Auto Increment Persists • Parser Refactoring • Improvements to Temporary Tables • C++11 and Toolchain Improvements • GTID_PURGED always settable • Undo tablespaces now dynamic • In memory storage engine • SQL Roles Support • Encryption for Redo and General Tablespaces • InnoDB Cats lock scheduler algorithm • Improved Parallel Replication • SQL Grouping Function • Optimizer Trace detailed sort statistics • Smaller Package Downloads • Improved usability of cost constant configuration 43 All these features plus…
  • 44. Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | 44