Caching your application data with MySQL and TokuDB

Similar documents
Switching to Innodb from MyISAM. Matt Yonkovit Percona

Performance improvements in MySQL 5.5

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

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

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

Innodb Architecture and Performance Optimization

Innodb Performance Optimization

InnoDB: Status, Architecture, and Latest Enhancements

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

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

Why Choose Percona Server For MySQL? Tyler Duzan

MySQL Architecture and Components Guide

MySQL Database Scalability

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

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

RocksDB Key-Value Store Optimized For Flash

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

NoVA MySQL October Meetup. Tim Callaghan VP/Engineering, Tokutek

Why we re excited about MySQL 8

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

ScaleArc Performance Benchmarking with sysbench

Chapter 8: Working With Databases & Tables

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

How TokuDB Fractal TreeTM. Indexes Work. Bradley C. Kuszmaul. MySQL UC 2010 How Fractal Trees Work 1

MyRocks deployment at Facebook and Roadmaps. Yoshinori Matsunobu Production Engineer / MySQL Tech Lead, Facebook Feb/2018, #FOSDEM #mysqldevroom

Delegates must have a working knowledge of MariaDB or MySQL Database Administration.

MySQL Storage Engines Which Do You Use? April, 25, 2017 Sveta Smirnova

MongoDB and Mysql: Which one is a better fit for me? Room 204-2:20PM-3:10PM

Optimizing MySQL Configuration

MyRocks in MariaDB. Sergei Petrunia MariaDB Tampere Meetup June 2018

MySQL Performance Tuning 101

Mastering the art of indexing

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

Percona Server for MySQL 8.0 Walkthrough

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

MySQL 8.0 Performance: InnoDB Re-Design

Tips from the Trenches Preventing downtime for the over extended DBA. Andrew Moore Senior Remote DBA Percona Managed Services

InnoDB: What s new in 8.0

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

Replication features of 2011

MySQL Performance Improvements

Welcome to Virtual Developer Day MySQL!

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

File Structures and Indexing

InnoDB: What s new in 8.0

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

DATABASE PERFORMANCE AND INDEXES. CS121: Relational Databases Fall 2017 Lecture 11

Load Testing Tools. for Troubleshooting MySQL Concurrency Issues. May, 23, 2018 Sveta Smirnova

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

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

MySQL 5.7 For Operational DBAs an Introduction. Peter Zaitsev, CEO, Percona February 16, 2016 Percona Technical Webinars

How TokuDB Fractal TreeTM. Indexes Work. Bradley C. Kuszmaul. Guest Lecture in MIT Performance Engineering, 18 November 2010.

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

What's New in MySQL 5.7?

Here, we consider Database bottleneck as a problem and provide solution for some of common problems.

OPTIMIZING MYSQL SERVER ON SUN X64 SERVERS AND STORAGE. Luojia Chen, ISV Engineering. Sun BluePrints Online February 2008

What is MariaDB 5.5? w: e: Daniel Bartholomew Oct 2012

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

CIS 601 Graduate Seminar. Dr. Sunnie S. Chung Dhruv Patel ( ) Kalpesh Sharma ( )

There And Back Again

Upgrading Databases. without losing your data, your performance or your mind. Charity

MySQL Performance Tuning 101

Big and Fast. Anti-Caching in OLTP Systems. Justin DeBrabant

MySQL usage of web applications from 1 user to 100 million. Peter Boros RAMP conference 2013

<Insert Picture Here> Looking at Performance - What s new in MySQL Workbench 6.2

1

The Care and Feeding of a MySQL Database for Linux Adminstrators. Dave Stokes MySQL Community Manager

Analysis of Derby Performance

MySQL Replication: What's New In MySQL 5.7 and MySQL 8. Luís Soares Software Development Director MySQL Replication

Charity

MySQL Performance Tuning

A Brief Introduction of TiDB. Dongxu (Edward) Huang CTO, PingCAP

MySQL 8.0-dev Performance: Scalability & Benchmarks

1

MySQL 101. Designing effective schema for InnoDB. Yves Trudeau April 2015

The Right Read Optimization is Actually Write Optimization. Leif Walsh

Beyond Relational Databases: MongoDB, Redis & ClickHouse. Marcos Albe - Principal Support Percona

Jargons, Concepts, Scope and Systems. Key Value Stores, Document Stores, Extensible Record Stores. Overview of different scalable relational systems

Administration Naive DBMS CMPT 454 Topics. John Edgar 2

Kathleen Durant PhD Northeastern University CS Indexes

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

Writing High Performance SQL Statements. Tim Sharp July 14, 2014

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

MySQL 5.1 Past, Present and Future MySQL UC 2006 Santa Clara, CA

MySQL Performance Tuning

Mike Kania Truss

How to Stop Hating MySQL: Fixing Common Mistakes and Myths

Optimizing MySQL Configuration. Peter Zaitsev,CEO OSCON 2012, Portland,OR July 20, 2012

NVMFS: A New File System Designed Specifically to Take Advantage of Nonvolatile Memory

A Practical Guide to Migrating from Oracle to MySQL. Robin Schumacher

MySQL Database Administrator Training NIIT, Gurgaon India 31 August-10 September 2015

DATABASE SYSTEMS. Database programming in a web environment. Database System Course, 2016

High Performance Transactions in Deuteronomy

System Characteristics

Column Stores vs. Row Stores How Different Are They Really?

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

Heckaton. SQL Server's Memory Optimized OLTP Engine

Scaling Without Sharding. Baron Schwartz Percona Inc Surge 2010

Bringing code to the data: from MySQL to RocksDB for high volume searches

Percona Software & Services Update

Transcription:

Caching your application data with MySQL and TokuDB Rick Pizzi & Andrea Ponzo Lastminute.com

Who is lastminute.com group? We are a publicly traded international company, amongst the worldwide leaders in the online travel & leisure industry, and we operate a portfolio of well established european brands: lastminute.com, Bravofly, Rumbo, Volagratis and Jetcost 2

Who are Rick & Andrea? Rick 20+ years as UNIX system administrator Sr MySQL DBA at PalominoDB leading Lastminute.com Database Team since 2014 Andrea 10+ years on MySQL Sr MySQL DBA at Venere.com ( Expedia Inc.) joined Lastminute.com Database Team in 2015 3

Caching your application data with MySQL & TokuDB Agenda Overview of storage engines Cache design InnoDB vs TokuDB Cache implementation details Cache management TokuDB tuning Caveats Q&A 4

MySQL storage engines Storage engines are MySQL components that sit below the SQL layer and handle the actual I/O to/from the tablespaces. Let s have a quick look at some of the most commonly used and/or known engines: MyISAM InnoDB TokuDB RocksDB 5

MySQL storage engines: MYISAM First storage engine to come with MySQL, since 3.23 bundled with server BTREE based Very fast MyISAM drawbacks: Table level locking granularity only no row locking, hence big penalty for concurrent access No support for transactions and referential integrity No crash recovery ( table is marked as crashed anyone?) data loss happens frequently Not suitable for production use, except in very particular situations and with read only workloads 6

MySQL storage engines: INNODB very mature and full featured engine B+TREE based (improved range scans, amongst other things) reasonably fast in most cases foreign keys support fully ACID compliant crash safe has row level locking supporting a certain degree of concurrency InnoDB drawbacks: INSERT performance degrades as dataset size increases B+TREE performance suboptimal with random INSERTs (when INSERTs are not in primary key order) 7

MySQL storage engines: TOKUDB based on Fractal Tree technology (PerconaFT) better performance when inserting keys out of order uses message injection for updates when page not in memory (defers I/O to a later time) optimized for compression (although we are not leveraging it this time!) reduced I/O compared to InnoDB (also due to larger block size) SSD friendly! transactions, ACID compliant, crash safe, row level locking TokuDB drawbacks: cannot be a replacement for InnoDB in all situations (e.g. lack of foreign keys support) although mature, is not as mature as InnoDB often slower than InnoDB for read workloads 8

Mysql storage engines: ROCKSDB relatively new engine, not yet included in Percona Server (but will be soon) developed by Facebook almost production ready (Facebook uses it in production since some time already) based on LSM (Log Structured Merge) optimized for writes and compression, reduces I/O enormously very SSD friendly! RocksDB drawbacks: still very young, and under heavy development ( not yet GA ) some features not yet supported, and there are other limitations (eg. bin collation) Foreign Key and FullText Index are not supported ROW based binary logging MUST be used 9

Cache design 10

Cache design There are dozens of persistent caches out there, why use MySQL for caching? leverage existing technology (MySQL heavily used throughout the company) leverage existing knowledge (developing, deploying and maintaining) reduce cost of ownership (no need for dedicated skills on other tech) we love MySQL! 11

Cache design (cont d) We have several MySQL based cache servers used for caching different types of objects, across different applications. What we cache: data fetched by calls to external providers (where we pay by # of requests, or when it s expensive to reach the provider) temporary object storage for applications that need short lived persistence, eg. application needs to reuse previously generated data 12

Cache design: workflow CREATE TABLE `BIG_STORAGE_00` ( `HASH_ID` char(64) NOT NULL, `SERIALIZATION_TYPE` enum('java','protostuff') NOT NULL, `COMPRESSION_TYPE` enum('deflate','lz4','none','gzip') NOT NULL, `RAW_DATA` mediumblob NOT NULL, `LAST_UPDATE` datetime NOT NULL, `EXPIRE_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY `HASH_ID_IX` (`HASH_ID`), KEY `EXPIRE_DATE_IX` (`EXPIRE_DATE`) ) ENGINE=TokuDB DEFAULT CHARSET=latin1 ROW_FORMAT=TOKUDB_UNCOMPRESSED 13

Cache design: scalability In order to be able to scale out, our application caching library contains sharding capabilities. We can: shard across any number of tables on same database server shard across multiple database servers by using multiple connection pools 14

APPLICATION DNS DATABASE SCHEMA_CACHE_01 BIG_STORAGE_00 DB01 [10.10.0.1] BIG_STORAGE_01 BIG_STORAGE_02 BIG_STORAGE_03 BIG_STORAGE_04 BIG_STORAGE_05 BIG_STORAGE_06 BIG_STORAGE_07 CACHE_OBJECT SHARDING CACHE01=10.10.0.1 BIG_STORAGE_08 CACHE02=10.10.0.2 CACHE02=10.10.0.1 BIG_STORAGE_09 Based on [CACHE_KEY % 10] BIG_STORAGE_00 04 CACHE01 (cname) BIG_STORAGE_05 09 CACHE02 (cname) DB02 [10.10.0.2] SCHEMA_CACHE_01 BIG_STORAGE_00 Change cache02 DNS BIG_STORAGE_01 BIG_STORAGE_02 BIG_STORAGE LIBRARY BIG_STORAGE_03 BIG_STORAGE_04 BIG_STORAGE_05 BIG_STORAGE_06 BIG_STORAGE_07 BIG_STORAGE_08 BIG_STORAGE_09 15

Cache design: efficiency Although TokuDB is really good at compression, we decided to compress the data at the application layer; type of compression used for the payload is saved into COMPRESSION_TYPE column. Benefits: compression methods can be easily added or changed (not limited to what s available at the DB layer) reduced network bandwidth usage between application and database layer reduced CPU usage on DB server faster query response time (no compression/decompression overhead) 16

InnoDB vs TokuDB or why we chose Toku for our cache servers 17

InnoDB vs. TokuDB: benchmark details We ran some benchmarks to compare the two engines based on sysbench 0.5 using our cache table definition for the benchmarks inserting and reading random rows to/from a single partitioned table each row had a randomly variable payload between 0 and 16384 bytes each row is inserted into a random partition (partitions spanning 10 days) 18

InnoDB vs. TokuDB: why we wanted an InnoDB alternative it s known that InnoDB doesn t perform well with random primary keys we have observed InnoDB insert performance degradation when dataset becomes large in size unfortunately we initially found out that TokuDB didn t perform well either... actually, it s worse than InnoDB at inserting, when PK is really random... 19

InnoDB vs. TokuDB: INSERT benchmark 45 minutes sysbench benchmark run, 40 threads, 8kb avg blob size, 56x Intel Xeon E52660 v4 @ 2.00GHz, 2 x800g Intel SSD DC P3608 # InnoDB innodb_flush_method = O_DIRECT innodb_log_files_in_group = 2 innodb_log_file_size = 512M innodb_flush_log_at_trx_commit = 2 innodb_file_per_table = 1 innodb_buffer_pool_size = 2G innodb_file_format=barracuda innodb_write_io_threads=8 innodb_read_io_threads=8 innodb_io_capacity = 600 # TokuDB tokudb_commit_sync=off tokudb_fsync_log_period=5000 tokudb_checkpointing_period=15 tokudb_cleaner_iterations=10000 tokudb_disable_prefetching=on tokudb_directio=on tokudb_cache_size=2g tokudb_row_format=tokudb_uncompressed tokudb_empty_scan=disabled InnoDB inserted 10,707,190 rows TokuDB inserted 7,489,946 rows :( 20

InnoDB vs. TokuDB: do we really need a primary key? 21

InnoDB vs. TokuDB: INSERT benchmark, without Primary Key 45 minutes sysbench benchmark run, 40 threads, 8kb avg blob size, 56x Intel Xeon E52660 v4 @ 2.00GHz, 2 x800g Intel SSD DC P3608 # InnoDB innodb_flush_method = O_DIRECT innodb_log_files_in_group = 2 innodb_log_file_size = 512M innodb_flush_log_at_trx_commit = 2 innodb_file_per_table = 1 innodb_buffer_pool_size = 2G innodb_file_format=barracuda innodb_write_io_threads=8 innodb_read_io_threads=8 innodb_io_capacity = 600 # TokuDB tokudb_commit_sync=off tokudb_fsync_log_period=5000 tokudb_checkpointing_period=15 tokudb_cleaner_iterations=10000 tokudb_disable_prefetching=on tokudb_directio=on tokudb_cache_size=2g tokudb_row_format=tokudb_uncompressed tokudb_empty_scan=disabled InnoDB inserted 20,902,852 rows TokuDB inserted 70,302,791 rows :) 22

InnoDB vs TokuDB: more benchmarks without a primary key 2 hours sysbench benchmark, random key INSERT with 2K avg payload, workload not in memory, SSD TokuDB is able to perform 3x better than InnoDB (~45k QPS vs ~15k) it does so using less I/O! throughput is stable over time, there is no degradation INNODB TOKUDB 23

Benefits of not using a primary key not having to look up keys when inserting saves lots of read I/O TokuDB is very good at inserting rows when there is no primary key defined, much better than InnoDB 24

Cache implementation details Access from application to caches happens through a common library nicknamed Big Storage. Key facts: cache consists in key/value pairs key is always a SHA256 hash (64 bytes) very random payload is a compressed BLOB of variable size (avg size depends on cache type, ranging from 4k to 512m) number of objects varies wildly depending on cache type and retention policy 25

Cache implementation details: schema definition Here s our standard table definition for caches. Note that there is no Primary Key defined :) CREATE TABLE `BIG_STORAGE_00` ( `HASH_ID` char(64) NOT NULL, `SERIALIZATION_TYPE` enum('java','protostuff') NOT NULL, `COMPRESSION_TYPE` enum('deflate','lz4','none','gzip') NOT NULL, `RAW_DATA` mediumblob NOT NULL, `LAST_UPDATE` datetime NOT NULL, `EXPIRE_DATE` datetime NOT NULL, KEY `HASH_ID_IX` (`HASH_ID`), KEY `EXPIRE_DATE_IX` (`EXPIRE_DATE`) ) ENGINE=TokuDB DEFAULT CHARSET=latin1 ROW_FORMAT=TOKUDB_UNCOMPRESSED ( partitioning info omitted for the purpose of this slide) 26

InnoDB vs. TokuDB: real use case add object to cache* 1 hour sysbench benchmark run, 64 threads,8kb avg blob size, 56x Intel Xeon E52660 v4 @ 2.00GHz, 2 x800g Intel SSD DC P3608 # InnoDB innodb_flush_method = O_DIRECT innodb_log_files_in_group = 2 innodb_log_file_size = 512M innodb_flush_log_at_trx_commit = 2 innodb_flush_log_at_timeout=5 innodb_file_per_table = 1 innodb_buffer_pool_size = 10G innodb_file_format=barracuda innodb_write_io_threads=8 innodb_read_io_threads=8 innodb_io_capacity = 600 local s1 = sb_rand_str("#######") db_query("begin"); db_query("delete FROM BIG_STORAGE_INNO WHERE HASH_ID = SHA2('".. s1.. "', 256) AND EXPIRE_DATE > NOW()"); db_query("insert INTO BIG_STORAGE_INNO VALUES(SHA2('".. s1.. "', 256), 'PROTOSTUFF', 'GZIP', REPEAT(CHAR(FLOOR(RAND()*96)+32), FLOOR(RAND()*16384)), NOW(), DATE_ADD(NOW(), INTERVAL FLOOR(RAND()*10) +1 day))") db_query("commit"); # TokuDB tokudb_commit_sync=off tokudb_fsync_log_period=5000 tokudb_checkpointing_period=15 tokudb_cleaner_iterations=10000 tokudb_disable_prefetching=on tokudb_directio=on tokudb_cache_size=10g tokudb_row_format=tokudb_uncompressed tokudb_empty_scan=disabled tokudb_enable_partial_eviction=on tokudb_read_block_size=16384 (*) InnoDB purge thread lags terribly behind in this test 27

InnoDB vs. TokuDB: real use case fetch object from cache 1 hour sysbench benchmark run, 64 threads,8kb avg blob size, 56x Intel Xeon E52660 v4 @ 2.00GHz, 2 x800g Intel SSD DC P3608 # InnoDB innodb_flush_method = O_DIRECT innodb_log_files_in_group = 2 innodb_log_file_size = 512M innodb_flush_log_at_trx_commit = 2 innodb_flush_log_at_timeout=5 innodb_file_per_table = 1 innodb_buffer_pool_size = 10G innodb_file_format=barracuda innodb_write_io_threads=8 innodb_read_io_threads=8 innodb_io_capacity = 600 (after filling table with approx 7M rows as per previous benchmark): local s1 = sb_rand_str("#######") db_query("select RAW_DATA FROM BIG_STORAGE_TOKU WHERE HASH_ID = SHA2('".. s1.. "', 256) AND EXPIRE_DATE > NOW()"); # TokuDB tokudb_commit_sync=off tokudb_fsync_log_period=5000 tokudb_checkpointing_period=15 tokudb_cleaner_iterations=10000 tokudb_disable_prefetching=on tokudb_directio=on tokudb_cache_size=10g tokudb_row_format=tokudb_uncompressed tokudb_empty_scan=disabled tokudb_enable_partial_eviction=on tokudb_read_block_size=16384 28

Cache management 29

Cache management Cache management is done through MySQL range partitioning. Normally partitioned by day, partitions are created in advance, and every night we drop previous day s partition to keep cache footprint small. Partitions are dropped at night when traffic is low, although TokuDB is pretty good at doing that in background, without noticeable impact. For special caches that have very short expiration and high volumes of traffic, we partition by the hour and drop old partitions hourly. 30

Cache management (cont d) A partition management script is needed to create new partitions and drop old ones. PalominoDB created a small yet powerful perl script for partition management as part of their data management tools. It s called pdbparted and can be found on GitHub at this link: https://github.com/palominodb/palominodbpubliccoderepository/blob/master/tools/data_mgmt/src/pdbparted We are using pdbparted to handle the whole partition management across our clusters, including caches, since many years now. 31

Cache management (cont d) Example usage of pdbparted Adding partitions for next 31 days: /usr/local/dba/sbin/pdbparted add interval d +31d h=10.10.10.10,d=thiscache,t=big_storage_00,u=partman,p=****** Dropping yesterday s partition: /usr/local/dba/sbin/pdbparted drop 0d h=10.10.10.10,d=thiscache,t=big_storage_00,u=partman,p=****** 32

TokuDB tuning 33

TokuDB tuning Here is the relevant part of the MySQL configuration we use in production on SSD based servers... tokudb_commit_sync=off tokudb_fsync_log_period=5000 tokudb_row_format=tokudb_uncompressed tokudb_checkpointing_period=15 tokudb_disable_prefetching=on tokudb_cleaner_iterations=10000 tokudb_enable_partial_eviction=on tokudb_read_block_size=16384 34

TokuDB tuning: memory and I/O access Rule of thumb for Toku memory and I/O: keep the defaults as per Percona recommendation :) TokuDB is very happy when Toku files can be cached by the O.S. cache will default to 50% of memory that will be used for FT cachetable, remaining memory will be used to map in memory Toku data and indexes for faster access a small cache size (e.g. 1G) will seriously penalize TokuDB for SELECTs (creates cache access contention) 35

TokuDB tuning: I/O flushing Since our cache data can be rebuilt in case of a crash, we do not enforce durability and are more interested in performance and overall response time. Hence: (similar to InnoDB innodb_flush_log_at_trx_commit=2 ) tokudb_fsync_log_period=5000: redo log is flushed to disk every 5 seconds (in case of crash lose last 5 seconds of data, but we do not really care, could be set higher) tokudb_commit_sync=off 36

TokuDB tuning: checkpointing TokuDB checkpointing will impact your performance (QPS) by introducing a lot of variance if left to the default of 60 seconds or set higher. We keep it running continuously by setting tokudb_checkpointing_period=15 Continuous checkpointing will yield a more homogeneous response time and QPS rate 37

TokuDB tuning: block size There are two variables that control size of nodes in PerconaFT: tokudb_block_size (default 4M, size of intermediate FT nodes) tokudb_read_block_size (default 64K, size of basement FT nodes) Defaults are meant for old spinning disks, not really proper for SSD. a 16K value for tokudb_read_block_size brought us big performance gain both for read and write on SSD based server best thing is to experiment (but don t set cache memory too low) 38

Caveats when using TokuDB in production 39

TokuDB has many moving parts... Unlike InnoDB, there are many moving parts in TokuDB that if tweaked can have an huge impact on your workload. Most notably ones listed below: tokudb_cache_size tokudb_checkpointing_period tokudb_cleaner_iterations tokudb_cleaner_period tokudb_fsync_log_period (if tokudb_commit_sync OFF) tokudb_block_size tokudb_read_block_size tokudb_fanout 40

Beware of important TokuDB performance bugs! https://tokutek.atlassian.net/browse/ft724 Implement tree map file block allocation stategy https://tokutek.atlassian.net/browse/db1033 TokuDB ::info uses bad/lengthy function to provide table status* https://bugs.launchpad.net/perconaserver/+bug/1671152 tokudb does not use index even if cardinality is good* Bugs fixed in: Percona Server release 5.6.3581.0 Percona Server release 5.7.1712 * reported by us 41

Beware of unresolved MySQL optimizer bugs Statistics for partitioned tables in MySQL are only computed on largest partition (see https://bugs.mysql.com/bug.php?id=44059). If largest partition is in the past, where all rows have EXPIRE_DATE < NOW(), we are in trouble as both indexes (on HASH_ID and EXPIRE_DATE) have same cost and the optimizer can randomly pick the wrong one and scan all partitions. Workaround: make sure the index on HASH_ID comes *before* the one on EXPIRE_DATE to avoid production downtime! See: https://bugs.mysql.com/bug.php?id=85126 In any case don t keep stale partitions around drop them! 42

Q&A

Let s keep in touch riccardo.pizzi@lastminute.com andrea.ponzo@lastminute.com https://mysqlnoob.blogspot.com [ Rick s blog ] 44

THANKS www.lastminutegroup.com