25
Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados MySQL InnoDB Plugin

InnoDB Plugin - II Fórum da Comunidade MySQL

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: InnoDB Plugin - II Fórum da Comunidade MySQL

Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados

MySQL InnoDB Plugin

Page 2: InnoDB Plugin - II Fórum da Comunidade MySQL

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.

Page 3: InnoDB Plugin - II Fórum da Comunidade MySQL

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;

Page 4: InnoDB Plugin - II Fórum da Comunidade MySQL

Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados

MySQL Architecture

Page 5: InnoDB Plugin - II Fórum da Comunidade MySQL

Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados

InnoDB PluginMySQL Server

1º camada do servidor

InnoDB Plugin

Page 6: InnoDB Plugin - II Fórum da Comunidade MySQL

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;

Page 7: InnoDB Plugin - II Fórum da Comunidade MySQL

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

Page 8: InnoDB Plugin - II Fórum da Comunidade MySQL

Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados

InnoDB Plugin x Built-In

Page 9: InnoDB Plugin - II Fórum da Comunidade MySQL

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.

Page 10: InnoDB Plugin - II Fórum da Comunidade MySQL

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

Page 11: InnoDB Plugin - II Fórum da Comunidade MySQL

Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados

Performance Tuning

Page 12: InnoDB Plugin - II Fórum da Comunidade MySQL

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

Page 13: InnoDB Plugin - II Fórum da Comunidade MySQL

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]

Page 14: InnoDB Plugin - II Fórum da Comunidade MySQL

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)

Page 15: InnoDB Plugin - II Fórum da Comunidade MySQL

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

:

Page 16: InnoDB Plugin - II Fórum da Comunidade MySQL

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;

Page 17: InnoDB Plugin - II Fórum da Comunidade MySQL

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;

Page 18: InnoDB Plugin - II Fórum da Comunidade MySQL

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!

Page 19: InnoDB Plugin - II Fórum da Comunidade MySQL

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)

Page 20: InnoDB Plugin - II Fórum da Comunidade MySQL

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)

Page 21: InnoDB Plugin - II Fórum da Comunidade MySQL

Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados

Performance Tuning

Page 22: InnoDB Plugin - II Fórum da Comunidade MySQL

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)

Page 23: InnoDB Plugin - II Fórum da Comunidade MySQL

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

Page 24: InnoDB Plugin - II Fórum da Comunidade MySQL

Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados

MySQL 5.6O que vem por aí!

Page 25: InnoDB Plugin - II Fórum da Comunidade MySQL

Todos os direitos reservados por WAGNERBIANCHI.COM, Especialistas em Bancos de Dados

Thank you...