9. I/O tuning | recommended
• CPU : Disabling HyperThreading
• Used different physical storage
– Transaction logs Transaction logs and
– Temporary file storage temporary spaces are heavy
– Table file storage
consumers of I/O, and affect
– Index file storage
performance for all users of
• Hard Drive
the database.
– 7,200+ rpm
– SATA/SCSI
• RAID levels : 5 +
– With battery backed up cache may be important.
– Not use NAS.
11. How ? | today
• I/O tuning
• Configurations on DBMS
12. In Architecture
• Caches
• Connections
• Thread
• Buffer
• Temp tables
• Index
• Storage Engine
• File System
• Network I/O
• Client Library
http://dev.mysql.com/doc/
13. 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’
14. 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
16. 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
17. 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
18. 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
19. Thread
• Use ‘skip-thread-priority’
• Set ‘thread_concurrency’
– number of Core CPU * 2
• Set ‘thread_cache_size’
– to 100 - ((threads_created / max_connections) * 100)
21. 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
23. References
• Optimizing the mysqld variables, June 15, 2004
(www.databasejournal.com/features/mysql/article.php/3367871)
• MySQL Database Design and Tuning, Robert D. Schneider, Sams
Publishing, 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