mysql tuning
TRANSCRIPT
MySQL Tuning
Ford AntiTrust
What ?
“Managing performance of the memory and processing resources of the computer running the DBMS
Why ?
Default settings are for toy databases
Why ?
Maximum performance (or Optimal between other services) and Maximum speed
How ?
• I/O tuning
• Optimize Queries
• Maintenances
• Configurations on DBMS
| today
How ?
• I/O tuning
• Configurations on DBMS
| today
I/O tuning
The first bottleneck in database performance encountered.
I/O tuning | effect
• Transaction logs
• Files associated
– Temporary file storage
– Table file storage
– Index file storage
I/O tuning | recommended
• CPU : Disabling HyperThreading• Used different physical storage
– Transaction logs – Temporary file storage – Table file storage– Index file storage
• Hard Drive– 7,200+ rpm– SATA/SCSI
• RAID levels : 5 +– With battery backed up cache may be important.– Not use NAS.
Transaction logs and temporary spaces are heavy consumers of I/O, and affect performance for all users of the database.
How ?
• I/O tuning
• Configurations on DBMS
| today
In Architecture
http://dev.mysql.com/doc/
• Caches• Connections• Thread• Buffer• Temp tables• Index• Storage Engine• File System• Network I/O• Client Library
General
• Set ‘sql-mode’– STRICT_TRANS_TABLES– NO_AUTO_CREATE_USER– NO_ENGINE_SUBSTITUTION“
• Set ‘default-storage-engine’– to INNODB
• Not used ‘old_passwords’• Use ‘big-tables’• Use ‘skip-name-resolve’
Log
• Use ‘log-slow-queries’ and ‘log-warnings’
– For monitor long time queries and warning messages.
• Set ‘long_query_time’
– For log all queries that have taken more than ‘long_query_time’ seconds
Key Buffer
Key Buffer = (Key read requests - Key reads) * 100 / Key read requests
Key blocks unused 27683Key blocks used 1312
Key read requests 1318393Key reads 1344
Sort / Read / Join Buffer
• Set ‘sort_buffer_size’– Dynamic by number of ‘ORDER BY’ query
• Set ‘read_buffer_size’– Dynamic by traffic and b/w
• Set ‘read_rnd_buffer_size’– Dynamic by ‘GROUP BY’ or ‘ORDER BY’
• Set ‘join_buffer_size’– Dynamic by join table not use indexes
Query Cache
• Set ‘query_cache_size’
– to 10% RAM
• Set ‘query_cache_type’
– to 1, Cache all query results except for those that begin with SELECT SQL_NO_CACHE
• Set ‘query_cache_limit’
– to 5-10% RAM
Temp Table
• Set ‘tmp_table_size’
– to 5-10% RAM
• Set ‘max_tmp_tables’ – to 5-10% number of table in all databases
• Set ‘tmpdir’ to different physical drive
Thread
• Use ‘skip-thread-priority’
• Set ‘thread_concurrency’
– number of Core CPU * 2
• Set ‘thread_cache_size’ – to 100 - ((threads_created / max_connections) * 100)
Table Cache
Open tables 1024Opened tables 1120
table_cache =1024
for InnoDB
• Set ‘innodb_buffer_pool_size’– Typical value 60-80% of memory
(If Innodb is only your storage engine)
• Use ‘innodb_file_per_table’• Set ‘innodb_additional_mem_pool_size’
– Do not set too high, avoid memory waste
• Set ‘innodb_flush_log_at_trx_commit’ = 2– Control by OS
• Set ‘innodb_thread_concurrency’– 2*(NumCPUs+NumDisks) – in theory
Never ending in tune-up theory
References
• Optimizing the mysqld variables, June 15, 2004 (www.databasejournal.com/features/mysql/article.php/3367871)
• MySQL Database Design and Tuning, Robert D. Schneider, SamsPublishing, ISBN: 0-672-32765-1
• InnoDB Architecture and Performance Optimization (OS-DB-CON2006), Peter Zaitsev, Percona Ltd
• InnoDB Performance Optimization Heikki Tuuri, Innobase Oy/Oracle Corp. Peter Zaitsev, Percona Ltd, uc2007 (April 23-26 2007)
• MySQL/Innodb performance optimization Peter Zaitsev, MySQL AB, O'Reilly Open Source Convention 2004 Portland,OR July 26-30
THANK YOUFord AntiTrust