state of the dolphin - percona · copyright © 2017, oracle and/or its affiliates. all rights...

Post on 17-Jun-2020

5 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

State of the DolphinGeir HøydalsvikSenior Software Development Director

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

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 8.0 RC1 Now Available!• 2 years in Development

• 400+ Worklogs

• 5000+ Bugs Fixed

• 500 new tests

4

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

Building a Sample ApplicationTicket Booking System

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

Case Study: Our Booking System

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

MySQL 8.0 Enables Modern Web Applications1. Mobile First

2. Developer First

3. Data Driven

4. 24x7 at Scale

7

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

Where are our bookings coming from?• Many orders will be placed on mobile

• It is not just a theme:

• Need to reduce clicking between screens

• Use user location for context

8

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

SELECT events.id, events.name, DATE(events.event_date) as date,

ROUND(st_distance_sphere(venues.location, POINT(-6.2603, 53.3498)), 2)

AS distance_in_meters

FROM events

INNER JOIN venues ON events.venue_id=venues.id

WHERE event_date > NOW()

ORDER BY distance_in_meters;

+----+-----------------------------+----------------+--------------------------

-+

| id | name | date | distance_in_meters |

+----+-----------------------------+----------------+--------------------------

-+

| 1 | Percona Live | 2017-09-25 | 0.00 |

| 2 | Oracle OpenWorld | 2017-10-01 | 8176613.65 |

| 3 | Percona Live | 2018-04-24 | 8192496.25 |

+----+-----------------------------+----------------+--------------------------

-+

3 rows in set (0.00 sec)

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

Mobile also means• Emoji characters used as input

• MySQL 8.0 defaults to utf8mb4

• Latest Unicode 9.0 Support

• New collations based on DUCET, accent and case sensitive collations, Japanese, Russian

10

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

MySQL 8.0 vs MySQL 5.7 utf8mb4

11

+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 Enables Modern Web Applications1. Mobile First

2. Developer First

3. Data Driven

4. 24x7 at Scale

12

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

Javascript Everywhere

13

+

Backend:

Frontend:

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

What’s New in the MySQL Shell• Customizable prompt

• Include context and session information

• Custom font and color support

• Persistent command line history

• Auto-complete / Content Assistance

• Full Unicode support

14

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

Replication with InnoDB Cluster• Complete HA Solution for MySQL

• Based on MySQL Group Replication

• Clients route via MySQL Router

• Management by MySQL Shell

15

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

Flexible Schema

16

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

mysql> SELECT id, doc FROM seats WHERE id = 28100\G

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

id: 28100

doc: {"row": 10, "seat": 13, "section": 215, "properties":

{"amenities": [{"type": "washroom", "distance_in_meters":

38.564358156700024}, {"type": "bar", "distance_in_meters":

152.33173722618423}, {"type": "snacks", "distance_in_meters":

35.965617807550004}, {"type": "souvenirs", "distance_in_meters":

215.66576701185272}], "accessible": false, "emergency_exits":

[{"exit 1": 100.66892563427699}, {"exit 2": 374.19603448751946},

{"exit 3": 563.9332987311606}, {"exit 4": 886.7355222969646}, {"exit

5": 1900.9778593955355}], "entrance_number": 2}}

1 row in set (0.00 sec)

17

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

JSON Functions

18

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[_PRESERVE]()

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_ARRAYAGG()

JSON_OBJECTAGG()

JSON_MERGE_PATCH()

JSON_TABLE() *labs

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

SELECT JSON_ARRAYAGG(

JSON_OBJECT('Event id', id,

'Event date', event_date,

'Event name', name))

FROM events

WHERE venue_id = 10

AND event_date > NOW()

ORDER BY event_date;

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

***************************

[ {“Event id": 100, “Event date": “2017-09-25”, “Event

name": “Percona Live”},

{“Event id": 101, “Event date": “2017-10-25”, “Event name":

“Dublin Live”} ]

19

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)

20

Labs

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

MySQL 8.0 Enables Modern Web Applications1. Mobile First

2. Developer First

3. Data Driven

4. 24x7 at Scale

21

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

New SQL Syntax• Two of our most requested features:

• Common Table Expressions (CTEs)

• Window Functions

22

Feature Requestfrom Developers

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

WITH tickets_filtered AS (

SELECT tickets.*, seats.doc

FROM tickets

INNER JOIN seats ON tickets.seat_id=seats.id

WHERE tickets.event_id = 3

)

SELECT * FROM tickets_filtered

WHERE doc->"$.section" = 201\G

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

id: 14447

event_id: 3

seat_id: 16430

order_id: NULL

doc: {"row": 2, "seat": 1, "section": 201, "properties":

{"amenities": [{"type": "washroom", "distance_in_meters":

171.80304788220957}, {"type": "bar", "distance_in_meters":

58.53288591702737}, {"type": "snacks", "distance_in_meters":

..

23

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

SELECT

seats.doc->"$.row" as row_no,

seats.doc->"$.seat" as seat_no,

LAG(seats.doc->"$.seat", 1) OVER w AS prev_seat,

LEAD(seats.doc->"$.seat", 1) OVER w AS next_seat

FROM tickets

JOIN seats ON tickets.seat_id=seats.id

WHERE seats.doc->"$.section" = 201

WINDOW w AS

(PARTITION BY seats.doc->"$.row"

ORDER BY seats.doc->"$.seat")

ORDER BY row_no, seat_no;

+----------+-----------+--------------+-------------+

| row_no | seat_no | prev_seat | next_seat |

+----------+-----------+--------------+-------------+

| 1 | 1 | NULL | 2 |

| 1 | 2 | 1 | 3 |

| 1 | 3 | 2 | 4 |

+----------+-----------+--------------+-------------+

24

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

MySQL 8.0 Enables Modern Web Applications1. Mobile First

2. Developer First

3. Data Driven

4. 24x7 at Scale

25

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

New! Better Handling of Hot Row Contention

26

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! 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

27

Feature Requestfrom DBAs

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

Evolution from MySQL 5.5 to 8.0Performance Schema

Feature Requestfrom DBAs

MySQL 8.0HistogramsIndexesData Locks instrumentationSQL Errors instrumentationVariables InstrumentationTable pluginImproved Defaults

MySQL 5.7Memory InstrumentationPrepared Statements InstrumentationTransactions InstrumentationScalable Memory AllocationBundled SYS schemaLower Overhead

MySQL 5.6Statement InstrumentationLower Overhead

MySQL 5.5Event WaitsMutexesFilesThreads

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

Performance Comparison Over 30x faster!

SELECT * FROM sys.session1000 active sessions

Time in Seconds (Lower is better)

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

30

• 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. |

Performance Improvements• Improved Query Consistency

• Histograms

• Improved Cost Model

• Faster Table/Range Scans

31

• Parallel Replication

• UTF8MB4

• Information Schema

• Performance Schema Indexes

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

MySQL 8.0 Labs: Sysbench Benchmark: IO-bound OLTP RW Updates-only

Intel(R) Xeon(R) Platinum 8168 CPU2CPU-sockets, 48cores-HT 2x Intel Optane Oracle Linux 7.3

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

MySQL 8.0 Labs: Sysbench Benchmark: IO-bound OLTP RO Point-Selects

Intel(R) Xeon(R) Platinum 8168 CPU2CPU-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

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. | 35

top related