Innodb Architecture and Performance Optimization

Similar documents
Innodb Architecture and Performance Optimization. Peter Zaitsev, CEO Percona 25 September 2017

Innodb Architecture and Internals. Peter Zaitsev Percona Live, Washington DC 11 January 2012

Innodb Performance Optimization

Improvements in MySQL 5.5 and 5.6. Peter Zaitsev Percona Live NYC May 26,2011

InnoDB: Status, Architecture, and Latest Enhancements

MySQL Performance Optimization and Troubleshooting with PMM. Peter Zaitsev, CEO, Percona

Performance improvements in MySQL 5.5

Deep Dive: InnoDB Transactions and Write Paths

Deep Dive: InnoDB Transactions and Write Paths

MySQL Architecture and Components Guide

MySQL Performance Optimization and Troubleshooting with PMM. Peter Zaitsev, CEO, Percona Percona Technical Webinars 9 May 2018

VMWARE VREALIZE OPERATIONS MANAGEMENT PACK FOR. Amazon Aurora. User Guide

PolarDB. Cloud Native Alibaba. Lixun Peng Inaam Rana Alibaba Cloud Team

How to Fulfill the Potential of InnoDB's Performance and Scalability

Optimizing MySQL Configuration

Scale out Read Only Workload by sharing data files of InnoDB. Zhai weixiang Alibaba Cloud

Switching to Innodb from MyISAM. Matt Yonkovit Percona

InnoDB: What s new in 8.0

XtraDB 5.7: Key Performance Algorithms. Laurynas Biveinis Alexey Stroganov Percona

What's new in MySQL 5.5? Performance/Scale Unleashed

SSD/Flash for Modern Databases. Peter Zaitsev, CEO, Percona November 1, 2014 Highload Moscow,Russia

InnoDB Scalability Limits. Peter Zaitsev, Vadim Tkachenko Percona Inc MySQL Users Conference 2008 April 14-17, 2008

Percona Live September 21-23, 2015 Mövenpick Hotel Amsterdam

MySQL 5.6: Advantages in a Nutshell. Peter Zaitsev, CEO, Percona Percona Technical Webinars March 6, 2013

Accelerating OLTP performance with NVMe SSDs Veronica Lagrange Changho Choi Vijay Balakrishnan

Topics. File Buffer Cache for Performance. What to Cache? COS 318: Operating Systems. File Performance and Reliability

Why we re excited about MySQL 8

SSD/Flash for Modern Databases. Peter Zaitsev, CEO, Percona October 08, 2014 Percona Technical Webinars

Heckaton. SQL Server's Memory Optimized OLTP Engine

How To Rock with MyRocks. Vadim Tkachenko CTO, Percona Webinar, Jan

Kathleen Durant PhD Northeastern University CS Indexes

Aurora, RDS, or On-Prem, Which is right for you

Compression in Open Source Databases. Peter Zaitsev April 20, 2016

MySQL Database Scalability

Why Choose Percona Server For MySQL? Tyler Duzan

Rdb features for high performance application

Carnegie Mellon Univ. Dept. of Computer Science /615 - DB Applications. Last Class. Today s Class. Faloutsos/Pavlo CMU /615

InnoDB: What s new in 8.0

SQL Server 2014: In-Memory OLTP for Database Administrators

ScaleArc Performance Benchmarking with sysbench

) Intel)(TX)memory):) Transac'onal) Synchroniza'on) Extensions)(TSX))) Transac'ons)

MariaDB 10.3 vs MySQL 8.0. Tyler Duzan, Product Manager Percona

Best Practices for MySQL Scalability. Peter Zaitsev, CEO, Percona Percona Technical Webinars May 1, 2013

Mysql Cluster Global Schema Lock

) Intel)(TX)memory):) Transac'onal) Synchroniza'on) Extensions)(TSX))) Transac'ons)

Microsoft SQL Server Database Administration

Last Class Carnegie Mellon Univ. Dept. of Computer Science /615 - DB Applications

Optimizing MySQL Configuration. Peter Zaitsev,CEO Technical Webinars Series March 2012

Chapter 17: Recovery System

Failure Classification. Chapter 17: Recovery System. Recovery Algorithms. Storage Structure

) Intel)(TX)memory):) Transac'onal) Synchroniza'on) Extensions)(TSX))) Transac'ons)

Resolving and Preventing MySQL Downtime

Outline. Database Tuning. Ideal Transaction. Concurrency Tuning Goals. Concurrency Tuning. Nikolaus Augsten. Lock Tuning. Unit 8 WS 2013/2014

TokuDB vs RocksDB. What to choose between two write-optimized DB engines supported by Percona. George O. Lorch III Vlad Lesin

What the Hekaton? In-memory OLTP Overview. Kalen Delaney

Effective Testing for Live Applications. March, 29, 2018 Sveta Smirnova

Percona Server for MySQL 8.0 Walkthrough

Recovery and Logging

Foster B-Trees. Lucas Lersch. M. Sc. Caetano Sauer Advisor

The Google File System

Amazon Aurora Deep Dive

MySQL Performance Troubleshooting

Database Management and Tuning

What s New in MySQL 5.7 Geir Høydalsvik, Sr. Director, MySQL Engineering. Copyright 2015, Oracle and/or its affiliates. All rights reserved.

System Malfunctions. Implementing Atomicity and Durability. Failures: Crash. Failures: Abort. Log. Failures: Media

To Shard or Not to Shard That is the question! Peter Zaitsev April 21, 2016

IT Best Practices Audit TCS offers a wide range of IT Best Practices Audit content covering 15 subjects and over 2200 topics, including:

Introduction. Storage Failure Recovery Logging Undo Logging Redo Logging ARIES

MySQL High Availability

What s New in MySQL and MongoDB Ecosystem Year 2017

MySQL Performance: Demystified Tuning & Best Practices

MySQL Replication Options. Peter Zaitsev, CEO, Percona Moscow MySQL User Meetup Moscow,Russia

Transaction Management: Crash Recovery (Chap. 18), part 1

some sequential execution crash! Recovery Manager replacement MAIN MEMORY policy DISK

ACID Properties. Transaction Management: Crash Recovery (Chap. 18), part 1. Motivation. Recovery Manager. Handling the Buffer Pool.

Concurrency Control & Recovery

Practical MySQL Performance Optimization. Peter Zaitsev, CEO, Percona July 02, 2015 Percona Technical Webinars

SQL Server 2014 Training. Prepared By: Qasim Nadeem

Tuesday, April 6, Inside SQL Server

Problems Caused by Failures

Transaction Management: Concurrency Control, part 2

Locking for B+ Trees. Transaction Management: Concurrency Control, part 2. Locking for B+ Trees (contd.) Locking vs. Latching

Chapter 8: Virtual Memory. Operating System Concepts

Ext3/4 file systems. Don Porter CSE 506

ARIES (& Logging) April 2-4, 2018

Overview of Transaction Management

Transaction Management Overview

Which technology to choose in AWS?

Current Topics in OS Research. So, what s hot?

Transactions. Kathleen Durant PhD Northeastern University CS3200 Lesson 9

Oracle Architectural Components

Developing SQL Databases (762)

ALTER TABLE Improvements in MARIADB Server. Marko Mäkelä Lead Developer InnoDB MariaDB Corporation

MySQL Performance Improvements

InnoDB Architecture, and Performance Op7miza7on

CMSC 461 Final Exam Study Guide

Percona XtraDB Cluster 5.7 Enhancements Performance, Security, and More

File Structures and Indexing

Transaction Management Overview. Transactions. Concurrency in a DBMS. Chapter 16

Preventing and Resolving MySQL Downtime. Jervin Real, Michael Coburn Percona

Transcription:

Innodb Architecture and Performance Optimization MySQL 5.7 Edition Peter Zaitsev April 8, 206

Why Together? 2 Advanced Performance Optimization Needs Architecture Knowledge 2

Right Level 3 Focus on Details What Matter 3

New This Year Graphs! 4 Added Graphs for better illustration Get your own by installing Percona Monitoring and Management Beta http://bit.ly/getpmm 4

What Architecture? 5 Data Structures On Disk In Memory Details for Transactions MVCC Locking Latching Background Activities Purging Checkpointing Flushing 5

Innodb Versions Covered 6 MySQL 5.7 as Baseline Improvements in XtraDB / Percona Server Changes in MariaDB 6

Innodb Basics 7 Traditional Storage Engine B+Tree Based ACID Transactions MVCC OLTP Optimized 7

IOPs Versus Latency during load 8 8

9 Data Structures 9

Main Objects 0 Tablespace Table File Segment Extent Page Index Redo Log Log Record Undo Space Undo Slot 0

Innodb Main Files Tablespace Files Log Files

Tablespace 2 All Data Stored In Tablespaces System Tablespace Per-Table Tablespace Undo Tablespace(s) MySQL 5.6+ Temporary Tablespace MySQL 5.7+ General Tablespaces MySQL 5.7+ 2

Performance Considerations 3 Innodb_file_per_table is default in MySQL 5.6+ Can cause problems with many tables Can cause problems with many CREATE/DROP/TRUNCATE Improved in MySQL 5.7 3

4 Tablespace: Physical Structure 4

Table 5 Stored In Tablespace Consists of Indexes May have many partitions 5

Table Consists of Indexes? 6 Data is stored in CLUSTERED Index PRIMARY KEY or hidden Secondary keys point to PRIMARY KEY 6

7 Index is B+Tree 7

8 File IO during INSERT 8

9 Row Operations During Insert 9

Physical and Logical Structure 2 0 Segments are Similar to Files Each Index has 2 segments Leaf Page Segment Non-Leaf Page Segment 20

2 Page Details 2

Performance Considerations 2 2 Have PRIMARY KEY Short PRIMARY KEYs are better Sequential inserts are much faster for PRIMARY KEY Great to keep Secondary Keys in Memory 22

Redo Logs 2 3 2 (or more) files concatenated as redo log of fixed size Log consists of records (52b aligned) Physio-logical Redo record format Every change to Tablespace must be recorded in redo log before it is done (except temporary tablespace in MySQL 5.7) 23

Redo log buffering 2 4 Buffered in Log Buffer Optionally Flushed at Transaction Commit Flushed Periodically 24

Performance Considerations 2 5 Innodb_log_file_size to control size of redo log innodb_log_write_ahead_size Avoid read-around-write for large log files not in cache Larger log size better write performance (less flushing) longer recovery time 25

Innodb Checkpointing 2 6 How Much redo log space is used 26

Mind innodb_io_capacity Recommended Setting can decrease performance 27

28 How Durable Transactions do you Need? 2 8

Mind Group Committ Measuring transaction commits vs log writes 29

Double write Buffer 3 0 Page Flushes are not guaranteed atomic Flush Pages to double write buffer and again in real locations Can get expensive (especially SSD) Can disable if file system guarantees atomicity MySQL 5.7 automatically does for Sandisk NVMFS 30

DoubleWrite in Percona Server 5.7 3 Multiple Doublewrite buffers (one per Buffer Pool) Allows Parallel Contention Free Flushing More Details http://bit.ly/xo6btl 3

32 Parallel Doublewrite Performance 3 2

Undo Space 3 3 Used to Implement MVCC and Rollbacks Stored in System Tablespace by Default Can be stored in separate Tablespace MySQL 5.6+ 33

Undo Space Structure 3 4 Two Types of Records Inserts - no previous row version to store Update/Delete store previous row version 34

Multiple Versions 3 5 Undo Row Record points to previous row version, if such exists Chain can get really long for some workloads 35

Performance Considerations 3 6 Very long version history chains Avoid long running transactions if possible Undo Space spilling out of cache Exploding System Tablespace due to runaway transaction http://bit.ly/si2ix9 MySQL 5.7 allows undo space purging 36

Enabling Undo Tablespace Purging 3 7 Requires Undo Tablespace to be In Separate Files innodb_undo_tablespaces=2 innodb_undo_log_truncate= 37

Purge Lag Prevention 3 8 Can help to prevent run away undo space innodb_max_purge_lag=0000000 innodb_max_purge_lag_delay=0000 38

39 Transaction History 3 9

Purge Progress 4 0 Pause when long transaction is running 40

4 Purge Delay Management 4

4 2 Structures in Memory 42

Most Important Data Structures 4 3 Buffer Pool Additional Memory Pool Change Buffer Adaptive Hash Index Log Buffer Double Write Buffer Lock Structures Dictionary Cache 43

Buffer Pool 4 4 Cache (for IO to Tablespaces) Storage for Lock Structures Storage for Adaptive hash index Storage for Change Buffer 44

Buffer Pool Configuration 4 5 Can have Multiple Buffer pools Helps to reduce contention No mapping of tables to pools Innodb_buffer_pool_instances Can Resize buffer pool online (MySQL 5.7) In case you picked the wrong size 45

46 Online Resizing has Performance Impact 4 6

Buffer Pool For Caching 4 7 Best Way to Cache Data Innodb_flush_method=O_DIRECT is recommended Caching and Compression Both compressed and uncompressed copies May evict just uncompressed or both in case of cache pressure 47

Young and Old 4 8 LRU based cache replacement policy Two main LRU list (Young and Old) Helps to make caching Full Table Scan Tolerant Page is placed to Young list first Moved to Old if accessed again after period of time 48

More on Caching 4 9 Background Flushing and Page Cleaning Page Checksum validation on read Integration with Change Buffer to merge outstanding changes on page read 49

Performance Consideration 5 0 Main use of Memory on Innodb system May allocate 80%+ memory for it Beware of Swapping Better few percent too little than few percent too much More CPU Cores more buffer pool instances might help Innodb_flush_method=O_DIRECT best In most cases 50

Innodb IO 5 Watch number of IOs and Latency 5

Additional Memory Pool 5 2 Used to be used to speed up allocation Now Innodb allocates directly from OS 52

Change Buffer 5 3 Exists both in memory and on disk Stored Inside Buffer Pool Matters when data Is much larger than memory Buffers changes to be reflected in B-Tree later Transparent for the application 53

Things to Consider 5 4 Worse Than useless if full Can slow down reads to unmerged pages Can cause performance problems on restart Takes away memory from cache Merge needs to be performed before read As it will not be in memory any more 54

Performance Considerations 5 5 Can be disabled Good to restrict size, especially on SSDs innodb_change_buffer_max_size 55

Insert/Change Buffer Size 5 6 Takes a while to reach steady state 56

Insert Buffer Performance 5 7 Watch Merge Ratio 57

Adaptive Hash Index 5 8 Speed up access inside buffer pool B-Tree Descent to Hash Table Lookup Partial Index (most accessed pages) Built automatically by Innodb Works for PRIMARY and SECONDARY Keys For Key Prefixes and Full Keys 58

Adaptive Index Illustration 5 9 Adaptive Hash Index lookup Search the adaptive hash extension_number 8 4 2 6 3 5 7 9 3 5 Find a pointe directly to the leaf node of the clustered index. Find a pointer directly to 2 the leaf node of the clustered index. 0 4 4 0xACDC 2 0xACDC 4 0xACDC 2 0xACDC 2 0xACDC 2 0xACDC 2 0xACDC 2 0xACDC 6 0xACDC 0 0xACDC 4 0xACDC 6 0xACDC 0 0xACDC 4 0xACDC.. 3.. 5.. 7.. 9.... 3.. 5.... 3.. 5.. 7.. 9.... 3.. 5.. 59

Performance Considerations 6 0 Can become contention hotspot Better Performance; Lower Concurrency Disable Innodb_adaptive_hash_index=0 Partition (PS 5.6, MySQL 5.7) innodb_adaptive_hash_index_parts=8 60

AHI Performance 6 Consider AHI Hit Ratio 6

AHI Maintenance 6 2 And Maintenance Overhead vs Value 62

Log Buffer 6 3 Store Log Records before they are flushed to Log Innodb_log_buffer_size innodb_flush_log_at_timeout Watch how much data is written to the logs Higher Log Buffer Sizes reduce contention (up to 256Mb) 63

Innodb Log Buffer 6 4 More efficient than you would think 64

Double Write Buffer 6 5 Is it on disk or in memory? Both! Size Can t be tuned PS 5.7 - Improved 65

Lock Structures 6 6 Allocated in the Buffer Pool Very Efficient - few bits per lock No Lock Escalation For each page having lock small bitmap allocated indicating locked rows 66

Data Dictionary Cache 6 7 Information about open tables Structure; Index Statistics etc. Tied to table_definition_cache_size Was not cache before MySQL 5.6 All accessed tables were always kept in memory 67

6 8 Operations Details 68

Transaction Control 6 9 How do Transactions Work In Innodb 69

Basic Operation How Write Query is Handled 000 Log Files UPDATE City SET name = 'Morgansville' WHERE name = 'Brisbane' AND CountryCode='AUS' Buffer Pool Buffer Pool Table Tablespace Space 70

Database Operations 7 Reads Writes DDL (CREATE; Alter etc.) 7

Transaction Mode 7 2 No Transactions for DDLs AUTOCOMMIT= by default Every Statement is its own transaction BEGIN/COMMIT typically used AUTOCOMMIT=0 can also be used 72

Isolation Mode 7 3 How Transactions are Isolated from Each other READ UNCOMMITTED READ COMMITTED REPEATABLE READS (default) SERIALIZABLE 73

Performance Considerations 7 4 READ COMMITTED or REPEATABLE READS may be giving best performance REPEATABLE READS reduces snapshot allocation overhead READ COMMITTED reduces amount of history which need to be maintained READ UNCOMMITTED for very long statistical queries 74

Better performance with READ-UNCOMMITTED Running Long Select while running SysBenchupdates 75

Pessimistic Locking 7 6 Take Locks as you go Wait if row is currently locked Detect Deadlocks almost instantly 76

How many Row Lock Waits are happening? Wait more important than number 77

Innodb Reads 7 8 Non locking reads by default (MVCC) Can be made locking with FOR UPDATE or LOCK IN SHARE MODE modifiers SERIALIZABLE adds LOCK IN SHARE MODE to all reads 78

Long Read Transactions 7 9 Result in Concurrent writes creating a lot of undo space because Purging is blocked May have to go far in undo chain to find data they are looking for 79

Performance Considerations 8 0 Covering Indexes are great Will not read out-of page blobs if not needed by query Multiple columns faster than multiple rows Number of Columns impacts performance 80

Innodb Writes 8 Set Locks as they go Bypass MVCC (you can t modify non current data) Modify Actual Data as they go (COMMIT is trivial) 8

Innodb DDL 8 2 Not Transactional but Atomic Commit Transaction when Executed Many DDL are allowed Online Metadata Locks used for Coordination with other operations 82

Long Write Transactions 8 3 Create a lot of records in Undo Space Can produce waste in Indexes Reduce Concurrency due to Locks Have increased chance of Deadlocks Can Cause stalls in Replication 83

Performance Considerations 8 4 Writes are more expensive than reads Behind every write there is the read Large amount of versions for the single row can be the problem Hot columns might be better in separate table 84

MVCC Details 8 5 How Does Multi Version Concurrency Control Works 85

MVCC Basics 8 6 Every transaction has a number Innodb maintains list of active transactions Each row stores transaction which has last touched it Previous row versions are stored as chain in undo space Delete is really Delete Mark and purge later 86

MVCC Basics 8 7 Transaction accessing a row can quickly check if it should see it or go look at old version Updates done in place with previous copy migrated to undo space Large BLOBs (out of page) are not updated in place 87

MVCC and Indexes 8 8 Indexes contain all current version Key Value 5 will point to all rows which have key value 5 now or had it in the past Index is marked with last transaction which modified it Visibility can often be checked without reading row 88

MVCC Garbage Collection 8 9 Transaction Commits Read-View Advances (READ COMMITTED) Some old version are no more needed This cleanup happens in background Purge Threads 89

Performance Considerations 9 0 Watch for MVCC Garbage grow unchecked Due to Long Running Transactions Due to Purge being unable to keep up Monitor Innodb_history_list_length 90

Locking Basics 9 How Locking Works in Innodb 9

Types of Locks 9 2 Row Locks Index Locks Gap Locks Meta Data Locks 92

Locking Modes 9 3 S Shared Lock (Reads) X exclusive Lock (Writes) I - Intention Lock (on higher level object) SIX Set on the table which has some words being updated 93

Locking Performance 9 4 Locking Reads can be up to 2x slower Read Lock is set on Index records for active index Write Locks are set on row and all index entries 94

Foreign Keys 9 5 Create complicated locking dependencies Can be lock troubleshooting nightmare 95

Deadlock Detection 9 6 There is always chance for deadlocks Immediate Non-Recursive (5.6+) May report false positives Whole Transaction rolls back on deadlock 96

Lock Timeouts 9 7 Avoid waiting for locks forever innodb_lock_wait_timeout Can Rollback Transaction or Statement Applies to Row Locks only (Meta Data Locks have their own Timeout) 97

Performance Considerations 9 8 Lock Less Lock for Less time Acquire Locks in the same order 98

Latching 9 9 Latches are Internal Locks Mutexes, Read- Write-Locks 99

Latches vs Locks 0 0 Locks are driven by workload and transaction isolation semantics Latches are based on internal implementations Latches change a lot between versions 00

Why Important? 0 Hot Latches frequent cause of Performance Problems 0

Innodb Latches 0 2 Does not use OS Primitives Directly Implements its own Wrappers for Performance and Transparency 02

Understanding Latches 0 3 Performance Schema Need To additionally enable sync instrumentation SHOW ENGINE INNODB STATUS Limited but always available 03

Where is my contention? 0 4 Performance Schema is best way to look Check out sys_schema (Included with MySQL 5.7) +---------------------------------------------+---------+--------+ event_name nsecs_per seconds +---------------------------------------------+---------+--------+ wait/synch/rwlock/innodb/index_tree_rw_lock 9543.3 3456. wait/synch/mutex/innodb/log_sys_mutex 207.3 385.8 wait/synch/rwlock/innodb/hash_table_locks 65.7 84.5 wait/synch/mutex/innodb/fil_system_mutex 328.3 3.6 wait/synch/mutex/innodb/redo_rseg_mutex 766.4 84.9 wait/synch/rwlock/sql/mdl_lock::rwlock 430.2 73.9 wait/synch/mutex/innodb/buf_pool_mutex 264.5 72.7 wait/synch/rwlock/innodb/fil_space_latch 2726. 53.8 wait/synch/mutex/sql/thd::lock_query_plan 67.0 50.7 wait/synch/mutex/innodb/trx_sys_mutex 394.9 4.5 +---------------------------------------------+---------+--------+ 04

InnoDB Latching in SHOW INNODB STATUS 0 5 ---------- SEMAPHORES ---------- OS WAIT ARRAY INFO: reservation count 3569 OS WAIT ARRAY INFO: signal count 42 --Thread 5270336 has waited at./../include/buf0buf.ic line 630 for 0.00 seconds the semaphore: Mutex at 0x2a957858b8 created file buf0buf.c line 57, lock var 0 --Thread 47709792 has waited at./../include/buf0buf.ic line 630 for 0.00 seconds the semaphore: Mutex at 0x2a957858b8 created file buf0buf.c line 57, lock var 0 Mutex spin waits 508, rounds 70800, OS waits 2033 RW-shared spins 2736, rounds 84289, OS waits 279 RW-excl spins 904, rounds 94, OS waits 3607 Spin rounds per wait: 4. mutex, 30.8 RW-shared, 23.83 RW-excl 05

Some Lock Statistics in INNODB METRICS RW Locks Only; Not Mutexes Sysbench,8,64 and 52 connections 06

OS Waits When Spin Wait Failed 07

Index Tree rw_lock contention Only shows at high thread number 08

Adaptive Hash Index Starts to become problem earlier 09

Performance Considerations 0 innodb_spin_wait_delay Innodb_thread_concurrency Thread Pool Balance wasting CPU vs. cost of context switch Limit amount of threads in Innodb Kernel MySQL Enterprise, Percona Server, MariaDB 0

Innodb_thread_concurrency still has its place

2 Background Operations

Why Important 3 If it does not have to happen synchronously it should not A lot of is happening in Background! 3

Background Operations 4 Checkpointing/Flushing Page Cleaning Purging Change Buffer Merging Read-Ahead 4

Checkpointing Basics 5 Before Record can be overwritten in the Log file corresponding page must be flushed from buffer pool. 5

Flush List 6 For each page in Buffer pool the LSN corresponding to last flush is kept Flush List - list of all dirty buffer pool pages sorted by last flushed LSN 6

Checkpoint Age 7 The difference between current LSN and earliest LSN on the Flush List Checkpoint Age must not reach combined Redo Log file size for Recovery to be successful 7

Flushing Challenge 8 Flush enough not to run out of log space Do not flush too aggressively to impact performance How much can we delay? We do not know future workload Users like uniform performance 8

Main Question 9 Flush Pages from the tail of the Flush List But how many? 9

Not Completely Solved Problem 2 0 If pages can be made dirty much faster than the can be flushed, system will have huge stalls. Gets better in every Major MySQL Release 20

2 Improvements in PS 5.6 vs MySQL 5.6 2

LRU Flushing Basics 2 2 When Read Happens need clean or free page to replace Pages in the tail of LRU might not be clean Excessive LRU scans can happen Much more important page might be replaced 22

LRU Solution 2 3 Ensure pages in the LRU tail are always clean So LRU Scans can be kept short LRU Flushing by Page Cleaner does this 23

Page Cleaner(s) 2 4 Does Both Kinds of Flushing Multiple Threads available in MySQL 5.7 Significant Optimizations in MySQL 5.7 24

Performance Considerations 2 5 innodb_max_dirty_pages_pct innodb_flush_neighbors innodb_lru_scan_depth innodb_io_capacity innodb_io_capacity_max 25

Purging 2 6 Keeping up with Garbage coming from MVCC 26

Purging Does 2 7 Remove old Row Versions in Undo Space Cleanup unused Large Blobs Remove Deleted rows from Tables Remove old Index records from Indexes 27

Purge Thread(s) 2 8 One or More purge threads Innodb_purge_threads 28

May not be able to keep up 2 9 You can often insert/update rows faster then they can be purged Make sure you watch innodb_history_length Especially at high concurrency Units are Transactions Consider limiting history length innodb_max_purge_lag=000000 innodb_max_purge_lag_delay=0000 29

Change Buffer Merging 3 0 Change Buffer Merging 30

Change Buffer 3 Change Buffer is delayed work which needs to be done at some point The more records merged with single merge the better it is 3

Performance Considerations 3 2 Is background merge speed enough? Full change buffer is just overhead Innodb_io_capacity innodb_change_buffer_max_size 32

Read Ahead 3 3 How Innodb Does Read- Ahead 33

Types of Read-Ahead 3 4 Sequential Read-Ahead Random Read-Ahead Logical Read-Ahead 34

Sequential Read Ahead 3 5 Fetch the next Segment if a lot of pages are accessed from current one Default for innodb_read_ahead_threshold is 56 making it not very aggressive Does not help Fragmented tables Can watch pages removed without access to see how effective it is 35

Random Read Ahead 3 6 Disabled by Default Will fetch full extent if 3 or more pages from given extent are in buffer pool already innodb_random_read_ahead 36

Logical Read Ahead 3 7 Available in WebScaleSQL Looks at the Logical Order of Pages to be accessed for Prefetch Can speed up full table scan 0x or more

Read Ahead Configuration and Status 3 8 Configuration innodb_read_ahead_threshold innodb_random_read_ahead Status Innodb_buffer_pool_read_ahead Innodb_buffer_pool_read_ahead_evicted Innodb_buffer_pool_read_ahead_rnd 38

3 9 Bonus Material 3

Encryption 4 0 Hot Topic Nowadays MySQL and MariaDB provide different implementations Great Blog Post bit.ly/sr3r0h 40

Encryption in MySQL 4 5.7.+ Only Innodb Tablespace at this point Supports Key Rotation Supported by Percona Xtrabackup Table Rebuild Required to enable 4

Encryption in MariaDB 4 2 Available MariaDB 0..3 Options to encrypt tables, redo log, binary log, temporary files Support Multiple Keys General Log, Audit Log, Slow Log, Galera cache are still not encrypted Encrypted binlog can t be read by mysqlbinlog 42

What's New in MySQL 5.7 Innodb 4 3 Brief Summary of Most Important Changes 43

Improved to Flushing 4 4 Tuned Adaptive Flushing (again) More Efficient page cleaners Multiple page cleaner threads 44

Read Only Transactions 4 5 Treat Transaction as Read- Only until proven otherwise 45

Improved Locking 4 6 Metadata locking optimized Index Lock Contention Reduced 46

Index Building Optimized 4 7 Use Bulk Index build instead of record insertion one by one 47

Fast Temporary Tables 4 8 Do not use Dictionary for Meta Data Store in Dedicated Tablespace Optimized UNDO/REDO Logging Innodb is used for Internal Temporary Tables 48

Buffer Pool Dump/Restore 4 9 Do Buffer Pool Pool Dump/Restore by Default Specify % of hottest pages you want to preserve 49

Improved Online DDLs 5 0 Now can do Online OPTIMIZE TABLE for Innodb 50

Double Write Optimization 5 Automatically disable DoubleWrite Buffer if NVMFS is Detected 5

Transportable Partitioned Tablespaces 5 2 Move Partitioned Tables between servers in binary form 52

Online Buffer Pool Resize 5 3 Warm (not Hot) Online Innodb Buffer Pool resize 53

Faster Crash Recovery 5 4 No need to scan all.ibd files to see which have been affected 54

Undo Tablespace Truncation 5 5 Finally! Prevent forever huge undo space after runaway transaction 55

Native Partitioning for Innodb 5 6 Important having many partitions Less overhead opening table Much less Memory usage 56

General Table spaces Support 5 7 Create named tablespace Specify Tables to Use that Tablespace Only one file per tablespace for now Can assign whole tables or partitions to tablespace Can t assign indexes to different tablespaces 57

Welcome to Barracuda and CRC32 5 8 Finally Barracuda file format becomes default CRC32 Becomes default checksum format 58

Index Merge Threshold configuration 5 9 Help to prevent split-merge thrashing for some workloads ALTER TABLE t COMMENT='MERGE_THRESHOLD=40'; 59

Tuning Innodb 6 0 Most important configuration settings 60

Do not obsess with tuning 6 Only Fraction of these will be important for your specific workload 6

Tuning Innodb 6 2 innodb_buffer_pool_size innodb_buffer_pool_instances innodb_log_file_size innodb_log_buffer_size innodb_flush_log_at_trx_commit 62

Tuning Innodb 6 3 innodb_flush_method innodb_io_capacity innodb_io_capacity_max innodb_checksum_algorithm innodb_adaptive_hash_index 63

Tuning Innodb 6 4 innodb_purge_threads innodb_flush_neighbors innodb_change_buffer_max_size= innodb_flush_log_at_trx_commit innodb_stats_on_metadata 64

Tuning Innodb 6 5 innodb_max_dirty_pages_pct innodb_sync_array_size innodb_max_purge_lag innodb_max_purge_lag_delay 65

Tuning Innodb 6 6 innodb_file_per_table Innodb_thread_concurrency innodb_file_format Innodb_page_size innodb_spin_wait_delay 66

Further Reading 6 7 http://www.percona.com/blog http://dimitrik.free.fr/blog http://mysqlserverteam.com http://blog.jcole.us/ http://www.planetmysql.org 67

Thank You! 6 8 pz@percona.com https://www.linkedin.com/in/peterzaitsev https://twitter.com/peterzaitsev 68