Query Optimizer MySQL vs. PostgreSQL

Similar documents
Query Optimizer MySQL vs. PostgreSQL

Bloom Filters DOAG Webinar, 12 August 2016 Christian Antognini Senior Principal Consultant

Adaptive

Identifying Performance Problems in a Multitenant Environment

Oracle Database 18c New Performance Features

Designing for Performance: Database Related Worst Practices ITOUG Tech Day, 11 November 2016, Milano (I) Christian Antognini

Oracle Database New Performance Features

Oracle In-Memory & Data Warehouse: The Perfect Combination?

Die Wundertüte DBMS_STATS: Überraschungen in der Praxis

Pitfalls & Surprises with DBMS_STATS: How to Solve Them


Data Vault Partitioning Strategies. Dani Schnider, Trivadis AG DOAG Conference, 23 November 2017

How Well Do Relational Database Engines Support

Online Operations in Oracle 12.2

Get Groovy with ODI Trivadis

Application Containers an Introduction

Application Containers an Introduction

Analytic Views: Use Cases in Data Warehouse. Dani Schnider, Trivadis AG DOAG Conference, 21 November 2017

Domain Services Clusters Centralized Management & Storage for an Oracle Cluster Environment Markus Flechtner

Advanced Oracle Performance Troubleshooting. Query Transformations Randolf Geist

Independent consultant. Oracle ACE Director. Member of OakTable Network. Available for consulting In-house workshops. Performance Troubleshooting

Independent consultant. Oracle ACE Director. Member of OakTable Network. Available for consulting In-house workshops. Performance Troubleshooting

Pimping up Industry Devices with Rasperry Pi, Vert.x und Java 8

ORACLE TRAINING CURRICULUM. Relational Databases and Relational Database Management Systems

Recovery without Backup. All Data Lost?

MANAGING DATA(BASES) USING SQL (NON-PROCEDURAL SQL, X401.9)

Application Containers an Introduction

Database Sharding with Oracle RDBMS

Partitionierungsstrategien für Data Vault. Dani Schnider, Trivadis AG DOAG Konferenz, 23. November 2017

7. Query Processing and Optimization

How Autonomous is the Oracle Autonomous Data Warehouse?

Edition-Based Redefinition

MySQL for Developers Ed 3

Querying Data with Transact SQL

Interpreting Explain Plan Output. John Mullins

Backup Methods from Practice

Empfehlungen vom BigData Admin

PostgreSQL Introduction for Oracle DBAs

WELCOME. Unterstützung von Tuning- Maßnahmen mit Hilfe von Capacity Management. DOAG SIG Database

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

MySQL for Developers Ed 3

Object-Relational Mapping Tools let s talk to each other!

Oracle Database 11gR2 Optimizer Insights

20461: Querying Microsoft SQL Server 2014 Databases

Migrating to 12c: 300 DBs in 300 days.

Service discovery in Kubernetes with Fabric8

Scripting OBIEE Is UDML and XML all you need?

Oracle Database: Introduction to SQL Ed 2

Data Replication With Oracle GoldenGate Looking Behind The Scenes Robert Bialek Principal Consultant Partner

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

Oracle Developer Track Course Contents. Mr. Sandeep M Shinde. Oracle Application Techno-Functional Consultant

Microservices with Kafka Ecosystem. Guido Schmutz

MySQL Query Tuning 101. Sveta Smirnova, Alexander Rubin April, 16, 2015

Advanced Oracle SQL Tuning v3.0 by Tanel Poder

Answer: Reduce the amount of work Oracle needs to do to return the desired result.

Find All Tables Containing Column With Specified Name Oracle

Cloud Acceleration. Performance comparison of Cloud vendors. Tobias Deml DOAG2017

Copyright 2016 Ramez Elmasri and Shamkant B. Navathe

Oracle Syllabus Course code-r10605 SQL

Carnegie Mellon Univ. Dept. of Computer Science /615 - DB Applications. Administrivia. Administrivia. Faloutsos/Pavlo CMU /615

Course Modules for MCSA: SQL Server 2016 Database Development Training & Certification Course:

Introduction to MySQL NDB Cluster. Yves Trudeau Ph. D. Percona Live DC/January 2012

Querying Microsoft SQL Server 2008/2012

REALTIME WEB APPLICATIONS WITH ORACLE APEX

COURSE OUTLINE: Querying Microsoft SQL Server

Troubleshooting Oracle Performance

The Microsoft Big Data architecture approach

CSE 530A. Query Planning. Washington University Fall 2013

Oracle Compare Two Database Tables Sql Query Join

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

DB2 UDB: Application Programming

Querying Microsoft SQL Server (461)

MySQL for Beginners Ed 3

Oracle Database 11g: SQL Tuning Workshop

20761 Querying Data with Transact SQL

CSE 544 Principles of Database Management Systems. Magdalena Balazinska Fall 2007 Lecture 9 - Query optimization

MariaDB Optimizer. Current state, comparison with other branches, development plans

When should an index be used?

PostgreSQL to MySQL A DBA's Perspective. Patrick

1 Writing Basic SQL SELECT Statements 2 Restricting and Sorting Data

Database Rolling Upgrade with Transient Logical Standby Database DOAG Day High Availability Robert Bialek Principal Consultant

COURSE OUTLINE MOC 20461: QUERYING MICROSOFT SQL SERVER 2014

Oracle SQL & PL SQL Course

CS317 File and Database Systems

MySQL 8.0 What s New in the Optimizer

Course Details Duration: 3 days Starting time: 9.00 am Finishing time: 4.30 pm Lunch and refreshments are provided.

Querying Microsoft SQL Server 2012/2014

Querying Data with Transact-SQL

AVANTUS TRAINING PTE LTD

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

Exadata Database Machine Resource Management teile und herrsche!

SQL Server 2014 Highlights der wichtigsten Neuerungen In-Memory OLTP (Hekaton)

Oracle SQL Tuning for Developers Workshop Student Guide - Volume I

D B M G Data Base and Data Mining Group of Politecnico di Torino

MTA Database Administrator Fundamentals Course

Manual Trigger Sql Server 2008 Update Inserted Rows

MySQL Database Scalability

DB2 SQL Tuning Tips for z/os Developers

Querying Microsoft SQL Server

Querying Data with Transact SQL Microsoft Official Curriculum (MOC 20761)

Transcription:

Percona Live, Frankfurt (DE), 7 November 2018 Christian Antognini @ChrisAntognini antognini.ch/blog BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENEVA HAMBURG COPENHAGEN LAUSANNE MUNICH STUTTGART VIENNA ZURICH

@ChrisAntognini Senior principal consultant, trainer and partner at Trivadis christian.antognini@trivadis.com http://antognini.ch Focus: get the most out of database engines Logical and physical database design Query optimizer Application performance management Author of Troubleshooting Oracle Performance (Apress, 2008/14) OakTable Network, Oracle ACE Director 2 2018-11-07

Agenda 1. Introduction 2. Controlling the Query Optimizer 3. Statistics about Data 4. Data Dictionary Metadata 5. Single-Table Access Paths 6. Joins and Sub-queries 7. Conclusion 8. References 3 2018-11-07

Introduction 4 2018-11-07

Compared Products MySQL Community Server 8.0.13 Release date: 10 October 2018 PostgreSQL 11.0 Release date: 18 October 2018 Only the InnoDB engine is covered 5 2018-11-07

Disclaimer No performance tests were performed No comparison between the execution plans generated by the two query optimizers were performed To compare and to evaluate the two query optimizers only the availability of key features and the ability of the query optimizer to correctly recognize common data patterns was considered 6 2018-11-07

Inputs Considered to Produce an Execution Plan SQL statement Configuration Metadata Object statistics Query Optimizer Runtime information? Others? Execution plan 7 2018-11-07

How Is Data Stored? InnoDB uses a B-tree index Heap table 8 2018-11-07

Controlling the Query Optimizer 9 2018-11-07

Configuration Three system variables control the behavior of the query optimizer Limit the number of evaluated plans (2) Control specific features (1 parameter for 21 features) The default (system) values can be overwritten at session and statement level 45 parameters control the behavior of the query optimizer Limit the number of evaluated plans (2) Control specific features (25) Control the genetic optimizer (7) The default (system) values can be overwritten at session level 10 2018-11-07

Configuration Cost Model A cost model database contains cost estimate information for a number of operations (8) The default values can be changed at the system level only A number of parameters provide cost estimate information for a number of operations (11) The default (system) values can be overwritten at session level 11 2018-11-07

Hints hints_modifiers.sql hints_index.sql hints_optimizer.sql SELECT statement modifiers (4) Impact statement syntax (Available in EDB Advanced Server) Index hints (3) Impact statement syntax Cause error when index missing Optimizer hints (23) Similar to Oracle Database hints Global, query block and object-level Cause warning when syntax is wrong 12 2018-11-07

Statistics about Data 13 2018-11-07

Gathering Statistics The ANALYZE statement gathers and, by default, stores statistics in the data dictionary By default, an asynchronous automatic statistics recalculation takes place The ANALYZE statement gathers and stores statistics in the data dictionary By default, the autovacuum daemon recalculate statistics of modified tables Persistent (default) as well as nonpersistent statistics exist 14 2018-11-07

Table Statistics statistics.sql Clustered index size (pages) Number of rows Table size (pages) Number of rows Number of pages marked all-visible 15 2018-11-07

Column Statistics statistics.sql Data distribution (optional) Including fraction of entries that are null Fraction of values that are null Average column width (bytes) Number of distinct values Statistical correlation between physical and logical row ordering Data distribution (optional) Most common values and their frequency (optional) 16 2018-11-07

Cross-Column Statistics statistics.sql Functional dependencies (optional) Number of distinct values (optional) 17 2018-11-07

Index Statistics statistics.sql Index size (pages) Number of leaf pages Index size (pages) Number of indexed rows Number of distinct keys Several values are stored E.g. for index a,b,c a, a,b, a,b,c, a,b,c,pk 18 2018-11-07

Data Dictionary Metadata 20 2018-11-07

Constraints Primary Key and Unique Key constraints_pk_uk.sql Because of the clustered index, PK has precedence over other indexes Predicates based on UK take precedence over non-uk indexes Equality predicates based on PK/UK are probed No particular precedence is given to predicates based on PK/UK Statistical correlation between physical and logical row ordering determines which index is used 21 2018-11-07

Constraints Foreign Key constraints_fk.sql No usage of FK to avoid loss-less joins has been observed No usage of FK to avoid loss-less joins has been observed 22 2018-11-07

Constraints NOT NULL constraints_not_null.sql NOT NULL constraints are used to verify the validity of predicates By default the usage of NOT NULL constraints to verify the validity of predicates is enabled for specific cases only constraint_exclusion = partition Statistics are used instead 23 2018-11-07

Constraints CHECK constraints_check.sql No usage of CHECK constraints to verify the validity of predicates has been observed Statistics are used instead By default the usage of CHECK constraints to verify the validity of predicates is enabled for specific cases only constraint_exclusion = partition Statistics are used instead 24 2018-11-07

Single-Table Access Paths 25 2018-11-07

Available Index Types Supported index types B-tree (default) R-tree (for spatial indexes) Indexes can be created on expressions and, for string columns, on the leading part of column values B-tree indexes store NULL values Support for invisible indexes Supported index types B-tree (default) indexes_expression.sql indexes_invisible.sql indexes_non_key.sql indexes_nulls.sql indexes_partial.sql indexes_prefix.sql Hash, GiST, SP-GiST, GIN, BRIN Indexes can be created on expressions as well as on a subset of the rows B-tree indexes store NULL values and support non-key columns 26 2018-11-07

Optimization of ORDER BY, MIN and MAX indexes_order_by.sql indexes_min_max.sql B-tree indexes can be used to optimize ORDER BY, MIN and MAX Index scans can be performed in both directions Keys are stored according to the specified order NULLS FIRST/LAST not supported B-tree indexes can be used to optimize ORDER BY, MIN and MAX Index scans can be performed in both directions Keys are stored according to the specified order NULLS FIRST/LAST supported 27 2018-11-07

Merging Indexes indexes_merge.sql Two or more B-tree indexes can be merged at runtime to evaluate multiple predicates combined with AND or OR When appropriate, B-tree indexes are dynamically converted to bitmaps in memory One utilization of this feature is to merge indexes to evaluate multiple predicates combined with AND or OR 28 2018-11-07

(Declarative) Partitioning Available methods: Multi-column range and list Single-column hash Sub-partitioning by hash Only local indexes (incl. PK/UK) FK not supported Partition pruning Available methods: Multi-column range and hash Single-column list Sub-partitioning by range/hash/list Only local indexes (incl. PK/UK) FK cannot reference a partitioned table Partition pruning partitioning_hash.sql partitioning_list.sql partitioning_range.sql partitioning_sub.sql 29 2018-11-07

Joins and Sub-queries 30 2018-11-07

Available Kind of Joins Available join methods (Block) Nested loops join (Hash join available in MariaDB) Bushy plans are considered only when no other possibility exists Full outer joins are not supported Available join methods Nested loops join Hash join Merge join Bushy plans are considered Full outer joins are supported and optimized with hash/merge joins joins_methods.sql joins_order.sql joins_syntax.sql joins_bushy.sql 31 2018-11-07

Sub-queries in WHERE Clause joins_subqueries.sql Simple sub-queries that are not correctly optimized were observed For optimal performance a rewrite might be necessary Problematic cases observed Correlated NOT IN Correlated (NOT) EXISTS Simple sub-queries that are not correctly optimized were observed For optimal performance a rewrite might be necessary Problematic case observed Correlated (NOT) IN Uncorrelated NOT IN 32 2018-11-07

Conclusion 35 2018-11-07

Summary Good configuration capabilities Hints available Fairly good object statistics Metadata only partially used Good indexing capabilities Average partition capabilities Limited join capabilities Good configuration capabilities Hints missing Very good object statistics Metadata only partially used Good indexing capabilities Average partition capabilities Good join capabilities 36 2018-11-07

Core Messages The query optimizer of PostgreSQL is more advanced than the one of MySQL In general, the query optimizer of MySQL can only do a good job with transactional loads; the one of PostgreSQL is also suitable for analytical loads 37 2018-11-07

References 38 2018-11-07

References (1) MySQL 8.0 Reference Manual The Unofficial MySQL 8.0 Optimizer Guide MySQL Internals PostgreSQL 11 Documentation Planner source code readme PostgreSQL Wiki MySQL Server Blog 39 2018-11-07

References (2) The verification scripts I wrote are available on GitHub How Well a Query Optimizer Handles Subqueries? 40 2018-11-07

Q&A 41 2018-11-07