SlideShare a Scribd company logo
Secrets of Best MySQL
Optimization
presented by
Sonali Minocha
OSSCube
Who Am I?
Why Tune a Database?
Who Tunes?
What is Tuned?
How much tuning is enough?
MySQL Performance Tuning - GNUnify 2010
MySQL Performance Tuning - GNUnify 2010
Application Development
(Optimizing Queries)
MySQL Performance Tuning - GNUnify 2010
Index Optimizations
MySQL Performance Tuning - GNUnify 2010
MySQL Performance Tuning - GNUnify 2010
MySQL Performance Tuning - GNUnify 2010
EXPLAIN Types
system

The table has only one row

const

At the most one matching row, treated as a
constant

eq_ref

One row per row from previous tables

ref

Several rows with matching index value

ref_or_null

Like ref, plus NULL values

index_merge

Several index searches are merged

unique_subquery

Same as ref for some subqueries

index_subquery

As above for non-unique indexes

range

A range index scan

index

The whole index is scanned

ALL

A full table scan
EXPLAIN Extra
Using index

The result is created straight from the index

Using where

Not all rows are used in the result

Distinct

Only a single row is read per row combination

Not exists

A LEFT JOIN missing rows optimization is
used

Using filesort

An extra row sorting step is done

Using temporary

A temporary table is used

Range checked
for each record

The read type is optimized individually for
each combination of rows from the previous
tables
Optimizer Hints
STRAIGHT_JOIN

Forces the optimizer to join the tables in the
given order

SQL_BIG_RESULTS

Together with GROUP BY or DISTINCT
tells the server to use disk-based temp
tables

SQL_BUFFER_RESULTS Tells the server to use a temp table, thus
releasing locks early (for table-locks)
USE INDEX

Hints to the optimizer to use the given
index

FORCE INDEX

Forces the optimizer to use the index (if
possible)

IGNORE INDEX

Forces the optimizer not the use the index
Selecting Queries to Optimize
• The slow query log
– Logs all queries that take longer than
long_query_time
– Can also log all queries that don’t use indexes
with
--log-queries-not-using-indexes
– To log slow administrative commands use
--log-slow-admin-statements
– To analyze the contents of the slow log use
mysqldumpslow
• The general query log can be use to analyze:
– Reads vs. writes
– Simple queries vs. complex queries
– etc
Database Designing
(Optimizing Schemas)
Normalization
Table Optimizations
Choosing Best Suited Storage Engine

• Understanding benefits and drawbacks of
each storage engine is very important while
designing application.
• Different storage engine has different index
capability ,application need should be kept
in mind while choosing storage engine
MyISAM-Specific Optimizations
InnoDB-Specific Optimizations
• InnoDB uses clustered indexes
– The length of the PRIMARY KEY is extremely
important

• The rows are always dynamic
– Using VARCHAR instead of CHAR is almost always
better

• Maintenance operations needed after
– Many UPDATE/DELETE operations
• The pages can become underfilled
Monitoring Threads in MySQL
MEMORY-Specific Optimizations
Optimizing the Server
Performance Monitoring
Tuning MySQL Parameters
• Some MySQL options can be changed online
• The dynamic options are either
– SESSION specific
• Changing the value will only affect the current
connection

– GLOBAL
• Changing the value will affect the whole server

– Both
• When changing the value SESSION/GLOBAL
should be specified
• Online changes are not persistant over a
server restart
– The configuration files have to be changed as well

• The current values of all options can be found
with
SHOW SESSION/GLOBAL VARIABLES
Status Variables
SQL/Parser Model
Client1

Client2

ClientN

MySQL Server
Connection Thread Pool

Query Cache
Parser

Query

Optimizer

Storage Engines
101101

 InnoDB
 MyISAM
 MERGE
 MEMORY
 Federated
 ARCHIVE
 NDBCluster
Query Cache
• Stores SELECT queries and their results
• Purpose: improve performance for
frequently requested data
• The data in the query cache is invalidated as
soon as a modification is done in the table
• Controlled with the query_cache_size
variable
• The Qcache_% status variables help
monitoring the cache
– The utilisation ratio: Qcache_hits vs.
Com_select

• The query cache can be emptied with
RESET QUERY CACHE
Some Thread Specific Options
• read_buffer_size (default 128Kb) and
read_rnd_buffer_size (default 256Kb)
– Size of cache used for table scanning
– Not equivalent to block size
• The database is not divided into blocks but directly into
records
– Increase if you do many sequential scans
• sort_buffer_size (default 2Mb)
– Size of the GROUP BY / ORDER BY cache
– If more memory is needed it will be taken from the disk
• tmp_table_size (default 32Mb)
– Limit after which temporary tables will not be MEMORYs
anymore, but MyISAM tables
Some Global Options
• table_cache (default 64)
– Cache for storing open table handlers
– Increase this if Opened_tables is high

• thread_cache (default 0)
– Number of threads to keep for reuse
– Increase if threads_created is high
– Not useful if the client uses connection pooling
• max_connections (default 100)
– The maximum allowed number of simultaneous
connections
– Very important for tuning thread specific memory
areas
– Each connection uses at least thread_stack of
memory
MyISAM Global Options
• key_buffer_size (default 8Mb)
– Cache for storing indices
– Increase this to get better index handling
– Miss ratio
(key_reads/key_read_requests) should
be very low, at least < 0.03 (often < 0.01 is
desirable)

• Row caching is handled by the OS
MyISAM Thread-Specific Options
• myisam_sort_buffer_size (default
8Mb)
– Used when sorting indexes during
REPAIR/ALTER TABLE

• myisam_repair_threads (default 1)
– Used for bulk import and repairing
– Allows for repairing indexes in multiple threads

• myisam_max_sort_file_size
– The max size of the file used while re-creating
indexes
InnoDB-Specific Optimization
• innodb_buffer_pool_size (default
8Mb)
– The memory buffer InnoDB uses to cache both
data and indexes
– The bigger you set this the less disk i/o is
needed
– Can be set very high (up to 80% on a dedicated
system)
• innodb_flush_log_at_trx_commit
(default 1)
– 0 writes and sync’s once per second (not ACID)
– 1 forces sync to disk after every commit
– 2 write to disk every commit but only sync’s about
once per second
InnoDB-Specific
Optimization
• innodb_log_buffer_size (default
1Mb)
– Larger values allows for larger transactions to be
logged in memory
– Sensible values range from 1M to 8M

• innodb_log_file_size (default 5Mb)
– Size of each InnoDB redo log file
– Can be set up to buffer_pool_size
QnA
Thank you for your time and attention

www.osscube.com

For more information, please feel free to drop in a line to
sonali@osscube.com or visit http://www.osscube.com

More Related Content

PDF
Performance Tuning Best Practices
PDF
MySQL Tuning
PDF
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
PDF
MySQL 5.6 Performance
PDF
MySQL Performance Tuning Variables
PPT
MySQL Performance Tuning at COSCUP 2014
PPTX
My sql performance tuning course
PPTX
Configuring Sage 500 for Performance
Performance Tuning Best Practices
MySQL Tuning
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
MySQL 5.6 Performance
MySQL Performance Tuning Variables
MySQL Performance Tuning at COSCUP 2014
My sql performance tuning course
Configuring Sage 500 for Performance

What's hot (20)

PDF
MySQL Enterprise Backup (MEB)
PPTX
High performance and high availability proxies for MySQL
PDF
The InnoDB Storage Engine for MySQL
PDF
Barcelona mysqlnd qc
PPTX
PostgreSQL Hangout Parameter Tuning
PPT
Understanding MySql locking issues
PDF
Percona Xtrabackup - Highly Efficient Backups
PDF
Technical Introduction to PostgreSQL and PPAS
PDF
Optimizing MySQL for Cascade Server
PDF
InnoDB Performance Optimisation
PDF
Mysql 57-upcoming-changes
PDF
MySQL Performance Metrics that Matter
PPTX
MyDUMPER : Faster logical backups and restores
PDF
Galera cluster for high availability
PDF
Parallel Replication in MySQL and MariaDB
PDF
Tool it Up! - Session #3 - MySQL
PPT
MySQL HA Percona cluster @ MySQL meetup Mumbai
PPTX
Powering GIS Application with PostgreSQL and Postgres Plus
PDF
Countdown to PostgreSQL v9.5 - Foriegn Tables can be part of Inheritance Tree
PDF
MySQL 5.6 - Operations and Diagnostics Improvements
MySQL Enterprise Backup (MEB)
High performance and high availability proxies for MySQL
The InnoDB Storage Engine for MySQL
Barcelona mysqlnd qc
PostgreSQL Hangout Parameter Tuning
Understanding MySql locking issues
Percona Xtrabackup - Highly Efficient Backups
Technical Introduction to PostgreSQL and PPAS
Optimizing MySQL for Cascade Server
InnoDB Performance Optimisation
Mysql 57-upcoming-changes
MySQL Performance Metrics that Matter
MyDUMPER : Faster logical backups and restores
Galera cluster for high availability
Parallel Replication in MySQL and MariaDB
Tool it Up! - Session #3 - MySQL
MySQL HA Percona cluster @ MySQL meetup Mumbai
Powering GIS Application with PostgreSQL and Postgres Plus
Countdown to PostgreSQL v9.5 - Foriegn Tables can be part of Inheritance Tree
MySQL 5.6 - Operations and Diagnostics Improvements
Ad

Similar to MySQL Performance Tuning - GNUnify 2010 (20)

PPT
MySQL Performance Secrets
PDF
16 MySQL Optimization #burningkeyboards
PDF
MySQL Server Settings Tuning
KEY
DPC Tutorial
PDF
Highload Perf Tuning
ODP
MySQL Scaling Presentation
ODP
Mysql For Developers
PPS
MySQL Optimization from a Developer's point of view
DOCX
Performence tuning
PDF
Practical my sql performance optimization
PDF
Loadays MySQL
KEY
Tek tutorial
PDF
MySQL Query Optimization.
ODP
Performance Tuning
PPTX
Оптимизация MySQL. Что должен знать каждый разработчик
PPT
jacobs_tuuri_performance
PDF
MySQL 5.5&5.6 new features summary
PPT
Mysql Optimization
PDF
An introduction to mysql Performance Optimization (2008)
MySQL Performance Secrets
16 MySQL Optimization #burningkeyboards
MySQL Server Settings Tuning
DPC Tutorial
Highload Perf Tuning
MySQL Scaling Presentation
Mysql For Developers
MySQL Optimization from a Developer's point of view
Performence tuning
Practical my sql performance optimization
Loadays MySQL
Tek tutorial
MySQL Query Optimization.
Performance Tuning
Оптимизация MySQL. Что должен знать каждый разработчик
jacobs_tuuri_performance
MySQL 5.5&5.6 new features summary
Mysql Optimization
An introduction to mysql Performance Optimization (2008)
Ad

More from OSSCube (20)

PPTX
High Availability Using MySQL Group Replication
PPTX
Accelerate Your Digital Transformation Journey with Pimcore
PPTX
Migrating Legacy Applications to AWS Cloud: Strategies and Challenges
PPTX
Why Does Omnichannel Experience Matter to Your Customers
PPTX
Using MySQL Fabric for High Availability and Scaling Out
PPTX
Webinar: Five Ways a Technology Refresh Strategy Can Help Make Your Digital T...
PPTX
Cutting Through the Disruption
PPTX
Legacy to industry leader: a modernization case study
PPTX
Marketing and Sales together at last
PPTX
Using pim to maximize revenue and improve customer satisfaction
PPTX
Talend for the Enterprise
PPTX
Ahead of the Curve
PPTX
Non functional requirements. do we really care…?
PPTX
Learning from experience: Collaborative Journey towards CMMI
PPTX
Exploiting JXL using Selenium
PPTX
Introduction to AWS
PPTX
Maria DB Galera Cluster for High Availability
PDF
Talend Open Studio Introduction - OSSCamp 2014
PDF
Performance Testing Session - OSSCamp 2014
PDF
Job Queue Presentation - OSSCamp 2014
High Availability Using MySQL Group Replication
Accelerate Your Digital Transformation Journey with Pimcore
Migrating Legacy Applications to AWS Cloud: Strategies and Challenges
Why Does Omnichannel Experience Matter to Your Customers
Using MySQL Fabric for High Availability and Scaling Out
Webinar: Five Ways a Technology Refresh Strategy Can Help Make Your Digital T...
Cutting Through the Disruption
Legacy to industry leader: a modernization case study
Marketing and Sales together at last
Using pim to maximize revenue and improve customer satisfaction
Talend for the Enterprise
Ahead of the Curve
Non functional requirements. do we really care…?
Learning from experience: Collaborative Journey towards CMMI
Exploiting JXL using Selenium
Introduction to AWS
Maria DB Galera Cluster for High Availability
Talend Open Studio Introduction - OSSCamp 2014
Performance Testing Session - OSSCamp 2014
Job Queue Presentation - OSSCamp 2014

Recently uploaded (20)

PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Cloud computing and distributed systems.
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
NewMind AI Weekly Chronicles - August'25 Week I
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Chapter 3 Spatial Domain Image Processing.pdf
Machine learning based COVID-19 study performance prediction
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Diabetes mellitus diagnosis method based random forest with bat algorithm
Cloud computing and distributed systems.
“AI and Expert System Decision Support & Business Intelligence Systems”
Digital-Transformation-Roadmap-for-Companies.pptx
Network Security Unit 5.pdf for BCA BBA.
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Encapsulation_ Review paper, used for researhc scholars
Spectral efficient network and resource selection model in 5G networks
CIFDAQ's Market Insight: SEC Turns Pro Crypto
NewMind AI Weekly Chronicles - August'25 Week I

MySQL Performance Tuning - GNUnify 2010

  • 1. Secrets of Best MySQL Optimization presented by Sonali Minocha OSSCube
  • 3. Why Tune a Database?
  • 6. How much tuning is enough?
  • 15. EXPLAIN Types system The table has only one row const At the most one matching row, treated as a constant eq_ref One row per row from previous tables ref Several rows with matching index value ref_or_null Like ref, plus NULL values index_merge Several index searches are merged unique_subquery Same as ref for some subqueries index_subquery As above for non-unique indexes range A range index scan index The whole index is scanned ALL A full table scan
  • 16. EXPLAIN Extra Using index The result is created straight from the index Using where Not all rows are used in the result Distinct Only a single row is read per row combination Not exists A LEFT JOIN missing rows optimization is used Using filesort An extra row sorting step is done Using temporary A temporary table is used Range checked for each record The read type is optimized individually for each combination of rows from the previous tables
  • 17. Optimizer Hints STRAIGHT_JOIN Forces the optimizer to join the tables in the given order SQL_BIG_RESULTS Together with GROUP BY or DISTINCT tells the server to use disk-based temp tables SQL_BUFFER_RESULTS Tells the server to use a temp table, thus releasing locks early (for table-locks) USE INDEX Hints to the optimizer to use the given index FORCE INDEX Forces the optimizer to use the index (if possible) IGNORE INDEX Forces the optimizer not the use the index
  • 18. Selecting Queries to Optimize • The slow query log – Logs all queries that take longer than long_query_time – Can also log all queries that don’t use indexes with --log-queries-not-using-indexes – To log slow administrative commands use --log-slow-admin-statements – To analyze the contents of the slow log use mysqldumpslow
  • 19. • The general query log can be use to analyze: – Reads vs. writes – Simple queries vs. complex queries – etc
  • 23. Choosing Best Suited Storage Engine • Understanding benefits and drawbacks of each storage engine is very important while designing application. • Different storage engine has different index capability ,application need should be kept in mind while choosing storage engine
  • 25. InnoDB-Specific Optimizations • InnoDB uses clustered indexes – The length of the PRIMARY KEY is extremely important • The rows are always dynamic – Using VARCHAR instead of CHAR is almost always better • Maintenance operations needed after – Many UPDATE/DELETE operations • The pages can become underfilled
  • 30. Tuning MySQL Parameters • Some MySQL options can be changed online • The dynamic options are either – SESSION specific • Changing the value will only affect the current connection – GLOBAL • Changing the value will affect the whole server – Both • When changing the value SESSION/GLOBAL should be specified
  • 31. • Online changes are not persistant over a server restart – The configuration files have to be changed as well • The current values of all options can be found with SHOW SESSION/GLOBAL VARIABLES
  • 33. SQL/Parser Model Client1 Client2 ClientN MySQL Server Connection Thread Pool Query Cache Parser Query Optimizer Storage Engines 101101  InnoDB  MyISAM  MERGE  MEMORY  Federated  ARCHIVE  NDBCluster
  • 34. Query Cache • Stores SELECT queries and their results • Purpose: improve performance for frequently requested data • The data in the query cache is invalidated as soon as a modification is done in the table • Controlled with the query_cache_size variable
  • 35. • The Qcache_% status variables help monitoring the cache – The utilisation ratio: Qcache_hits vs. Com_select • The query cache can be emptied with RESET QUERY CACHE
  • 36. Some Thread Specific Options • read_buffer_size (default 128Kb) and read_rnd_buffer_size (default 256Kb) – Size of cache used for table scanning – Not equivalent to block size • The database is not divided into blocks but directly into records – Increase if you do many sequential scans • sort_buffer_size (default 2Mb) – Size of the GROUP BY / ORDER BY cache – If more memory is needed it will be taken from the disk • tmp_table_size (default 32Mb) – Limit after which temporary tables will not be MEMORYs anymore, but MyISAM tables
  • 37. Some Global Options • table_cache (default 64) – Cache for storing open table handlers – Increase this if Opened_tables is high • thread_cache (default 0) – Number of threads to keep for reuse – Increase if threads_created is high – Not useful if the client uses connection pooling
  • 38. • max_connections (default 100) – The maximum allowed number of simultaneous connections – Very important for tuning thread specific memory areas – Each connection uses at least thread_stack of memory
  • 39. MyISAM Global Options • key_buffer_size (default 8Mb) – Cache for storing indices – Increase this to get better index handling – Miss ratio (key_reads/key_read_requests) should be very low, at least < 0.03 (often < 0.01 is desirable) • Row caching is handled by the OS
  • 40. MyISAM Thread-Specific Options • myisam_sort_buffer_size (default 8Mb) – Used when sorting indexes during REPAIR/ALTER TABLE • myisam_repair_threads (default 1) – Used for bulk import and repairing – Allows for repairing indexes in multiple threads • myisam_max_sort_file_size – The max size of the file used while re-creating indexes
  • 41. InnoDB-Specific Optimization • innodb_buffer_pool_size (default 8Mb) – The memory buffer InnoDB uses to cache both data and indexes – The bigger you set this the less disk i/o is needed – Can be set very high (up to 80% on a dedicated system)
  • 42. • innodb_flush_log_at_trx_commit (default 1) – 0 writes and sync’s once per second (not ACID) – 1 forces sync to disk after every commit – 2 write to disk every commit but only sync’s about once per second
  • 43. InnoDB-Specific Optimization • innodb_log_buffer_size (default 1Mb) – Larger values allows for larger transactions to be logged in memory – Sensible values range from 1M to 8M • innodb_log_file_size (default 5Mb) – Size of each InnoDB redo log file – Can be set up to buffer_pool_size
  • 44. QnA
  • 45. Thank you for your time and attention www.osscube.com For more information, please feel free to drop in a line to sonali@osscube.com or visit http://www.osscube.com

Editor's Notes

  • #30: NEW/UPDATED
  • #37: UPDATED changed sort_buffer to sort_buffer_size (typo? or change to variable?) added defaults
  • #38: UPDATED moved defaults to title line
  • #40: UPDATED moved defaults to title line