Mysql Otimização do InnoDB

2

(perguntado no stackoverflow, mas foi sugerido para mudar para cá!)

Estou tendo algum problema para entender o uso do InnoDB - nós temos um DB baseado no drupal (5: 1 read: write) rodando no mysql (versão do servidor: 5.1.41-3ubuntu12.10-log (Ubuntu)). Nosso tamanho atual de dados / índice Innodb é:

Espaço atual do índice InnoDB = 196 M Espaço de dados atual do InnoDB = 475 M

Olhando pela web e lendo livros como 'High performance sql' sugerimos ter 10% de aumento no tamanho dos dados - eu configurei o buffer pool como (data + index) + 10% e notei que o buffer pool era em 100% ... até mesmo aumentando para 896Mb ainda faz 100% (mesmo que os dados + índices sejam apenas ~ 671Mb?

Eu anexei a saída da seção innodb do mysqlreport abaixo. Páginas livres de 1 parecem estar sugerindo um grande problema também. O innodb_flush_method é definido como padrão - eu investigarei configurando isso como O_DIRECT, mas quero resolver esse problema antes.

__ InnoDB Buffer Pool __________________________________________________
Usage         895.98M of 896.00M  %Used: 100.00
Read hit      100.00%
Pages
  Free              1            %Total:   0.00
  Data         55.96k                     97.59 %Drty:   0.01
  Misc           1383                      2.41
  Latched           0                      0.00
Reads         405.96M    1.2k/s
  From file    15.60k     0.0/s            0.00
  Ahead Rnd       211     0.0/s
  Ahead Sql      1028     0.0/s
Writes         29.10M    87.3/s
Flushes       597.58k     1.8/s
Wait Free           0       0/s

__ InnoDB Lock _________________________________________________________
Waits              66     0.0/s
Current             0
Time acquiring
  Total          3890 ms
  Average          58 ms
  Max            3377 ms

__ InnoDB Data, Pages, Rows ____________________________________________
Data
  Reads        21.51k     0.1/s
  Writes      666.48k     2.0/s
  fsync       324.11k     1.0/s
  Pending
    Reads           0
    Writes          0
    fsync           0

Pages
  Created      84.16k     0.3/s
  Read         59.35k     0.2/s
  Written     597.58k     1.8/s

Rows
  Deleted      19.13k     0.1/s
  Inserted      6.13M    18.4/s
  Read        196.84M   590.6/s
  Updated     139.69k     0.4/s

Qualquer ajuda sobre isso seria muito apropriada.

Obrigado!

    
por DOS 29.03.2011 / 10:25

1 resposta

1

Os arquivos de log do InnoDB (ib_logfile0 e ib_logfile1) estão dimensionados corretamente?

Eles devem ser 25% do buffer pool do InnoDB | No seu caso, isso seria 224M

Você pode eles da seguinte forma:

  1. Adicione esta configuração a /etc/my.cnf: innodb_log_file_size = 224M
  2. serviço mysql stop
  3. rm -f / var / lib / mysql / ib_logfile [01]
  4. service mysql start (ib_logfile0 e ib_logfile1 são recriados)

Você deve manter o padrão para innodb_flush_method para garantir a conformidade com o ACID. Caso contrário, você poderá perder até um segundo de transações.

CAVEAT: Se o seu servidor de banco de dados é dedicado apenas ao banco de dados, você deve reservar 75-80% ou RAM para o innodb_buffer_pool.

ATUALIZAÇÃO

Você definitivamente vai querer mudar o layout do InnoDB !!!!

Você precisa aumentar o innodb_open_files para 6000 | Você precisa ativar innodb_file_per_table
Você precisa reestruturar todos Dados InnoDB para residir em tablespaces separados

    
por 29.03.2011 / 17:42

Tags