Como o MySQL usa a Memória Interna?

Ola pessoal!

Hoje veremos o conceito de como o MySQL trabalha com memória, resumido mas bem objetivo. São conceitos importantes para levarmos dia a dia, seja você um Dev ou DBA.

O MySQL trabalha com o gerenciamento de memória:

Global (instancia):

A memória que é compartilhada com todas as sessões do MySQL, alocada quando o servidor é iniciado e liberada apenas quando o mesmo é desligado.

Sessão:

Como o próprio nome diz, a memória é alocada de maneira dinâmica por cada sessão, podendo ser liberada após o seu termino ou quando a mesma não é necessária.

A alocação é feita em 3 categorias:

Servidor:

Compartilhada com todas as sessões. Um exemplo neste cenário é a utilização do query cache.

Quey Cache: O Query cache salva os resultados de Selects já executadas na memória, fazendo com que o tempo de resposta de consultas repetitivas seja muito mais rápido, pois o MySQL não vai precisar buscar o dado no disco novamente.

Uma vez que é alterado algum dado na tabela de consulta, o hash deste cache será quebrado, evitando assim o retorno de dados divergentes ou desatualizados. O query_cache oferece 3 níveis que podem ser configurados no my.cnf ou my.ini:

Desligado:

# query_cache_type = 0

Ligado para todas as consultas:

# query_cache_type = 1

Ligado sob demanda:

# query_cache_type = 2

Em demanda, você deve definir na query que deseja utilizar o cache com o SQL_CACHE:

SELECT SQL_CACHE * FROM table ..

Mecanismo de Armazenamento:

Também é compartilhada com todas as sessões, por envolver os Storages Engines. Podemos citar o exemplo da variável buffer pool do innodb:

innodb_buffer_pool_size: O InnoDB mantem uma área de armazenamento na memória para trabalhar com os dados e índices, tendo um ganho de performance em todas as suas atividades.

A partir desta variável você define o valor exclusivo na memória para as operações do InnoDB. Logo sempre que o MySQL for iniciado, este valor será reservado na memória RAM de seu ambiente, sendo necessário rever a estrutura utilizada para definir um valor que não prejudique as outras operações.

Para um servidor dedicado ao MySQL, recomenda-se o uso de 50% a 80% da memória.

Conexão:

Referente a característica de sessão/Thread, onde a memória é alocada de maneira dinâmica e liberada após encerrar a sessão, como as temporary table.

TEMPORARY TABLE: Você pode utilizar uma tabela temporária para manipular resultados necessários apenas naquela sessão, logo após encerrar o acesso esta tabela não estará mais disponível, sem gerar algum .frm no seu servidor.

Existe um limite para o tamanho destas tabelas, que é definido através da variável ‘tmp_table_size‘. Caso a tabela ultrapasse o valor definido na memória, a mesma será gravada no disco, perdendo o foco de desempenho.

Caso precise de uma tabela por mais tempo sendo executada na memória, você pode utilizar o storage engine Memory. A tabela com este storage engine ficará disponível até que você remova a mesma ou reinicie o servidor MySQL.

Para trabalhar com o tipo Memory, basta passar o parâmetro no momento da criação da tabela:

CREATE TABLE memory_ze ( id int(11) NOT NULL AUTO_INCREMENT ) ENGINE=MEMORY;

Obs: Também não gera nenhum arquivo .frm.

–//

É isso ai pessoal.

Dúvidas, criticas ou sugestões? Fiquem a vontade, todo retorno é construtivo 😀

Jose Wilson

One Reply to “Como o MySQL usa a Memória Interna?”

Deixe uma resposta