You are on page 1of 24

www.fromdual.

com

MySQL Performance Tuning


DOAG 2013 Datenbank
14. Mai 2013, Dsseldorf
Oli Sennhauser
Senior MySQL Berater, FromDual GmbH

oli.sennhauser@fromdual.com

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