[MySQL] Série de posts 6 – Teoria: Estruturas de memória
Bom pessoal, o objetivo deste post é trazer um esclarecimento quanto a estrutura de memória que o MySQL trabalha, que para alguns profissionais que trabalham com o produto ainda não possuem uma clareza sobre o assunto.
- Arquitetura Lógica
Como o objectivo é esclarecer e não confundir, o diagrama a seguir apresentado representa o essencial da arquitetura do MySQL. A figura do diagrama abaixo é a imagem virtual que necessitamos de possuir para obter uma ideia da arquitetura lógica do MySQL.
O nível mais alto do diagrama, que a título puramente indicativo vou chamar de nível 1,contém serviços que não são únicos ao MySQL, e que são baseados em cliente/servidor, onde por exemplo, numa linguagem de programação é feita a ligação com o SGBD e consequentemente a necessidade de autenticação.O MySQL trabalha com Threads, Nisso ele entende que cada conexão é uma Thread assim dando suporte para o SGBD atender varias conexões simultâneas num mesmo banco de dados utilizando múltiplos processos que se comunicam através de uma memória compartilhada ou outros meios.
O segundo nível é onde se situam as características e os pilares centrais do MySQL, incluindo o código para query parsing, analise, optimização, caching e funções (date,math,encryption por exemplo).
O terceiro nível contém os motores de armazenamento, que são responsáveis por armazenar e devolver toda a informação armazenada no MySQL, possuindo cada um as suas vantagens e desvantagens.
O servidor de base de dados comunica com os motores através de uma API chamada storage engine API que esconde as diferenças dos motores de pesquisa e torna-os claramente transparentes para os níveis superiores do MySQL. A API contém algumas funções de baixo nível para processar operações como “begin transaction” ou “fletch the row that has primary key”. Os vários motores não comunicam entre si, simplesmente respondem a pedidos do servidor.
Informações referentes a prioridade de alocação de memória no MySQL:
Verifica limites de conexão:150 (variável max_connections)
mysql> show variables like ‘%connections%’;
Verifica threads em cache:0 (variável thread_cache_size)
mysql> show variables like ‘thread_%’;
Verifica tamanho da pilha de threads: (variável thread_stack)
mysql> show variables like ‘%thread_stack%’;
Verifica tamanho do buffer de conexões de rede:
mysql> show variables like ‘%net_buffer%’; (variável net_buffer_length)
mysql> show variables like ‘%max_allowed%’; (variável max_allowed_packet)
Verifica tamanho do buffer de memoria de leitura:
mysql> show variables like ‘%read_buffer%’; (variável read_buffer_size)
mysql> show variables like ‘%read_rnd%’; (variável read_rnd_buffer_size)
Verifica quantidade permitida de armazenamento de tabelas temporárias: (variável tmp_table_size)
mysql> show variables like ‘%tmp_table_size%’;
Informação referente ao suporte de cache de queries:
mysql> show variables like ‘%query%’;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | +------------------------------+---------------------------------------------------------+ | Variable_name | Value | +------------------------------+---------------------------------------------------------+ | ft_query_expansion_limit | 20 | | have_query_cache | YES | | long_query_time | 10.000000 | | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 0 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | | slow_query_log | OFF | | slow_query_log_file | /opt/bitnami/mysql/data/teste-slow.log | +------------------------------+---------------------------------------------------------+ |
Para visualizar todas as variáveis de controle do MySQL, digite o comando abaixo:
mysql> show global variables;
Pessoal recomendo que leiam as fontes nas quais utilizei para formular este post aqui:
http://wiki.portugal-a-programar.pt/dev_geral:bases_de_dados:mysql:performance_e_optimizacao_mysql
http://www.oficinadanet.com.br/artigo/mysql/limitacoes-mysql-parte-4-um-thread-por-conexao
http://mirror.neu.edu.cn/mysql/doc/refman/4.1/pt/memory-use.html
http://xoops.net.br/docs/mysql/manual/ch05s04.php
http://certificacaobd.com.br/2012/03/07/section-1-mysql-architecture-10-how-mysql-uses-memory/
Acredito que com essa contribuição possa estar ajudando aos colegas DBA’s que estão estudando sobre MySQL e Desenvolvedores também. Quaisquer dúvidas sobre o post estarei disponível para ajudá-los. Que a Graça e Paz estejam com vocês.
Veja o post anterior desta série abaixo:
https://cooperati.com.br/2012/09/24/mysql-srie-de-posts-5-utilitrio-de-administrao/