Top Banner
© 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA
60

MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

Jul 06, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 1

Peter Zaitsev, CEO, Percona

MySQL Query Optimization

March 8, 2019

SCALE 17xPasadena,CA

Page 2: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 2

About Percona

Open Source Database Solutions Company

Support, Managed Services, Consulting, Training, Engineering

Focus on MySQL, MariaDB, MongoDB, PostgreSQL

Support Cloud DBaaS Variants on major clouds

Develop Database Software and Tools

Release Everything as 100% Free and Open Source

Page 3: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 3

5,000,000+ downloads 175,000+ downloads 4,500,000+ downloads

450,000+ downloads 2,000,000+ downloads 1,500,000+ downloads

Widely Deployed Open Source Software

Page 4: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 4

About the Presentation

Cover the Basics

How MySQL Executes Queries

How To Find Queries to Optimize

How to Optimize Them

Page 5: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 5

The Basics

Page 6: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 6

Grand Goal

Application which Has a Great Performance

Page 7: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 7

Great Performance Defined

Responds With Low Response Time

At All Times

For All Users

Page 8: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 8

Response Time and Database

Database is not always at fault

Page 9: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 9

Database Making your Application Slow

Dev Issues Ops Issues

Page 10: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 10

Dev Issues:

Many Queries executed serially

Expensive Queries

Poorly Designed Queries

Poorly Optimized Queries

Saturation with Additional Load

Page 11: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 11

Ops Issues

Problems with System, Storage or Network

Saturation with Additional Load

Capacity Planning

Page 12: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 12

Mind Network Latency

Page 13: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 13

Query Optimization Goals

Specific User Interaction

Application As a Whole

Improving Efficiency

Assuring Scalability

Page 14: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 14

Not Query Optimization Alone

General Architecture

Right Choice of Technology (Not Only MySQL)

Hardware/Instance Properties

OS and MySQL Configuration

Database Schema

Page 15: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 15

How MySQL Executes Queries

Page 16: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 16

Execution Basics

Single Server

Single Thread (Using Single CPU Core)

No Intermediate Results Caching Between Query Executions

Page 17: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 17

Query Execution Diagram

Page 18: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 18

Added Complexities

UDFs (User Defined Functions)

Stored Programs

VIEWs

Page 19: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 19

Use the LIMIT

Do not just stop fetching rows at the application side

MySQL Client-Server Protocol is NOT cursor based

Page 20: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 20

Join Order

Permanent and “Derived” Tables are going to be “Joined in Order”

MySQL Starts from one table, finding all needed rows in it, and iterating finding matching rows from the next one

Join Order Is Critical For Performance

SELECT STRAIGHT_JOIN to force join order

Page 21: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 21

Indexes

Proper Indexes are must have for Optimal Query Execution

Can improve Query Performance 1000x or more

Expensive to Maintain… so Do not Overdo

Covering Indexes to speed up data reads

Page 22: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 22

Indexes are not Free

Space on Disk

Space in Memory

Extra Optimizer Load to Evaluate Them

Expensive to Maintain with Updates

Page 23: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 23

Columns

MySQL (Innodb, MyISAM, MyRocks etc) store data row by row

All columns must be read on every row access (excluding Blobs for Innodb)

Number of Total Columns, Their Size Impacts Query Performance a Lot

Covering Indexes are great to reduce amount of data query Touches

Page 24: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 24

Character Sets

https://per.co.na/MySQLCharsetImpact

Page 25: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 25

Less impact In MySQL 8

Page 26: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 26

Grouping and Sorting

Can use Index, External Sort, Temporary File

Temporary Table can be in memory or on disk

Amount of Data you Sort, Group Matters A Lot

Too many Different Algorithms to Cover in Details

Page 27: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 27

The Mysterious Optimizer

No one knows how MySQL Optimizer Really works

Designed to Choose Best Plan Based on Cost

Cost Model is just a model

Relies on Statistics which can be very wrong

Page 28: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 28

Learn what MySQL Execution Can Do

Not Everything you can imagine can be done by MySQL during execution

Though it also has tricks in its sleeve you may not aware of

Page 29: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 29

Are you Smarter than Optimizer ?

Use Optimizer Hints to Execute Query The way you Like

Often the plan you think is faster is not

https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html

Page 30: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 30

Learn EXPLAIN

A way to understand how MySQL Expects to Execute Query

Plan May Change based on constants, time server

EXPLAIN SELECT …

EXPLAIN FORMAT=JSON SELECT …

https://dev.mysql.com/doc/refman/8.0/en/using-explain.html

Page 31: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 31

Explain Examplemysql> explain select max(season_nr) from title group by production_year;+----+-------------+-------+-------+---------------+-----------------+---------+------+------+--------------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+-------+---------------+-----------------+---------+------+------+--------------------------+| 1 | SIMPLE | title | range | NULL | production_year | 5 | NULL | 201 | Using index for group-by |+----+-------------+-------+-------+---------------+-----------------+---------+------+------+--------------------------+1 row in set (0.01 sec)

Page 32: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 32

EXPLAIN EXTENDED

Page 33: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 33

EXPLAIN FORMAT=JSON – More Details

Page 34: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 34

MySQL WorkBench Visualization

https://www.mysql.com/products/workbench/

Page 35: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 35

Optimizer Trace • Advanced Optimizer Debugging if you can’t figure out why

given plan is chosen

Page 36: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 36

How to Find Queries to Optimize

Page 37: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 37

Where Should you Optimize your Queries ?

Development Environment

Production Environment

Page 38: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 38

Reality

• You want to ensure unoptimized queries never make it to Production

• But you will have Query Performance Issues in Production anyway

Both

Page 39: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 39

Development

Can use MySQL Log (Slow Query Log) or Application Debuging

Can help not only to Optimize Slow Queries but also Eliminate Waste

Page 40: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 40

Development and Production

Using Query Analyzes Tools

Page 41: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 41

Percona’s Open Source Solution

Page 42: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 42

See it Live!

https://pmmdemo.percona.com

Page 43: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 43

Top Queries

Page 44: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 44

Things to Consider

Outliers may not be causing the most load

Victims and queries causing the problem

Queries not Finished yet

Page 45: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 45

Query Profile

Page 46: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 46

How Efficiently Query Produces Result ?

Page 47: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 47

Explain and Table Details

Page 48: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 48

CPU Usage Reduction with PMM

https://per.co.na/PMMCPU

Page 49: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 49

How to Optimize Them

Page 50: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 50

Query Stats

How Many Rows does it crunch ?

How Many Rows it returns ?

How Much IO is Required ?

Is Temporary Table Required ? Temporary Sort File ?

Page 51: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 51

Run EXPLAIN

Is Plan Reasonable ?

Page 52: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 52

Bad Plan

Missing Indexes

Bad Optimizer Statistics

Bad Query Practices ie “WHERE col+1=10”

Page 53: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 53

Expensive Queries

•SELECT AVG(value) FROM ORDERS WHERE ORDER_DATE<“2018-01-01”

Queries which

Naturally Require A lot

of Work to Do

Page 54: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 54

Dealing with Expensive Queries

Getting Rid of Them!

Caching Them

Pre-Generating Results

Using Systems which support such queries better

Page 55: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 55

Beyond MySQL for Expensive Queries

https://per.co.na/jOMbko

Page 56: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 56

Optimizing Writes

Less Indexes

Data Fits in Memory

Batching

Partitioning

Different Storage Engine

Page 57: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 57

MyRocks – Better Performance with Large Data

Page 58: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 58

Share your insight and join the debate!

https://per.co.na/survey

Page 59: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 59

Join Us at Percona Live

https://www.percona.com/live/19/

Percona Live 2019 takes place in Austin, Texas from May 28-30, 2019 at the Hyatt Regency.

Percona Live provides an opportunity to network with peers and

technology professionals. Mingle with all types of database

community members: DBAs, developers, C-level executives and

the latest database technology trend-setters.

SUPER SAVER TICKETS ON SALE!

Page 60: MySQL Query Optimization · © 2019 Percona. 1 Peter Zaitsev, CEO, Percona MySQL Query Optimization March 8, 2019 SCALE 17x Pasadena,CA

© 2019 Percona. 60

Thank You!