www.fromdual.
com
MySQL Performance Tuning
DOAG 2013 Datenbank
14. Mai 2013, Dsseldorf
Oli Sennhauser
Senior MySQL Berater, FromDual GmbH
[email protected]
1 / 24
ber FromDual GmbH
www.fromdual.com
FromDual bietet neutral und unabhngig:
Beratung fr MySQL
Support fr MySQL und Galera Cluster
Remote-DBA Dienstleistungen fr MySQL
MySQL Schulungen
Oracle Silver Partner (OPN)
www.fromdual.com
2 / 24
Inhalt
www.fromdual.com
HA Solutions
MySQL
Performance Tuning mit System-Variablen
Performance
Read
scale-out
Tuning Hebel
Replication
MySQL
System
set-up
Variablen
for HA
Active/passive
MySQL
Status Variablen
fail-over
MySQL Architektur
Cluster
Replication Cluster
Speicherbelegung
Storage-Engine-Replication
Session
Variablen
Globale Variablen
MyISAM Variablen
InnoDB Variablen
Monitoring
Informationen
3 / 24
Performance Tuning Hebel
www.fromdual.com
4 / 24
MySQL System Variablen
www.fromdual.com
Datenbank-Konfiguration
my.cnf
mysqldhelpverbose
/etc/my.cnf/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
$basedir/my.cnf~/.my.cnf
SHOWGLOBALVARIABLES;
5 / 24
MySQL Status Variablen
www.fromdual.com
Was wir damit anrichten sieht man mit:
SHOW/*!50001GLOBAL*/STATUS;
SHOWENGINEINNODBSTATUS\G
6 / 24
MySQL Architektur
www.fromdual.com
Application / Client
Thread
Cache
Connection
Manager
User Authentication
Logging
Command
Dispatcher
Query
Cache
Query Cache
Module
mysqld
Parser
Optimizer
Access Control
Table Manager
Table Open
Cache (.frm, fh)
Table Definition
Cache (tbl def.)
Handler Interface
MyISAM
InnoDB
Memory
NDB
PBXT
Aria
XtraDB
Tokutek
...
7 / 24
Speicherbelegung
Client 1
read_buffer
sort_buffer
Client 2
Client N
read_buffer
read_buffer
sort_buffer
tmp_table
Local Memory Areas
MySQL Server (mysqld)
www.fromdual.com
Storage Engines
key_buffer_size
innodb_buffer_pool_size
innodb_log_buffer_size
etc...
table_open_cache
table_definition_cache
query_cache_size
etc...
Global Memory Area
8 / 24
Thread Cache
www.fromdual.com
Konifguration:
thread_cache_size
Status:
threads_created
+++
|Variable_name|Value|
+++
|Threads_cached|8|
|Threads_connected|242|
|Threads_created|15355|
|Threads_running|16|
+++
9 / 24
Query Cache
www.fromdual.com
Konfiguration: query_cache_size
Status:
Com_select,
Qcache_hits
Hit ratio:
+++
|Variable_name|Value|
+++
|Com_select|25712|
|Qcache_free_memory|19553200|
|Qcache_hits|65137|
|Qcache_inserts|172167|
+++
Qache_hits/(Com_select+Qcache_hits)
10 / 24
Per Session Parameter
www.fromdual.com
Im Executor
Alloziert/Dealloziert on Demand
Per Session oder global einstellbar
Meisst Effekt gering oder gar kontraproduktiv!
Join Buffer
join_buffer_size
Read Buffer und Read Random Buffer
read_buffer_size,read_rnd_buffer_size
11 / 24
Sort Buffer, temporre Tabellen
www.fromdual.com
Temporre Tabellen
(MEMORY oder MyISAM)
Konfiguration: tmp_table_size,
(max_heap_table_size)
Status: created_tmp_tables,
created_tmp_disk_tables
Sort Buffer
Konfiguration:
sort_buffer_size
Status: sort_merge_passes
12 / 24
Table Definition Cache
www.fromdual.com
Ab v5.1
Enthlt Info vom .frm File
Konfiguration: table_definition_cache
Status: open_table_definitions,
opened_table_defintions
+++
|Variable_name|Value|
+++
|Open_table_definitions|100|
|Opened_table_definitions|100|
+++
13 / 24
Table (Open) Cache
www.fromdual.com
Ab v5.1
File-Descriptioren (1 pro Connection pro Table)
Frher table_cache
Konfiguration: table_open_cache
Status: open_tables,opened_tables
+++
|Variable_name|Value|
+++
|Open_tables|64|
|Opened_tables|11812|
+++
14 / 24
MyISAM
Bis MySQL 5.1 default Storage Engine
Konfiguration: key_buffer_size
www.fromdual.com
Status: Key_blocks_used,
Key_blocks_unused,Key_reads,
Key_read_requests
15 / 24
InnoDB Buffer Pool
adaptive hash idx
OS file cache
async
trx log buffer
innodb_buffer_pool_size,
innodb_buffer_pool_instances,
innodb_io_capacity
index pages
undo records
lock info table
buffer pool
sync
Konfiguration:
data pages
secondary index buffer
ib_logfile1
InnoDB Buffer Pool
mysqld
system table space: ibdata1
undo
double write area
ib_logfile2
InnoDB seit 5.5 default Storage Engine
ib_logfilen
www.fromdual.com
dd
tables/indexes
table table space table table space table table space
16 / 24
InnoDB Buffer Pool
www.fromdual.com
Status:
innodb_buffer_pool_pages_%,
Innodb_buffer_bytes_%,
Innodb_data_%
17 / 24
InnoDB Log File
Status: innodb%log%
index pages
adaptive hash idx
undo records
lock info table
trx log buffer
OS file cache
async
innodb_flush_log_at_trx
_commit
sync
innodb_log_file_size,
data pages
secondary index buffer
buffer pool
ib_logfile1
Konfiguration:
mysqld
system table space: ibdata1
undo
double write area
ib_logfile2
REDO Log, Transaction
Log
ib_logfilen
www.fromdual.com
dd
tables/indexes
table table space table table space table table space
18 / 24
Binary Log
Application
www.fromdual.com
Application
mysqld
Application
binlog_cache_size
binlog_stmt_cache_size
sync_binlog
bin-log.n
+++
|Variable_name|Value|
+++
|Binlog_cache_disk_use|3456|
|Binlog_cache_use|12786|
|Binlog_stmt_cache_disk_use|0|
|Binlog_stmt_cache_use|0|
+++
19 / 24
Monitoring
www.fromdual.com
Von Hand:
SHOWGLOBALSTATUS;
SHOWENGINEINNODBSTATUS\G
Performance Schema (P_S, >= v5.5)
Irgend ein graphisches Monitoring Tool...
20 / 24
PERFORMANCE_SCHEMA
In Diskussion seit mindestens 2006
Eingefhrt in MySQL 5.5 (2010)
www.fromdual.com
Einblick in die Datenbank
In v5.5 disabled, in v5.6 enabled per default
performance_schema=1
Overhead 5% - 200%! also Vorsicht!
21 / 24
Beispiel: Table I/O waits
www.fromdual.com
SELECTOBJECT_SCHEMA,OBJECT_NAME
,ROUND(SUM_TIMER_WAIT/1000000000,3)ASSUM_TIMER_WAIT
,ROUND(SUM_TIMER_READ/1000000000,3)ASSUM_TIMER_READ
,ROUND(SUM_TIMER_WRITE/1000000000,3)ASSUM_TIMER_WRITE
FROMtable_io_waits_summary_by_table
ORDERBYSUM_TIMER_WAITDESC
LIMIT10
;
++++++
|OBJECT_SCHEMA|OBJECT_NAME|SUM_TIMER_WAIT|SUM_TIMER_READ|SUM_TIMER_WRITE|
++++++
|zabbix|items|1182496.258|616630.696|565865.562|
|zabbix|history_uint|889884.116|370528.991|519355.125|
|zabbix|history_str|460411.155|246159.458|214251.697|
|zabbix|history|389815.659|86285.980|303529.679|
|zabbix|trends_uint|133955.560|107365.626|26589.934|
|zabbix|functions|128657.654|128657.654|0.000|
|zabbix|trends|43683.159|36314.732|7368.428|
|mpm|mpm_agent|27837.056|27837.056|0.000|
|zabbix|hosts|23820.284|14044.672|9775.612|
|zabbix|triggers|21052.459|20970.604|81.855|
++++++
22 / 24
Informationen
www.fromdual.com
MySQL System Variablen:
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html
MySQL Status Variablen:
http://dev.mysql.com/doc/refman/5.5/en/server-status-variables.html
MySQL DB Health Check:
http://www.fromdual.com/mysql-database-health-check
MySQL Performance Monitor:
http://www.fromdual.com/mysql-performance-monitor
23 / 24
Q&A
www.fromdual.com
Fragen ?
Diskussion?
Wir haben Zeit fr ein Performance Audit...!
FromDual bietet neutral und unabhngig:
Beratung
Remote-DBA
Support fr MySQL und Galera Cluster
Schulung
www.fromdual.com/presentations
24 / 24