Como Trabalhar com Tabelas MyISAM Grandes

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (2)

Veja neste artigo como trabalhar com tabelas MyISAM grandes.

As tabelas MyISAM são o tipo padrão de tabelas no MySQL. Elas se destacam pelo seu alto desempenho, já que não suportam determinados recursos, tais como o controle de transações. Neste artigo descrevo algumas técnicas para que possamos trabalhar com tabelas MyISAM que possuam um número elevado de registros.

Sobre as tabelas MyISAM

As tabelas MyISAM são representadas por 3 arquivos: o primeiro arquivo contém a descrição da tabela (.frm), ou seja, armazena o dicionário de dados da tabela. Os outros arquivos são o MYD para armazenar os dados e o MYI que contém os índices da tabela, sendo que todos os índices da tabela são armazenados em um único arquivo. Dado o esquema de armazenamento das tabelas MyISAM percebe-se que o tamanho dos arquivos estão intimamente relacionados à quantidade de registros existentes na tabela. Neste caso, em alguns Sistemas Operacionais (SO) existem restrições quanto ao tamanho máximo de um arquivo, isto é não suportam arquivos grandes. No Linux, por exemplo, existe a limitação de 2/4 GB dependendo do tipo de kernel e arquitetura de processador utilizado. Daí, introduzimos uma limitação em relação ao número máximo de registros em uma tabela MyISAM. Vale ressaltar que esta limitação está relacionada ao SO e não ao MySQL, no Windows por exemplo, o problema não se verifica.

O MySQL possui duas estratégias imediatas para contornar este problema. A primeira possibilidade é a utilização de tabelas Merge, que foram discutidas em um outro artigo, disponível no endereço: Trabalhando com os vários tipos de tabelas do MySQL e a utilização de tabela MyISAM com a opção de RAID, o que é definido no momento da criação da tabela MyISAM (CREATE TABLE).

Tabelas Merge

As tabelas Merge são uma coleção de tabelas MyISAM idênticas. Na verdade se trata de uma 'tabela virtual', onde não são armazenados dados. Este tipo de tabela simplesmente aponta para as tabelas que a compõem. Desta forma, caso tenhamos a necessidade de armazenar uma tabela muito grande, poderíamos optar por um particionamento horizontal desta tabela baseado em algum critério arbitrário, por exemplo a data de inserção. Assim, criamos várias tabelas para armazenar os dados de acordo com os intervalos definidos por este critério, resultando em diversas tabelas menores. Para acessar os dados contidos em todas as tabelas constituídas criamos uma tabela Merge que representa o agrupamento dos dados. Nesta abordagem, cada tabela particionada poderia chegar ao tamanho máximo permitido, e o Merge poderia ultrapassar este tamanho em até N vezes, onde N é o número de tabelas geradas no particionamento.

Tabelas MyISAM com a opção de RAID

A segunda forma de contornar a questão do tamanho do arquivo é através da criação de tabelas MyISAM com a opção de RAID, neste caso utilizando o parâmetro de criação RAID_TYPE. Para utilizar este recurso, o MySQL tem que estar habilitado com a opção --with-raid. Neste caso, o comando SHOW VARIABLES LIKE 'raid_type' retornará YES, caso contrário não será possível utilizar o recurso. A única opção suportada até a última versão (5.0.1) é o STRIPED, RAID_TYPE =1. Neste cenário, o MySQL criará vários diretórios e criará arquivos MYD dentro de cada um destes diretórios dividindo os dados em vários arquivos.

Para isto, durante a criação da tabela você deverá especificar o RAID_CHUNKS, que indica o número de diretórios a serem criados, isto é, em quantas partes a tabela será dividida. O tamanho máximo para este parâmetro é 255. Ao escrever os dados nesta tabela, o MySQL mapeará os primeiros RAID_CHUNKSIZE*1024 bytes para o primeiro arquivo, os próximos RAID_CHUNKSIZE*1024 bytes para o próximo arquivo, e assim sucessivamente. Por isto será necessário especificar também o RAID_CHUNKSIZE durante a criação da tabela. O exemplo a seguir ilustra uma tabela MyISAM com a opção de RAID.

mysql>CREATE TABLE myisam_raid (
            ->        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
            ->        nome CHAR(50) NOT NULL
            ->)   RAID_TYPE=1 RAID_CHUNKS=10 RAID_CHUNKSIZE=100;

No exemplo serão criados 10 diretórios com 10 arquivos de dados (MYD), e os dados serão escritos em todos os arquivos de acordo com o RAID_CHUNKSIZE especificado. Além da possibilidade de superar os possíveis limites para tamanho de arquivo, este recurso também poder ser utilizado para reduzir gargalos relacionados a I/O, já que os diretórios criados pela opção RAID podem ser colocados em discos separados, aumentando o desempenho do banco para a leitura e escrita dos dados.

Abraços e até breve!

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?