Resumo
MySQL é um sistema de gerenciamento de banco de dados de relacionamento desenvolvido nas linguagens de programação C e C, criado pela MySQL AB, fundada por David Axmark, Allan Larsson e Michael Widenius. A versão mais recente é MySQL 9.0.
MySQL é um projeto de código aberto com licença GNU.
MySQL é o sistema de gerenciamento de banco de dados mais popular e útil atualmente porque é de código aberto, possui recursos completos e alto desempenho.
Arquitetura
- Diagrama de arquitetura MySQL: Fonte
Camada Cliente
- A primeira camada da arquitetura do sistema MySQL.
- Os serviços importantes desta camada são Tratamento de Conexão, Autenticação e Segurança.
- Manuseio de conexão: gerencia conexões de clientes. Quando um cliente deseja se conectar ao servidor MySQL, um novo thread é criado para a conexão. O servidor armazena threads em cache quando novas conexões são criadas.
- Autenticação: Quando um cliente se conecta a um servidor, ele deve fornecer informações de autenticação para estabelecer uma conexão. Normalmente, os clientes se autenticam usando um nome de usuário e uma senha.
- Segurança: MySQL oferece muitos recursos para proteger o banco de dados e verificar as permissões do usuário após a autenticação.
Camada de Servidor
- A próxima camada do MySQL é responsável por processar instruções de consulta e fornecer muitos utilitários.
- Os principais recursos:
- Analisador: quando um cliente solicita uma instrução de consulta, o servidor a analisa para criar uma árvore de consulta, reescreve a consulta e define a ordem e os índices a serem usados para executar a instrução de consulta.
- Otimizador: otimiza a instrução da consulta antes da execução. O otimizador não se importa com qual mecanismo é usado, mas o mecanismo de armazenamento pode impactar a otimização da consulta específica.
- Cache de consulta: O cache de consulta armazena o resultado de uma instrução de consulta. Se um cliente solicitar a mesma consulta novamente, o servidor retornará o resultado armazenado em cache, ignorando as etapas de análise e otimização. Este recurso foi descontinuado na versão 8.0 ou superior devido ao seu problema de gargalo.
- Serviços e utilidades:
- Backup e restauração
- Segurança: usuário do provedor e sistema de permissões
- Replicação: Este é um processo para copiar e sincronizar dados do servidor principal para vários servidores filhos.
- Conjunto
- Particionamento: Divida a tabela em várias partes usando uma lógica específica.
- Workbench: É uma ferramenta visual projetada para interagir e utilizar o MySQL.
Camada de armazenamento
- É uma camada de responsabilidade pela forma como armazenamos dados no banco de dados.
- Por padrão, o MySQL usa o mecanismo de armazenamento InnoDB.
- MySQL suporta muitos mecanismos de armazenamento diferentes:
- InnoDB (padrão)
- MeuISAM
- MEMÓRIA
- CSV
- ARQUIVO
- BURACO NEGRO
- FUNDIR
- FEDERADO
Otimize o desempenho para MySQL
Otimize a instrução SQL
Explique a declaração
- Previsão de consulta sem execução
explain sql_statememnt
- Explicar após a consulta de execução
explain analyze sql_statement
Técnica de Indexação
- Ele melhora o desempenho ao consultar e pesquisar.
- Ao criar um índice para múltiplas colunas, a primeira coluna é muito importante. Ele decide o desempenho de uma instrução de consulta. Por exemplo, se você criar um índice em (nome, aniversário), uma consulta usando a coluna 'nome' utilizará esse índice, mas uma consulta usando a coluna 'aniversário' não.
- Sintaxe para criação de novo índice:
create index idx_birthday on customers(birthday);
- O comando tornará o índice especificado inacessível ao otimizador de consulta, evitando assim que ele seja considerado para planos de execução de consulta:
alter table customers alter index idx_birthday invisible;
Partição
- Quando o tamanho de um banco de dados for maior que 2 GB (ou superior a 10 milhões de registros), você deverá usar o particionamento para esse banco de dados.
- Ao usar o particionamento, o desempenho melhorará.
- O plano de partição deve ser baseado na coluna que é frequentemente usada nas cláusulas WHERE.
Otimize os parâmetros do banco de dados
Acerto no cache de buffer
- É a porcentagem de dados que o sistema carrega do cache do buffer em vez do armazenamento físico.
- Se a porcentagem for inferior a 90%, você deverá otimizá-la.
- Depende de 2 parâmetros:
-
Innodb_buffer_pool_read_requests: Total de solicitações enviadas ao Buffer Pool. Comando: mostre o status global como '%Innodb_buffer_pool_read_requests%
-
Innodb_buffer_pool_reads: O total de solicitações que não são encontradas no buffer pool na memória deve ser lido do disco. Comando: mostre o status global como '%Innodb_buffer_pool_reads%
- Fórmula de cálculo:
(Innodb_buffer_pool_read_requestss - Innodb_buffer_pool_reads) x100 / Innodb_buffer_pool_read_requests
Acerto no cache da tabela
- O MySQL armazenará a tabela em cache para consultá-la rapidamente na memória.
- Se a porcentagem for inferior a 80%, você deverá otimizá-la.
- Depende de 2 parâmetros:
-
Open_tables: Total de tabelas abertas no cache. Comando: mostra o status global como 'Open_tables
-
Opened_tables: Total de tabelas abertas. Comando: mostra o status global como 'Opened_tables
- Fórmula de cálculo: Open_tables/Opened_tables
Acerto de cache de definição de tabela
- Ao executar uma consulta, o MySQL requer informações sobre a tabela, como nome, número de colunas e número de linhas. Essas informações são chamadas de definição de tabela.
- Se a porcentagem for inferior a 80%, você deverá otimizá-la.
- Depende de 2 parâmetros:
-
Open_table_definitions: tabelas de definição total estão em cache. Comando: mostra o status global como 'Open_table_definitions'
-
Opened_tables: São solicitadas tabelas de definição total. Comando: mostra o status global como 'Opened_tables'
- Fórmula de cálculo: Open_table_definitions/Opened_table_definitions
Tabela temporária na memória
- Muitas instruções SQL como Order, Group By, ... devem usar uma tabela temporária.
- Se a porcentagem for inferior a 80%, você deverá otimizá-la.
- Depende de 2 parâmetros:
-
Criado_tmp_disk_tables: O total de tabelas temporárias são criadas no disco. Comando: mostre o status global como '%Created_tmp_disk_tables%
-
Criado_tmp_tables: o total de tabelas temporárias são criadas. Comando: mostre o status global como '%Created_tmp_tables%
- Fórmula de cálculo: (Created_tmp_tables - Criado_tmp_disk_tables)/Criado_tmp_tables
Conclusão
Este blog oferece conhecimento baseado em pesquisa sobre MySQL. MySQL é um sistema de gerenciamento de banco de dados relacional conhecido por seu baixo custo, amplas utilidades e alto desempenho, tornando-o adequado para uma ampla gama de projetos. Embora este blog cubra muitos recursos e aspectos do MySQL, há mais para explorar. Irei me aprofundar em recursos e conhecimentos adicionais em blogs futuros.
Obrigado por ler e até meu próximo blog.
Documento de referência
- Documentação MySQL
- Curso MySQL - Tran Quoc Huy
- Wikipédia - MySQL