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_logfile
s 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:
- Apenas o
my.cnf
oumy.ini
deve ser criado. - O arquivo
my.cnf
deve ser colocado no diretótio raiz do driveC:
. - O arquivo
my.ini
deve ser colocado no diretório WINDIR, e.g,C:\WINDOWS
ouC:\WINNT
. Você pode usar o comandoSET
do MS-DOS para imprimir o valor de WINDIR. - Se o seu PC utiliza um carrgador de boot onde o drive
C:
não é o drive de boot, então a sua única opçào é usar o arquivomy.ini
.
Onde especificar as opções no Unix? No Unix o mysqld
lê opções dos seguintes arquivos, se eles existirem, na seguinte ordem:
/etc/my.cnf
Opções globais.COMPILATION_DATADIR/my.cnf
Opções específicas do servidor.defaults-extra-file
O arquivo especificado com--defaults-extra-file=...
.~/.my.cnf
Opções específicas do usuário
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: