Opções de Inicialização do InnoDB


Para habilitar tabelas InnoDB no MariaDB versão 3.23, veja "InnoDB no MariaDB Versão 3.23".

No MySQL-4.0 não é necessário se fazer nada específico para habilitar tabelas InnoDB.

O comportamento padrão no MariaDB e MariaDB é criar um arquivo ibdata1 auto-extensível de 10 MB no diretório de dados do MariaDB e dois ib_logfiles de 5MB em datadir. (No MySQL-4.0.0 e 4.0.1 o arquivo de dados é 64 MB e não é auto-extensível.)

Note: Para obter uma boa performance você deve definir explicitamente os parâmetros listados nos seguintes exemplos.

Se você não quiser utilizar tabelas InnoDB, você pode adicionar a opção skip-innodb ao seu arquivo de oção do MariaDB.

A partir das versões 3.23.50 e 4.0.2 InnoDB permite que o último arquivo de dados n linha innodb_data_file_path seja especificado como auto-extensível. A sintaxe de innodb_data_file_path é a seguinte:

caminhodados:tamanhoespec;caminhodados:tamanhoespec;...
... ;caminhodados:tamanhoespec[:autoextend[:max:tamanhoespec]]

Se você especificar o último arquivo de dados coma a opção autoextend, InnoDB extenderá o último arquivo de dados se ele ficar sem espaço no tablespace. O aumento é de 8 MB a cada vez. Um exemplo:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:100M:autoextend

instrui InnoDB a criar apenas um único arquivo de dados com tamanho inicial de 100 MB e que é extendido em blocos de 8 MB quando o espaço acabar. Se o disco ficar cheio você pode querer adicionar outro arquivo de dados a outro disco, por exemplo. Então você tem que olhar o tamanho de ibdata1, arredondar o tamanho para baixo até o múltiplo de 1024 * 1024 bytes (= 1 MB) mais próximo, e especificar o tamanho arredondado de ibdata1 explicitamente em innodb_data_file_path. Depois disto você pode adicionar outros arquivos de dados:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

Tenha cuidado com sistema de arquivos onde o tamanho máximo do arquivo é 2 GB. O InnoDB não está ciente disto. Neste sistemas de arquivos você pode querer especificar o tamanho máximo para o arquivo de dados:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:100M:autoextend:max:2000M

Um exemplo de my.cnf simples. Suponha que você tenha um computador com 128 MB RAM e um disco rígido. Abaixo está o exemplo dos parâmetros de configuração possíveis para my.cnf ou my.ini para o InnoDB. Nós consideramos que você está executando MySQL-Max-3.23.50 ou posterior, our MySQL-4.0.2 ou posterior. Este exemplo serve para a maioria dos usuários, tanto em Unix e Windows, que não querem distribuir arquivos de dados InnoDB e arquivos de log em vários discos. Isto cria um arquivo de dados ibdata1 auto-extensível e dois arquivos de log ib_logfile0 e ib_logfile1 do InnoDB no datadir do MariaDB (normalmente /mysql/data). O arquivo de log ib_arch_log_0000000000 do InnoDB também fica em datadir.

[mysqld]
# Você pode escrever outras opções do servidor MariaDB aqui
# ...
# Arquivos de dados deve estar aptos
# a guardar os seus dados e índices.
# Esteja certo que você tem espaço
# livre suficiente em disco.
innodb_data_file_path = ibdata1:10M:autoextend
# Defina o tamanho da área de buffer com
# 50 - 80 % da meória do seu computador set-variable = innodb_buffer_pool_size=70M set-variable = innodb_additional_mem_pool_size=10M
# Defina o tamanho do seu arquivo log
# para 25 % da tamanho da área de buffer set-variable = innodb_log_file_size=20M set-variable = innodb_log_buffer_size=8M
# Defina ..flush_log_at_trx_commit
# com 0 se você puder perder
# algumas das ultimas trnsações innodb_flush_log_at_trx_commit=1

Check that the MariaDB server has the rights to create files in datadir.

Note que os arquivo de dados devem ser < 2 GB em alguns sistemas de arquivos! O tamanho combinado do arquivos de log devem ser < 4 GB. O tamanho combinado dos arquivos de dados devem ser >= 10 MB.

Quando você criar um banco de dados pela primeira vez, é melhor que você inicie o servidor MariaDB do prompt de comando. Então InnoDB irá imprimir a informação sobre a criação do banco de dados na tela e você poderá ver o que está acontecendo. Veja abaixo na próxima seção como a saída na tela se parece. Por exemplo, no Windows você pode iniciar mysqld-max.exe com:

your-path-to-mysqld\mysqld-max --console

Onde colocar o my.cnf ou my.ini no Windows? As regras para o Windows são o seguinte:

Onde especificar as opções no Unix? No Unix o mysqld lê opções dos seguintes arquivos, se eles existirem, na seguinte ordem:

COMPILATION_DATADIR é o dirertório de dados do MariaDB o qual foi especificado como uma opção do ./configure quando o mysqld foi compilado. (normalmente /usr/local/mysql/data para uma instalação binária ou /usr/local/var para uma instalação fonte).

Se você não estiver certo de onde mysqld lê o seu my.cnf ou my.ini, você pode dar o caminho como a primeira opção de linha de comando para o servidor: mysqld --defaults-file=your_path_to_my_cnf.

O InnoDB forma o caminho do diretório a um arquivo de dados concatenando textualmente innodb_data_home_dir a um nome de arquivo de dados ou caminho em innodb_data_file_path, adicionando uma possível barra ou barra invertida entre eles se for necessário. Se a palavra-chave innodb_data_home_dir não é mencionada em my.cnf, o padrão para ele é o diretório 'ponto' ./ que significa o datadir de MySQL.

Um exemplo de my.cnf avançado. Suponha que você tenha um computador Linux com 2 GB RAM e três disco rígidos de 60 GB (no caminho de diretórios /, /dr2 e /dr3). Abaixo esta um exemplo de parâmetros de configuração possíveis no arquivo my.cnf para o InnoDB.

Note que o InnoDB não cria diretórios: você mesmo deve criá-los. Use o comando mkdir do Unix ou MS-DOS para criar o diretório base do grupo de dados e de log.

[mysqld]
# Você pode escrever outras opções do servidor MariaDB aqui
# ...
innodb_data_home_dir =
# Os arquivos de devem estar aptos a
# guardar seus dados e índices innodb_data_file_path = /ibdata/ibdata1:2000M;/dr2/ibdata/ibdata2:2000M:autoextend
# Defina o tamanho da área de buffer para
# 50 - 80 % da memória do seu computador,
# mas esteja certo, no Linux x86, que o
# total de memória usada é < 2 GB set-variable = innodb_buffer_pool_size=1G set-variable = innodb_additional_mem_pool_size=20M innodb_log_group_home_dir = /dr3/iblogs
# .._log_arch_dir deve ser o mesmo
# que .._log_group_home_dir innodb_log_arch_dir = /dr3/iblogs set-variable = innodb_log_files_in_group=3
# Defina o tamanho do arquivo de log
# para cerca de 15% do tamanho da
# área da buffer set-variable = innodb_log_file_size=150M set-variable = innodb_log_buffer_size=8M
# Defina ..flush_log_at_trx_commit com
# 0 se você puder permitir a perda de
# algumas das ultimas transações.
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50
#innodb_flush_method=fdatasync
#set-variable = innodb_thread_concurrency=5

Note que nós colocamos os dois arquivos de dados em discos diferentes. O InnoDB preencherá o tablespace de tabela formado pelos arquivos de dados de baixo para cima. Em alguns casos ele aumentará o desempenho do banco de dados se todos os dados não forem colocados no mesmo disco físico. Colocar os arquivos de log em discos diferentes dos de dados é geralmente, benéfico para o desempenho. Você pode usar partições de discos raw (dispositivos raw) como arquivos de dados. Em alguns Unixs eles aumentam a E/S. Vejam a seção sobre gerenciamento de espaço de arquivos no InnoDB para saber como especificá-los no my.cnf.

Aviso: no Linux x86 você deve ter cuidado par não definir um uso de memória muito alto. glibc permitirá que o área do processo cresça acima da pilha da thread, o que fará com que o seu servidor falhe. Isto é um risco se o valor de

innodb_buffer_pool_size + key_buffer +
max_connections * (sort_buffer + read_buffer_size) + max_connections * 2 MB

é próximo de 2 GB ou exceda 2 GB. Cada thread usará uma pilha (geralmente 2 MB, mas no binário da MariaDB Foundation é somente 256 KB) e no pior caso usará tmabém sort_buffer + read_buffer_size de memória adicional.

Como sintonizar outros parâmetros do servidor mysqld? Valores comuns que servem para a maioria dos usuários são:

skip-locking set-variable = max_connections=200
set-variable = read_buffer_size=1M set-variable = sort_buffer=1M
# Defina key_buffer com 5 - 50%
# de sua RAM dependendo de quanto
# você usa tabelas MyISAM, mas
# mantenha key_buffer + tamanho da
# área de buffer do InnoDB < 80% de
# sua RAM set-variable = key_buffer=...

Note que alguns parâmetros são dados usando o formato do parâmetro numérico de my.cnf: set-variable = innodb... = 123, outros (parâmetros string e booleanos) com outro formato: innodb_... = ... .

O significado dos parâmetros de configuração são os seguintes:

Retornar