Post on 17-Dec-2014
description
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
MySQL InnoDB Plugin
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Wagner Bianchi
É especialista em MySQL e outros servidores de bancos de dados relacionais como Oracle e SQL Server. Formado em Gerenciamento de Bancos de Dados, com MBA em Administração de Empresas pela Fundação Getúlio Vargas e Pós-Graduando em Bancos de Dados pela Universidade Gama Filho do Distrito Federal, possui várias certificações, entre elas a SCMA, SCMDEV, SCMDBA e SCMCDBA. Atualmente é Consultor Sênior em bancos de dados pela WAGNERBIANCHI.COM.
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Agenda• InnoDB Plugin e Built-in;• Performance Tuning:
– Buffer Pool;– Variáveis de Ambiente;– Variáveis de Status;– Monitoramento de Performance;
• Novas Funcionalidades:– InnoDB FullText Search – MySQL 5.6;– InnoDB MEMCACHED – MySQL 5.6;– INFORMATION_SCHEMA tables – 5.6;
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
MySQL Architecture
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
InnoDB PluginMySQL Server
1º camada do servidor
InnoDB Plugin
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
InnoDB Plugin x Built-In• Plugin disponibilizado durante ainda no MySQL 5.1;• Desenvolvimento “dividir e conquistar”;• Era necessário instalar:
– INSTALL PLUGIN ... ; – Variável de ambiente plugin_dir (/usr/lib/mysql/plugin);
• InnoDB Built-In com boa escala para aquele momento;• Questões relacionadas com o aumento dos serviços web;• Geração frenética de informação pelas organizações;• Necessidade de processamento rápido e escalável;• Nova tendência de mercado – escala horizontal, organização de
dados de forma não estruturada;
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
InnoDB Plugin x Built-InFeatures Plugin Built-In
Shared Tablespace Sim Sim
File Per Table Estável Instável
Processing Scale-Up + 8 cores até 8 cores
Adaptive Hash Index Sim Não
Compressão de dados Sim Não
Fast Index Creation Sim Não
Controle de Estimativa de Estatísticas Sim Não
BARRACUDA file format Sim Não
Multiple Commit Threads Sim Não
Group Commit Sim Não
Buffer Pool Multiple Instances Sim Não
INFORMATION_SCHEMA tables Sim Não
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
InnoDB Plugin x Built-In
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
• Buffer Pool– Área de memória que armazena dados e índices InnoDB;– Trabalha com o algoritmo LRU (Least Recently Used) onde este
controla uma lista com duas sub-listas:• Head, Young ou New – sub-lista com blocos de dados acessados /utilizados recentemente;
• Tail ou Old – sub-lista que armazena blocos dados que não foram acessados recentemente e que serão despejados da memória caso continuem não sendo utilizados;
– Utiliza um processo chamado de “eviction” para despejar páginas não utilizadas da memória, dando lugar para novas páginas que chegam.
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning• innodb_buffer_pool_size=2G
EXT01
EXT02
EXT03
• innodb_buffer_pool_instances=2
BPoolInst01 BPoolInst02
EXT01
EXT02
EXT03
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
• Buffer Pool– O InnoDB Buffer Pool é configurado através das seguintes
variáveis de ambiente:• innodb_buffer_pool_size
– Poderá ser configurado com até 80% da memória disponível na máquina servidora na qual o MySQL roda;
• innodb_buffer_pool_size_instances– Cada instância deverá contar com o mínimo de 1GB de espaço
para ser possível o particionamento do Buffer Pool;
– O comportamento do LRU poderá ser configurado através das seguintes variáveis de ambiente:• innodb_old_blocks_pct• innodb_old_blocks_time
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning• Buffer Pool – Monitoramento
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 8791261184; in additional pool allocated 0
Buffer pool size 524288
Free buffers 0
Database pages 524203
Old database pages 193484
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 6878082, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 7181405, created 2327676, written 2436786
0.00 reads/s, 0.00 creates/s, 0.44 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
LRU len: 524203, unzip_LRU len: 0
I/O sum[134]:cur[0], unzip sum[0]:cur[0]
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
• Buffer Pool – Monitoramento– A cada 15 segundos um novo resultado de monitoramento do
InnoDB, de Locks e do Tablespace (compartilhado) do InnoDB será gravado no log de erros do MySQL ou será impresso no mysql client;
mysql> CREATE TABLE mysql.innodb_monitor (i int) ENGINE=InnoDB;Query OK, 0 rows affected (0.24 sec)
mysql> CREATE TABLE mysql.innodb_lock_monitor (i int) ENGINE=InnoDB;Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE mysql.innodb_tablespace__monitor (i int) ENGINE=InnoDB;Query OK, 0 rows affected (0.00 sec)
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning[root@mgm01 ~]# cat mysqld.err | less
=====================================
111129 22:45:56 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 20 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 4 1_second, 4 sleeps, 0 10_second, 7 background, 7 flush
srv_master_thread log flush and writes: 4
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 4, signal count 4
Mutex spin waits 2, rounds 60, OS waits 0
RW-shared spins 5, rounds 150, OS waits 4
RW-excl spins 0, rounds 0, OS waits 0
Spin rounds per wait: 30.00 mutex, 30.00 RW-shared, 0.00 RW-excl
:
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
• Variáveis de Ambiente– innodb_flush_method = [ O_DIRECT | O_DSYNC ]
• O_DIRECT, estável e já disponível em MS Win e Unix Like systems;• O_SYNC, mais rápido, instável, problemas com double write;
– innodb_max_dirty_pages_pct = % - (default 90)• Quantidade de páginas sujas que serão acumuladas antes do processo de
flush, que esvaziará essa área do buffer pool em disco, aplicando as alterações de dados nos arquivos de dados em disco;
– innodb_read_io_threads = 1 ... 64 – default 4• Número de threads para ler blocos de dados ainda não carregados na
memória – início da estratégia de read-ahead (leitura *sequêncial);– innodb_write_io_threads = 1 ... 64 – default 4
• Número de threads destinadas às escritas de páginas sujas em disco – caso o valor seja maior que 4, innodb_flush_method = O_DIRECT;
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
• Variáveis de Ambiente– innodb_max_merge_io = 1 ... 64 – default 64
• Quantidade de requisições de recuperação de blocos que fazem parte de uma mesma página que podem estar separados entre memória (buffer pool) e disco – quanto mais blocos de uma mesma extensão estiver em buffer, melhor é para realização de sequential read-ahead;
– innodb_flush_log_at_trx_commit = [0,1,2] – default 1• Determina como o arquivo de log será aberto e as páginas sujas escritas
em tais arquivos, ou “a cada COMMIT”, ou “a cada COMMIT e de tempos em tempos” ou ainda somente de “tempos em tempos”;
– innodb_additional_mem_pool_size = 1M – default• Interessante que o dicionário de dados ou metadados do InnoDB
permaneça também em memória, facilitando as consultas que possam ser realizadas ao mesmo;
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
• Variáveis de Ambiente– innodb_log_buffer_size = 8M – default
• Quantidade de logs que serão armazenados até que um flush seja realizado. Para bancos que são alvos de grandes transações, interessantes ter esta área maior para suportar armazenar mais logs em memória, realizar o COMMIT e então ir para o disco – o contrário será pressão de I/O sentida pela hardware do servidor;
– innodb_file_format = [ANTELOPE | BARRACUDA]• Caso esteja utilizando MySQL 5.5, sem dúvida é interessante alterar o
formato de arquivo para BARRACUDA, fast index creation, data compression...
– innodb_file_per_table = OFF – default• Para utilizar a compressão de dados e outros recursos do InnoDB Plugin
1.0.0 ++ com o MySQL 5.5, condição sine-qua-non!
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
• As variáveis de status são contadores em tempo real das operações realizadas no MySQL;– Todas as áreas do MySQL estão cobertas;– Se apresentam como contadores
• Bytes;• Quantidade de vezes;
– São consultadas com SHOW STATUS• Sintaxe aceita o operador LIKE
mysql> SHOW STATUS LIKE 'innodb_buffer_pool%';...13 rows in set (0.08 sec)
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuningmysql> SHOW STATUS LIKE 'innodb_buffer_pool%';
+---------------------------------------+-----------+
| Variable_name | Value |
+---------------------------------------+-----------+
| Innodb_buffer_pool_pages_data | 524114 |
| Innodb_buffer_pool_pages_dirty | 3 |
| Innodb_buffer_pool_pages_flushed | 1752442 |
| Innodb_buffer_pool_pages_free | 0 |
| Innodb_buffer_pool_pages_misc | 174 |
| Innodb_buffer_pool_pages_total | 524288 |
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 3246072 |
| Innodb_buffer_pool_read_ahead_evicted | 570 |
| Innodb_buffer_pool_read_requests | 369360364 |
| Innodb_buffer_pool_reads | 18141 |
| Innodb_buffer_pool_wait_free | 0 |
| Innodb_buffer_pool_write_requests | 53387370 |
+---------------------------------------+-----------+
13 rows in set (0.08 sec)
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
• Logs de Transação– Interessante que não se trabalhe com o tamanho nem a
quantidade de logs padrão de instalação;– A soma da quantidade de arquivos vezes o espaço que cada um
deles têm não pode ser maior ou igual à 4GB;– Verifique a variável de status Innodb_log_waits para saber se
os logs estão pequenos para a operação atual;
mysql> SHOW STATUS LIKE 'innodb_log_waits';+------------------+-------+| Variable_name | Value |+------------------+-------+| Innodb_log_waits | 21 |+------------------+-------+1 row in set (0.00 sec)
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Performance Tuning
• Logs de Transação– Para alterar os logs de transação, utilize sua janela de
manutenção e após um backup full, pare o MySQL, mova ou remova os logs atuais e reconfigure este comportamento no arquivo de configurações – my.cnf:
[mysqld]
# logs criados em /var/lib/mysql
innodb_log_file_size = 768M
innodb_log_files_in_group = 4
# criando logs em outro path
# innodb_log_group_home_dir = /disk2/innologs
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
MySQL 5.6O que vem por aí!
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados
Thank you...