Características de Tabelas BDB
:
Para estar apto a fazer roolback da transação, o mecanismo de armazenamento BDB
mantém arquivos de log. Para obter o máximo de desempenho você deve colocar estes arquivos em outro disco diferente do usado por seus bancos de dados usando a opção --bdb-logdir
.
- O MariaDB realiza um ponto de verificação a cada vez que um novo arquivo de log do
BDB
é iniciado e remove qualquer arquivo de log que não for necessário para a transação atual. Pode se executarFLUSH LOGS
a qualquer momento para faze um ponto de verificação de tabelas Berkeley DB.Para recuperação de desastres, deve-se usar backups de tabelas mais log binário do MariaDB. Leia "Backups dos Bancos de Dados".
Aviso: Se você delatar arquivos de log antigos que estão em uso, o
BDB
não estará apto a fazer a recuperação e você pode perder dados se algo der errado. - O MariaDB precisa de uma
PRIMARY KEY
em cada tabelaBDB
para poder fazer referência a linha lida anteriormente. Se você não criar um o MariaDB criará uma chave primária oculta para você. A chave oculta tem um tamanho de 5 bytes e é incrementada a cada tentaiva de inserção. - Se todas as colunas que você acessa em uma tabela
BDB
são parte do mesmo índice ou parte de uma chave primária, então o MariaDB pode executar a consulta ser ter que acessar a linha atual. Em uma tabelaMyISAM
o descrito acima é guardado apenas se as colunas são parte do mesmo índice. - A
PRIMARY KEY
será mais rápida que qualquer outra chave, já que aPRIMARY KEY
é armazenada junto com o registro do dado. Como as outras chaves são armazenads como os dados da chave + aPRIMARY KEY
, é importante manter aPRIMARY KEY
o menor possível para economizar disco e conseguir maior velocidade. LOCK TABLES
funciona em tabelasBDB
como nas outras tabelas. Se você não utilizarLOCK TABLE
, MariaDB comandará um bloqueio interno de múltipla-escrita nas tabelas para assegurar que a tabela será bloqueada apropriadamente se outra thread executar um bloqueio de tabela.- Bloqueios internos em tabelas
BDB
é feito por página. SELECT COUNT(*) FROM nome_tabela
é lento pois tabelasBDB
não mantém um contador do número de linha na tabela.- A varredura sequencial é mais lenta que com tabelas
MyISAM
já que os dados em tabelasBDB
são armazenados em árvores-B e não em um arquivo de dados separado. - A aplicação sempre deve estar preparada para tratar casos onde qualquer alteração de uma tabela
BDB
pode fazer um rollback automático e quqlquer leitura pode falhar com um erro de deadlock. - As chaves não são compactadas por prefixo ou por sufixo como em tabelas
MyISAM
. Em outras palavras, a informação da chave gastará um pouco mais de espaço em tabelasBDB
quando comparadas a tabelasMyISAM
. - Existem buracos frequentemente em tabelas
BDB
para permitir que você insira novas linhas no meio da árvore de chaves. Isto torna tabelasBDB
um pouco maiores que tabelasMyISAM
. - O otimizador precisa conhecer aproximadamente o número de linhas na tabela. O MariaDB resolve isto contando inserções e mantendo isto em um segmento separado em cada tabela
BDB
. Se você não executar várias instruçõesDELETE
ouROLLBACK
, este número deverá estar suficientemente próximo do exato para o otimizador do MariaDB, mas como o MariaDB só armazerna o número ao finalizar, ele pode estar incorreto se o MariaDB finalizar inesperadamente. Isto não deve ser fatail mesmo se este número não for 100% correto. POde se atualizar o número de linhas executandoANALYZE TABLE
ouOPTIMIZE TABLE
. Leia "Sintaxe deANALYZE TABLE
" . Leia "Sintaxe deOPTIMIZE TABLE
". - Se você ficar com o seu disco cheio com uma tabela
BDB
, você obterá um erro (provavelmente erro 28) e deve ser feito um rollback da transação. Isto está em contraste com as tabelasMyISAM
eISAM
onde omysqld
irá esperar por espaço suficiente em disco pra continuar.