Bom pessoal a intenção 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 objetivo de esclarecer, 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, otimizaçã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)

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJWNvbm5lY3Rpb25zJeKAmTs=” hover_enabled=”0″]bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJWNvbm5lY3Rpb25zJeKAmTs=[/et_pb_dmb_code_snippet]

Verifica threads em cache:0 (variável thread_cache_size)

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYdGhyZWFkXyXigJk7″ hover_enabled=”0″]bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYdGhyZWFkXyXigJk7[/et_pb_dmb_code_snippet]

Verifica tamanho da pilha de threads: (variável thread_stack)

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJXRocmVhZF9zdGFjayXigJk7″ hover_enabled=”0″]bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJXRocmVhZF9zdGFjayXigJk7[/et_pb_dmb_code_snippet]

Verifica tamanho do buffer de conexões de rede:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJW5ldF9idWZmZXIl4oCZOyAodmFyacOhdmVsIG5ldF9idWZmZXJfbGVuZ3RoKQpteXNxbD4gc2hvdyB2YXJpYWJsZXMgbGlrZSDigJglbWF4X2FsbG93ZWQl4oCZOyAodmFyacOhdmVsIG1heF9hbGxvd2VkX3BhY2tldCk=” hover_enabled=”0″]bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJW5ldF9idWZmZXIl4oCZOyAodmFyacOhdmVsIG5ldF9idWZmZXJfbGVuZ3RoKQpteXNxbD4gc2hvdyB2YXJpYWJsZXMgbGlrZSDigJglbWF4X2FsbG93ZWQl4oCZOyAodmFyacOhdmVsIG1heF9hbGxvd2VkX3BhY2tldCk=[/et_pb_dmb_code_snippet]

Verifica tamanho do buffer de memória de leitura:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJXJlYWRfYnVmZmVyJeKAmTsgKHZhcmnDoXZlbCByZWFkX2J1ZmZlcl9zaXplKQpteXNxbD4gc2hvdyB2YXJpYWJsZXMgbGlrZSDigJglcmVhZF9ybmQl4oCZOyAodmFyacOhdmVsIHJlYWRfcm5kX2J1ZmZlcl9zaXplKQ==” hover_enabled=”0″]bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJXJlYWRfYnVmZmVyJeKAmTsgKHZhcmnDoXZlbCByZWFkX2J1ZmZlcl9zaXplKQpteXNxbD4gc2hvdyB2YXJpYWJsZXMgbGlrZSDigJglcmVhZF9ybmQl4oCZOyAodmFyacOhdmVsIHJlYWRfcm5kX2J1ZmZlcl9zaXplKQ==[/et_pb_dmb_code_snippet]

Verifica quantidade permitida de armazenamento de tabelas temporárias: (variável tmp_table_size)

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJXRtcF90YWJsZV9zaXplJeKAmTs=” hover_enabled=”0″]bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJXRtcF90YWJsZV9zaXplJeKAmTs=[/et_pb_dmb_code_snippet]

Informação referente ao suporte de cache de queries:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJXF1ZXJ5JeKAmTsKCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKfCBWYXJpYWJsZV9uYW1lIHwgVmFsdWUgfAoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgp8IGZ0X3F1ZXJ5X2V4cGFuc2lvbl9saW1pdCB8IDIwIHwKCnwgaGF2ZV9xdWVyeV9jYWNoZSB8IFlFUyB8Cgp8IGxvbmdfcXVlcnlfdGltZSB8IDEwLjAwMDAwMCB8Cgp8IHF1ZXJ5X2FsbG9jX2Jsb2NrX3NpemUgfCA4MTkyIHwKCnwgcXVlcnlfY2FjaGVfbGltaXQgfCAxMDQ4NTc2IHwKCnwgcXVlcnlfY2FjaGVfbWluX3Jlc191bml0IHwgNDA5NiB8Cgp8IHF1ZXJ5X2NhY2hlX3NpemUgfCAwIHwKCnwgcXVlcnlfY2FjaGVfdHlwZSB8IE9OIHwKCnwgcXVlcnlfY2FjaGVfd2xvY2tfaW52YWxpZGF0ZSB8IE9GRiB8Cgp8IHF1ZXJ5X3ByZWFsbG9jX3NpemUgfCA4MTkyIHwKCnwgc2xvd19xdWVyeV9sb2cgfCBPRkYgfAoKfCBzbG93X3F1ZXJ5X2xvZ19maWxlIHwgL29wdC9iaXRuYW1pL215c3FsL2RhdGEvdGVzdGUtc2xvdy5sb2cgfAoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r” hover_enabled=”0″]bXlzcWw+IHNob3cgdmFyaWFibGVzIGxpa2Ug4oCYJXF1ZXJ5JeKAmTsKCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKfCBWYXJpYWJsZV9uYW1lIHwgVmFsdWUgfAoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgp8IGZ0X3F1ZXJ5X2V4cGFuc2lvbl9saW1pdCB8IDIwIHwKCnwgaGF2ZV9xdWVyeV9jYWNoZSB8IFlFUyB8Cgp8IGxvbmdfcXVlcnlfdGltZSB8IDEwLjAwMDAwMCB8Cgp8IHF1ZXJ5X2FsbG9jX2Jsb2NrX3NpemUgfCA4MTkyIHwKCnwgcXVlcnlfY2FjaGVfbGltaXQgfCAxMDQ4NTc2IHwKCnwgcXVlcnlfY2FjaGVfbWluX3Jlc191bml0IHwgNDA5NiB8Cgp8IHF1ZXJ5X2NhY2hlX3NpemUgfCAwIHwKCnwgcXVlcnlfY2FjaGVfdHlwZSB8IE9OIHwKCnwgcXVlcnlfY2FjaGVfd2xvY2tfaW52YWxpZGF0ZSB8IE9GRiB8Cgp8IHF1ZXJ5X3ByZWFsbG9jX3NpemUgfCA4MTkyIHwKCnwgc2xvd19xdWVyeV9sb2cgfCBPRkYgfAoKfCBzbG93X3F1ZXJ5X2xvZ19maWxlIHwgL29wdC9iaXRuYW1pL215c3FsL2RhdGEvdGVzdGUtc2xvdy5sb2cgfAoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r[/et_pb_dmb_code_snippet]

Para visualizar todas as variáveis de controle do MySQL, digite o comando abaixo:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”bXlzcWw+IHNob3cgZ2xvYmFsIHZhcmlhYmxlczs=” hover_enabled=”0″]bXlzcWw+IHNob3cgZ2xvYmFsIHZhcmlhYmxlczs=[/et_pb_dmb_code_snippet]

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.