MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Usando o Aria Storage Engine com o MariaDB Server

O MariaDB Server é um dos servidores de banco de dados de código aberto mais populares. Ele foi criado pelos desenvolvedores originais do MySQL e se tornou popular por ser rápido, escalável e robusto. O MariaDB possui um rico ecossistema de mecanismos de armazenamento, plugins e outras ferramentas disponíveis que o tornam muito versátil para uma ampla variedade de casos de uso.

Quanto ao mecanismo de armazenamento MariaDB, você tem diferentes tipos para escolher, como XtraDB, InnoDB, MyRocks, MyISAM ou mesmo Aria. Não há um melhor tipo de mecanismo de armazenamento, pois depende da própria carga de trabalho. O último mencionado, Aria Storage Engine, é compilado por padrão do MariaDB 5.1 e é necessário estar 'em uso' quando o serviço MariaDB é iniciado.

Neste blog, veremos o que é o Aria Storage Engine e como usá-lo em um MariaDB Server.

O que é Aria Storage?

Aria é um mecanismo de armazenamento para MySQL e MariaDB. Ele foi originalmente desenvolvido com o objetivo de se tornar o mecanismo de armazenamento transacional e não transacional padrão para MariaDB e MySQL.

Atualmente, ele suporta criptografia e detecção de deadlock, e também oferece uma alternativa segura contra falhas ao MyISAM. Quando o MariaDB é reiniciado após uma falha, o Aria recupera todas as tabelas para o estado no início de uma instrução ou no início da última instrução LOCK TABLES.

Aria suporta verificação externa e interna, reparo e compactação de linhas, diferentes formatos de linha, diferentes formatos de compactação de índice, aria_chk e muito mais.

Este mecanismo de armazenamento tem sido usado para as tabelas do sistema MariaDB desde a versão 10.4.

Diferenças entre Aria e MyISAM

Vamos ver algumas diferenças básicas entre o Aria e seu concorrente direto:MyISAM, e depois as vantagens e desvantagens do Aria Storage Engine.

  • Aria usa arquivos de log grandes (1G por padrão).
  • Aria tem um arquivo de controle de log (aria_log_control) e arquivos de log (aria_log.%). Os arquivos de log podem ser eliminados automaticamente quando não forem necessários ou eliminados sob demanda.
  • Aria usa 8K páginas por padrão, enquanto MyISAM usa 1K. Isso torna o Aria um pouco mais rápido ao usar chaves de tamanho fixo, mas mais lento ao usar chaves compactadas de comprimento variável.

Vantagens do Aria Storage Engine

  • Dados e índices são à prova de falhas.
  • Em uma falha, as alterações serão revertidas para o estado inicial de uma instrução ou uma última instrução LOCK TABLES.
  • Aria pode reproduzir quase tudo do log. As coisas que ainda não podem ser repetidas são:
    • Agrupe INSERT em uma tabela vazia.
    • ALTER TABLEs.
  • LOAD INDEX pode pular blocos de índice para índices indesejados.
  • Suporta todos os formatos MyISAM ROW e o novo formato PAGE onde os dados são armazenados em páginas.
  • Vários insersores simultâneos na mesma tabela.
  • Ao usar o formato PAGE, os dados da linha são armazenados em cache pelo cache da página.
  • Aria tem testes de unidade da maioria das peças.
  • Suporta tabelas à prova de falhas e não transacionais.
  • PAGE é o único formato de linha transacional/seguro contra falhas.
  • O formato PAGE deve fornecer uma notável melhoria de velocidade em sistemas que têm armazenamento em cache de dados incorreto.
  • No MariaDB 10.5, o comprimento máximo da chave é de 2.000 bytes, em comparação com 1.000 bytes no MyISAM.

Desvantagens do Aria Storage Engine

  • Aria não suporta INSERT DELAYED.
  • Aria não oferece suporte a vários caches de chave.
  • O armazenamento de linhas muito pequenas (<25 bytes) não é eficiente para o formato PAGE.
  • As tabelas MERGE não são compatíveis com Aria.
  • Páginas de dados Aria em formato de bloco têm uma sobrecarga de 10 bytes/página e 5 bytes/linha. O suporte a transações e vários gravadores simultâneos usará uma sobrecarga extra de 7 bytes para novas linhas, 14 bytes para linhas excluídas e 0 bytes para linhas compactadas antigas.
  • Sem bloqueio externo.
  • Aria tem um tamanho de página para índice e dados. MyISAM suporta diferentes tamanhos de página por índice.
  • Pequena sobrecarga por página de índice (15 bytes).
  • O tamanho mínimo do arquivo de dados para o formato PAGE é 16K.
  • Aria não oferece suporte a índices em campos virtuais.

Os formatos de armazenamento Aria

Ele suporta três formatos diferentes de armazenamento de tabela.

Comprimento fixo

Estas tabelas contêm registros de tamanho fixo. Cada coluna tem o mesmo comprimento para todos os registros, independentemente do conteúdo real. É o formato padrão se uma tabela não tiver os campos BLOB, TEXT, VARCHAR ou VARBINARY e nenhum ROW FORMAT for fornecido.

Características:

  • Rápido, pois o MariaDB sempre saberá onde um registro começa.
  • Fácil de armazenar em cache.
  • Ocupam mais espaço do que tabelas dinâmicas, pois a quantidade máxima de espaço de armazenamento será alocada para cada registro.
  • Reconstruir após um acidente é descomplicado devido às posições fixas.
  • Sem fragmentação ou necessidade de reorganização, a menos que os registros tenham sido excluídos e você queira liberar espaço.

Tabelas contendo campos BLOB ou TEXT não podem ser FIXED porque, por design, ambos são campos dinâmicos.

Dinâmico

Estas tabelas contêm registros de comprimento variável. É o formato padrão se uma tabela tiver campos BLOB, TEXT, VARCHAR ou VARBINARY e nenhum ROW FORMAT for fornecido.

Características:

  • Cada linha contém um cabeçalho que indica o comprimento da linha.
  • As linhas tendem a se fragmentar facilmente. ATUALIZAR um registro para ser mais longo provavelmente garantirá que ele seja armazenado em locais diferentes no disco.
  • Todas as colunas de string com comprimento de quatro ou mais são dinâmicas.
  • Elas exigem muito menos espaço do que tabelas de tamanho fixo.
  • A restauração após uma falha é mais complicada do que com tabelas FIXED.

Página

É o formato padrão para tabelas Aria e é o único formato que pode ser usado se TRANSACTIONAL for definido como 1.

Características:

  • Ele é armazenado em cache pelo cache da página, o que oferece um melhor desempenho aleatório, pois usa menos chamadas de sistema.
  • Não fragmenta tão facilmente quanto o formato DYNAMIC durante as ATUALIZAÇÕES. O número máximo de fragmentos é muito baixo.
  • Atualiza mais rapidamente do que tabelas dinâmicas.
  • Tem uma pequena sobrecarga de armazenamento, principalmente notável em linhas muito pequenas.
  • Mais lento para executar uma verificação completa da tabela.
  • Mais lento se houver várias chaves duplicadas, pois o Aria primeiro escreverá uma linha, depois as chaves e só então verificará se há duplicatas.

Para saber o formato de armazenamento usado por uma tabela, você pode usar a instrução SHOW TABLE STATUS.

Opções transacionais para o Aria Storage Engine

Na verdade, para Aria, transacional significa segurança contra falhas e não é compatível com tabelas particionadas. Também requer o formato de linha PAGE para que funcione.

As opções da tabela TRANSACTIONAL e ROW_FORMAT interagem da seguinte forma:

  • Se TRANSACTIONAL=1 for definido, o único formato de linha suportado será PAGE. Se ROW_FORMAT for definido com algum outro valor, o Aria emitirá um aviso, mas ainda forçará o formato da linha a ser PAGE.
  • Se TRANSACTIONAL=0 estiver definido, a tabela não será à prova de falhas e qualquer formato de linha será compatível.
  • Se TRANSACTIONAL não for definido com nenhum valor, qualquer formato de linha será compatível. Se ROW_FORMAT estiver definido, a tabela usará esse formato de linha. Caso contrário, a tabela usará o formato de linha PAGE padrão. Nesse caso, se a tabela usar o formato de linha PAGE, ela será à prova de falhas. Se ele usar algum outro formato de linha, não será à prova de falhas.

Como usar o mecanismo de armazenamento Aria no servidor MariaDB

Primeiro, você precisa criar um banco de dados (se não tiver um criado) e usá-lo:

MariaDB [(none)]> create database db1;

Query OK, 1 row affected (0.003 sec)

MariaDB [(none)]> use db1

Database changed

Em seguida, crie uma tabela usando o mecanismo “Aria”:

MariaDB [db1]> CREATE TABLE table1 (id int(11) DEFAULT NULL, name text)

    -> ENGINE=Aria

    -> TRANSACTIONAL=1;

Query OK, 0 rows affected (0.025 sec)

Especificamos o valor TRANSACTIONAL em 1 para vê-lo aqui, mas, como mencionamos, não é necessário, pois será 1 por padrão se estivermos usando Aria sem especificar os valores Row Format e Transactional. Agora, você terá a tabela criada:

MariaDB [db1]> SHOW CREATE TABLE table1\G

*************************** 1. row ***************************

       Table: table1

Create Table: CREATE TABLE `table1` (

  `id` int(11) DEFAULT NULL,

  `name` text DEFAULT NULL

) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1

1 row in set (0.000 sec)

E no status da tabela, você pode verificar os valores de formato transacional e de linha:

MariaDB [db1]> SHOW TABLE STATUS\G

*************************** 1. row ***************************

            Name: table1

          Engine: Aria

         Version: 10

      Row_format: Page

            Rows: 0

  Avg_row_length: 0

     Data_length: 8192

 Max_data_length: 17592186011648

    Index_length: 8192

       Data_free: 0

  Auto_increment: NULL

     Create_time: 2020-06-30 18:59:17

     Update_time: 2020-06-30 18:59:17

      Check_time: NULL

       Collation: latin1_swedish_ci

        Checksum: NULL

  Create_options: transactional=1

         Comment:

Max_index_length: 137438945280

       Temporary: N

1 rows in set (0.001 sec)

Existem muitos parâmetros para configurar relacionados ao Aria Storage Engine. Você pode encontrar uma lista completa no site de documentação oficial.

Ferramentas do mecanismo de armazenamento Aria

Vamos ver algumas ferramentas para trabalhar com este mecanismo de armazenamento.

aria_chk

Aria_chk é usado para verificar, reparar, otimizar, classificar e obter informações sobre tabelas Aria. Com o servidor MariaDB, você pode usar CHECK TABLE, REPAIR TABLE e OPTIMIZE TABLE para fazer coisas semelhantes.

Esta ferramenta não deve ser usada quando o MariaDB estiver em execução, pois assume que a tabela não será alterada durante seu uso.

$ aria_chk [OPTIONS] aria_tables[.MAI]

Semelhante ao MyISAM, as informações da tabela Aria são armazenadas em 2 arquivos diferentes:

  • O arquivo MAI contém informações da tabela base e o índice.
  • O arquivo MAD contém os dados.
Aria_chk takes one or more MAI files as arguments.

For example, to check all your tables and repairs only those that have an error, run this command in your data directory:

$ aria_chk --check --force --sort_buffer_size=1G */*.MAI

Checking Aria file: db1/table1.MAI

Data records:       0   Deleted blocks:       0

- check file-size

- check key delete-chain

- check index reference

- check record links

...

aria_pack

Aria_pack é uma ferramenta para compactar tabelas Aria. As tabelas resultantes são somente leitura e geralmente cerca de 40% a 70% menores. O nome do arquivo usado por esta ferramenta é o arquivo de índice .MAI.

$ aria_pack [options] file_name [file_name2...]

Aria_pack compacta cada coluna separadamente e, quando os dados resultantes são lidos, apenas as linhas e colunas individuais necessárias precisam ser descompactadas, permitindo uma leitura mais rápida.

$ aria_pack /var/lib/mysql/world/country

Compressing aria_pack /var/lib/mysql/world/country.MAD: (549 records)

- Calculating statistics

- Compressing file

37.71%

Remember to run aria_chk -rq on compressed tables

Uma vez que uma tabela foi compactada, use o comando aria_chk -rq para reconstruir seus índices.

$ aria_chk -rq --ignore-control-file /var/lib/mysql/world/country

Recreating table '/var/lib/mysql/world/country'

- check record delete-chain

- recovering (with sort) Aria-table '/var/lib/mysql/world/country'

Data records: 549

- Fixing index 1

State updated

aria_read_log

Aria_read_log é uma ferramenta para exibir e aplicar registros de log de um log de transações Aria.

$ aria_read_log OPTIONS

Você precisa usar uma das opções “-d” ou “-a”:

  • a:Aplicar log às tabelas:modifica as tabelas. Você deve fazer um backup primeiro. Exibe muitas informações se você não usar o parâmetro --silent.
  • d:exibe informações breves lidas no cabeçalho dos registros.
$ cd /var/lib/mysql

$ aria_read_log -d

You are using --display-only, NOTHING will be written to disk

The transaction log starts from lsn (1,0x2007)

TRACE of the last aria_read_log

Rec#1 LSN (1,0x2007) short_trid 0 redo_create_table(num_type:30) len 1042

Rec#2 LSN (1,0x2421) short_trid 0 redo_create_table(num_type:30) len 527

Rec#3 LSN (1,0x2638) short_trid 61986 long_transaction_id(num_type:36) len 6

Rec#4 LSN (1,0x2641) short_trid 61986 file_id(num_type:35) len 22

Rec#5 LSN (1,0x265d) short_trid 61986 undo_bulk_insert(num_type:39) len 9

Rec#6 LSN (1,0x266a) short_trid 0 incomplete_log(num_type:37) len 2

Rec#7 LSN (1,0x266f) short_trid 61986 commit(num_type:27) len 0

...

Conclusão

Como você pode ver, o Aria Storage Engine tem muitas melhorias em relação ao MyISAM, e é uma ótima alternativa de mecanismo de armazenamento a ser usada. Também é fácil de usar, pois faz parte da instalação do MariaDB Server, portanto, basta especificar o parâmetro da tabela ENGINE para habilitá-lo.

O MariaDB ainda está trabalhando neste mecanismo de armazenamento, então provavelmente veremos novas melhorias em versões futuras em breve.