"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Pesquisa para arquitetura MySQL e otimização de desempenho

Pesquisa para arquitetura MySQL e otimização de desempenho

Publicado em 2024-08-21
Navegar:364

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

Research for MySQL architecture and Optimize performance

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
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/tuantran12/research-for-mysql-architecture-and-optimize-performance-5261?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3