Mais conteúdo relacionado Semelhante a Mais performance com o MySQL 5.6 (20) Mais de MySQL Brasil (18) Mais performance com o MySQL 5.62. Safe Harbour Statement
The following is intended to outline our general product direction. It is
intended for information purposes only, and may not be incorporated into any
contract.
It is not a commitment to deliver any material, code, or functionality, and
should not be relied upon in making purchasing decisions. The development,
release, and timing of any features or functionality described for Oracle’s
products remains at the sole discretion of Oracle.
2
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
3. Agenda
Melhorias no MySQL 5.6
Tuning do servidor
Índices eficientes
Visual EXPLAIN
Performance Schema
3
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
4. MySQL é estratégico para Oracle
Soluções Completas
#1 em todos os níveis da pilha
Cloud e On Premise
MySQL: Web, Mobile & Embedded
Investimentos na Engenharia do MySQL
4
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
6. Compromisso Oracle com MySQL
https://blogs.oracle.com/MySQL/entry/mysql_connect_keynotes_and_news
6
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
8. Melhorias no MySQL 5.6
8
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
9. Arquitetura MySQL Server
Clients & Connectors
Native C API, JDBC, ODBC, .Net, PHP, Ruby, Python, VB, Perl
Clients and Apps
mysqld
Connection Pool, SQL Interface, Parser, Optimizer, Caches
Enterprise Management
Services and Utilities
Storage Engines
InnoDB, MyISAM, Memory, Archive, Cluster (NDB API), etc…
Filesystems, Files & Logs
Data, Index, Logs…
9
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
Backup & Recovery
Monitor
Workbench
Utilities
11. Storage Engines
MyISAM
InnoDB
NDB Cluster
✖
✔
✔
Tabela
Linha
Linha
Assíncrona ou
Semi-síncrona
Assíncrona ou
Semi-síncrona, crash-safe
Síncrona, Multi-master,
crash-safe sem SPOF
Foreign Keys
✖
✔
✔
Full-text indexes
✔
✔
✖
Compressão de dados
somente Leitura
✔
✖
Caches
somente Índices
Dados e Índices
Dados e Índices
Tipos de Dados e Índices
Somente Tipos de Dados
somente Tipos de Dados
256TB
64TB
384EB (~3TB em RAM)
Transações
Nível de Lock
Replicação
Suporte Geoespacial
Limite de armazenamento
dev.mysql.com/doc/refman/5.6/en/storage-engines.html
11
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
12. Evolução da escalabilidade do MySQL
2008
2009
2010
2013
até 4 CPU
MySQL 5.0
até 16 CPU
MySQL 5.1
até 32 CPU
MySQL 5.5
até 48 CPU
MySQL 5.6
MySQL AB
Sun
Oracle
Atualize o MySQL e use InnoDB.
12
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
13. Performance MySQL 5.6: InnoDB
SysBench Benchmarks
Transações por Segundo
MySQL 5.6 vs. 5.5 - Leituras (Linux)
18.000
16.000
14.000
12.000
10.000
8.000
6.000
4.000
2.000
0
MySQL 5.6.7
MySQL 5.5.28
32
64
128
Conexões
256
512
+234% Ganhos de Performance
13
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
Oracle Linux 6
Intel(R) Xeon(R) E7540 x86_64
MySQL leveraging:
- 48 of 96 available CPU threads
- 2 GHz, 512GB RAM
14. Performance MySQL 5.6: InnoDB
SysBench Benchmarks
Transações por Segundo
MySQL 5.6 vs. 5.5 – Escritas+Leituras (Linux)
12.000
MySQL 5.6.7
10.000
8.000
6.000
MySQL 5.5.28
4.000
2.000
0
32
64
128
Conexões
256
512
+151% Ganhos de Performance
14
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
Oracle Linux 6
Intel(R) Xeon(R) E7540 x86_64
MySQL leveraging:
- 48 of 96 available CPU threads
- 2 GHz, 512GB RAM
15. MySQL Enterprise Scalability
Thread Pool Plug-In
•
•
•
•
Adiciona mais inteligência ao modelo padrão de gerenciamento de
threads – agrupa e reutiliza
Modelo padrão, sem Thread Pool: 1 thread por conexão,
performance excelente, mas limita a escalabilidade ao crescer o
número de conexões de usuários
Com Thread Pool: reúso de threds, escala o número de conexões
de usuários mantendo os mesmos níveis de performance
Implementado utilizando Thread Pool API
Assegura desempenho melhor e sustentável, mesmo quando o
número de usuários continua crescendo.
15
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
16. Thread Pool habilitado/desabilitado
60x Melhor Escalabilidade comThread Pool
16
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
MySQL 5.6.11
Oracle Linux 6.3, Unbreakable Kernel 2.6.32
4 sockets, 24 cores, 48 Threads
Intel(R) Xeon(R) E7540 2GHz CPUs
512GB DDR3 RAM
17. Thread Pool habilitado/desabilitado
18x Melhor Escalabilidade com Thread Pool
17
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
MySQL 5.6.11
Oracle Linux 6.3, Unbreakable Kernel 2.6.32
4 sockets, 24 cores, 48 Threads
Intel(R) Xeon(R) E7540 2GHz CPUs
512GB DDR3 RAM
18. Otimizador do MySQL 5.6
Resolução de problemas com Subqueries
SELECT title FROM film WHERE film_id IN
(SELECT film_id FROM film_actor
GROUP BY film_id HAVING count(*) > 12);
Sem necessidade de transformar em JOINs
Table pull-out
Semi-join
Subquery Materialization
Tempo de execução baixou de DIAS para segundos
Benchmark DBT3 Query #18
18
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
19. Otimizador do MySQL 5.6
Ordenação de arquivo com limites pequenos
CREATE TABLE products(
productid int auto_increment PRIMARY KEY,
productname varchar(200)
);
SELECT * FROM products ORDER BY productname LIMIT 100;
Caso de uso: listar os 100 primeiros produtos ordenados por nome
Evita passos intermediários: criar arquivos ordenados, mais de um
table scan
Testes numa tabela com 20 milhões de linhas, sort buffer default
4x mais rápido: caiu de 40s para 10s
19
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
20. Otimizador do MySQL 5.6
ICP: Index Condition Pushdown
CREATE TABLE person (
personid INTEGER PRIMARY KEY,
firstname CHAR(20),
lastname CHAR(20),
postalcode INTEGER,
age INTEGER,
address CHAR(50),
KEY k1 (postalcode,age)
) ENGINE=InnoDB;
pe test
r
SELECT lastname, firstname
FROM person
WHERE postalcode BETWEEN 5000 AND 5500
AND age BETWEEN 21 AND 22;
ICP Desabilitado: 15 s (buffer pool 128 MB) e 1,4 s (buffer pool 1.5 GB)
90ms em ambos = melhoria de 15x a 170x
em ambas configurações de buffer pool
20
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
21. Otimizador do MySQL 5.6
Postpone Materialization
EXPLAIN SELECT * FROM (SELECT * FROM a_big_table);
SELECT … FROM derived_table AS dt
join table AS t WHERE dt.fld = t.dlf
Permite EXPLAINs mais rápidos para views/subqueries
Evita materialização quando possível, recuperação mais rápida
Uma chave pode ser gerada para tabelas derivadas
240x mais rápido: caiu de ~8min para ~2s
21
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
22. Otimizador do MySQL 5.6
Batched Key Access (BKA) and Multi-Range Read (MRR)
Melhora performance de JOINs
5000
2821
DBT3 Query 13: “Customer Distribution Query”
Query Time (secs)
1225
500
No BKA
BKA
50
9.63
5
0
8
16
24
32
40
Join Buffer Size (MB)
22
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
48
56
64
290x
mais rápido
23. Otimizador do MySQL 5.6
Melhor intrumentação para diagnósticos
EXPLAIN
- INSERT, UPDATE e DELETE
- Saída estruturada para EXPLAIN
Optimizer Traces
SET SESSION OPTIMIZER_TRACE=‘enabled=on’;
SELECT (SELECT 1 FROM t6 WHERE d = c)
AS RESULT FROM t5;
SELECT * FROM information_schema.OPTIMIZER_TRACE;
23
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
24. Otimizador do MySQL 5.6
Melhorias na inicialização e estabilização
Estatísticas Persistentes do Otimizador
- Aumento de estabilidade e consistência dos tempos de execução
- Estatísticas mais precisas, melhor otimização
- Melhor controle do usuário: automático ou manual
[mysqld]
innodb_stats_persistent = 1
24
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
# use ANALYZE TABLE periodicamente para todas tabelas
25. Mais Instrumentação no MySQL 5.6
PERFORMANCE_SCHEMA: baixa sobrecarga e ligado por padrão
Statements/Stages
Quais queries mais custosas? Quando elas gastam tempo?
Table/Index I/O, Table Locks
Quais tabelas/índices causam maior carga e/ou contenção?
Network I/O
Qual o comportamento de carga de rede? Quanto tempo as sessões ficam
ociosas?
Users/Hosts/Accounts
Quais usuários/hosts/contas consomem mais recursos?
Summaries
Estatísticas agregadas, agrupadas por thread, user, host, account ou object
25
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
26. Outras melhorias no MySQL 5.6
Mais facilidade de uso e flexibilidade
Novas configurações padrão, mais adequadas ao hardware atual
Particionamento melhorado
import/export
mais capacidade e performance
seleção explícita
Backup remoto do Binlog
Slaves com atraso programado
Identificador único universal para servidor (server UUID)
TIME/TIMESTAMP/DATETIME
precisão de fração de segundo
CURRENT_TIMESTAMP default /auto update
TIMESTAMP nullable por padrão
GIS: operações espaciais precisas
E MAIS...
26
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
mysql.com/why-mysql/white-papers/whats-new-mysql-5-6
27. Tuning do MySQL Server
27
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
28. O loop infinito do tuning...
Monitoramento
etc...
Melhorias
28
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
Tuning
Otimizações
29. O loop infinito do tuning...
Monitoramento
etc...
Melhorias
29
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
Em mais de 90%
dos casos o
problema está na
aplicação
Tuning
Otimizações
30. Sistema Operacional
Linux
– Usar malloc() lib jemalloc
Oracle Solaris
– Usar malloc() lib libumem
Microsoft Windows
http://www.mysql.com/support/supportedplatforms/database.html
30
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
31. O hardware ideal para o MySQL Server
Até 64 CPU threads x86-64 bit (requer MySQL 5.6 ou
superior)
RAM igual ou maior que dataset “mais quente”
(acessado com maior frequência)
2 x placas de rede
2 x fontes de alimentação
31
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
32. O hardware ideal para o MySQL Server
Mínimo de 4 x SSDs ou HDDs. 8–16 drives
aumentarão a performance para cargas de I/O
intensivo
– Hardware RAID com battery-backed cache
– RAID 10 recomendado; RAID 5 está OK se carga de
leitura intensiva
Rede redundante
Alimentação redundante
32
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
33. Performance Tuning do MySQL Server
Principal dica: use seu cérebro!
Receitas de bolo são limitidas, o contexto muda tudo
Treinamento oficial 4 dias, education.oracle.com/mysql
…esta apresentação: 50min!
Regras básicas
– Nunca faça mudanças diretamente em produção
– Tenha um bom método de benchmark ou carga regular
– Tenha as métricas iniciais (baseline) e vá ajustando até
conseguir seu objetivo; monitore e saiba quando parar
– Apenas 1 mudança de cada vez
33
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
35. Monitoramento
Monitore, documente e salve os resultados
Métricas de Query
– throughput
– single query time
– average query time
Métricas CPU: top, vmstat
Métricas IO: iostat, top, vmstat, bonnie++
Ferramentas: MySQL Enterprise Monitor, slow query
log, status variables, Performance_Schema, etc.
35
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
38. Variáveis
Configure as System Variables (aka Options)
– ex. datadir, port, innodb_buffer_pool_size
– my.cnf ou linha de comando
– SHOW <GLOBAL/SESSION> VARIABLES
– Algumas Dínamicas (altere via comando SET); outras podem
precisar de inicialização:
Monitore as Status Variables
– SHOW <GLOBAL/SESSION> STATUS VARIABLES
– mysqladmin ext -ri10 > arquivo.txt
http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html
http://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html
http://dev.mysql.com/doc/mysqld-version-reference/en/index.html
38
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
39. System Variables / Options
5.6
– Updated Defaults for Modern Systems
– Auto-sized Variables
Prior to 5.6
– Out-of-date Configuration File Samples
example: my-innodb-heavy-4G.cnf
Advice:
– Consider 5.6 Defaults
– Re-evaluate older config file entries
39
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
40. Tuning do InnoDB
Monitore
• innodb_buffer_pool_reads
• innodb_buffer_pool_read_requests
• mysql> show status like
'Innodb_buffer%' ;
40
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
Tune
• innodb_buffer_pool_size
• por volta de 80% da memória
disponível
• innodb_log_file_size = ~512MB 5.5+
• tradeoff: tempo de recuperação vs.
performance
• Muitas escritas
41. Tuning do InnoDB, próximo nível
depende do seu workload
innodb_flush_log_at_trx_commit (cuidado!)
– valor 1: sync para arquivo (fsync) a cada commit
– valores 0/2: pode perder 1 segundo de dados
innodb_flush_method = O_Direct
– Depende do workload e hardware
innodb_buffer_pool_instances = 8
– Somente 5.5 e 5.6
http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html
41
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
42. Tuning do MyISAM
Monitore
• key_read_requests
• key_reads
• key_buffer_size
Tune
• Caches
• key_buffer_cache – 25% da
memória disponível
• System Cache – 75% da memória
disponível
• Múltiplos Key Buffers
• Pré-carregamento de Key Buffers
http://dev.mysql.com/doc/refman/5.6/en/myisam-key-cache.html
42
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
43. Query Cache
depende do seu workload
Monitore
• have_query_cache
• qcache_hits
• qcache_inserts
• qcache_not_cached
• qcache_total_blocks
• qcache_free_memory
43
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
Tune
• Use apenas quando:
• Queries e ResultSets são idênticos
• Poucos Inserts/Updates/Deletes
• query_cache_type
• 0 ou OFF
• 1 ou ON tudo, exceto hints SELECT
SQL_NO_CACHE
• 2 or DEMAND nada, exceto hint SELECT
SQL_CACHE
44. Tabelas Temporárias
cuidado com consumo excessivo de RAM
Monitore
• created_tmp_tables
• created_tmp_disk_tables
Tune
• tmp_table_size
• tamanho máximo para tabelas “in memory”
• Se temporary table >
• tmp_table_size || max_heap_table_size ||
BLOB/TEXT
• Então converte para tabela MyISAM em
disco
http://dev.mysql.com/doc/refman/5.6/en/internal-temporary-tables.html
44
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
45. Outras variáveis de uso geral 1
normalmente passam por tuning
Monitore
• %opened%
• %thread%
• threads_created
45
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
Tune
• table_open_cache
• 5.6 mudou default de 400 - 2000
• thread_cache_size
• meta threads_created ~
thread_cache_size
46. Outras variáveis de uso geral 2
cuidado com tamanhos maiores
Monitore
• %opened%
• %thread%
• threads_created
Depende do workload ou query
Maior nem sempre é melhor
Usa memória por Thread ou
JOIN
Tune
• sort_buffer_size
• sorting for group by and order by
• If 100M = 100M of RAM per sort
• mixed results in lab
• 2M -> 256K in 5.6
Dicas:
•Comece com o default vá
alterando gradualmente
•Ajuste dinamicamente
46
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
47. Outras variáveis de uso geral 3
cuidado com tamanhos maiores
Monitore
• select_full_join
Depende do workload ou query
Maior nem sempre é melhor
Usa memória por Thread ou
JOIN
Tune
• join_buffer_size
• JOINS que não usam indices
• Alocado por JOIN por thread!
Dicas:
•Comece com o default vá
alterando gradualmente
•Ajuste dinamicamente
•Invista na otimização da
Query
47
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
48. Resumo
Menos tuning é necessário com defaults do MySQL 5.6
Tuning obrigatório:
thread_cache_size 0->8+max_con/100
InnoDB Buffer Pool
query cache
Key Buffer Cache (MyISAM)
tmp_table_size
Tune e Avalie resultados:
Cuidado:
innodb_log_file_size 5M->48M
sort_buffer_size 2MB->256K
innodb_flush_log_at_trx_commit
join_buffer_size 128K->256K
innodb_flush_method
read_buffer_size (MyISAM)
innodb_buffer_pool_instances 1->8
read_rnd_buffer_size
table_open_cache 400->2000
http://blogs.oracle.com/supportingmysql/entry/server_defaults_changes_in_mysql
49
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
74. Considere MySQL Enterprise para
implementar boas práticas
77
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
75. Binários MySQL comunidade
Pacote Enterprise: Suporte + Backup + Monitor & Workbench
Suporte
Plug-ins
Backup
Monitor &
Workbench
78
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
76. Binários MySQL comerciais
Certificado no stack Oracle + patches e hotfixes
Suporte
Escalabilidade
Segurança
Auditoria
Plug-ins
Backup
Monitor &
Workbench
79
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
77. MySQL Cluster Carrier-Grade Edition
Subscrição com renovação anual: ferramentas + serviços
Gerenciamento
Consolidado
Cluster
Manager
Plug-ins
Suporte
Cluster
Monitor &
Workbench
80
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
Backup
79. MySQL Enterprise Backup
Backup online para InnoDB
Backups completos, incrementais, parciais (automatizados via script)
Compressão
Opções de Recovery: Point in Time, Completo, Parcial
Metadados de status, progresso e histórico
mysqlbackup
Tamanho ilimitado do BD
Multi-Plataforma
MEB
MySQL
Backup
Database
Files
Files
Windows, Linux, Unix
Certificado para Oracle Secure Backup, compatível SBT
Backup e Recovery mais rápidos e online.
85
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
80. MySQL Enterprise Audit
Audit Plug-In
• Registro de conexões, logins, queries dos servidores MySQL
• Políticas definidas pelo DBA para filtragem e rotação de logs
• Habilitado ou desabilitado dinamicamente, sem reiniciar o
servidor
• Log em XML de acordo com especificação padrão Oracle Audit
• Requer MySQL 5.5.28 ou superior
• Implementado através MySQL 5.5 Audit API
Adiciona conformidade regulatória em aplicações MySQL:
HIPAA, Sarbanes-Oxley, PCI, etc.
86
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
81. MySQL Enterprise Audit
3. Conexões e queries dos
usuários aparecem no log
1. DBA habilita no Server1
Server1
2. Usuário conecta-se e executa queries
87
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
82. MySQL Enterprise Security
External Authentication Plug-Ins
PAM (Pluggable Authentication Modules) Plug-In
•
•
•
Autenticação externa via métodos externos
Interface padrão, funciona com Unix, LDAP, Kerberos, outros
Proxy-users – mapeamento grupos de usuários para 1 usuário
Windows Plug-In
•
•
•
Acesso nativo via serviços do Windows
Autentica usuários já logados no Windows (Single Sign On)
Grupos/usuários do Windows Active Directory com Proxy-users
Integra o MySQL com a infraestrutura de segurança existente e
SOPs. Mais produtividade na gestão de usuários.
88
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
83. MySQL Enterprise Security
External Authentication Plug-Ins
Usuário/senha definidos no diretório
Privilégios definidos no MySQL e
mapeados para usuários/grupos do diretório
PAM /
Windows Auth
LDAP/AD
Authenticate
CREATE USER win_joe
IDENTIFIED WITH authentication_windows
AS ‘joe';
89
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
84. Conclusão
MySQL 5.6, várias melhorias na performance
Sobre tuning: metodologia e outros componentes da pilha
Tuning do MySQL 5.6
– Variáveis
– Índices
– Visual Explain e Performance Schema
MySQL Enterprise
90
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |
85. Saiba Mais
Treinamento oficial MySQL Performance Tuning
http://education.oracle.com/mysql
Performance Tuning Webinars
http://www.mysql.com/news-and-events/on-demand-webinars
MySQL Performance Forum
http://forums.mysql.com/list.php?24
Download MySQL 5.6
http://www.mysql.com/downloads/mysql
MySQL Enterprise Monitor (trial 30 dias)
http://www.mysql.com/trials
91
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. |