Práticas recomendadas para resolver problemas de desempenho do banco de dados

Este artigo discute como corrigir problemas de banco de dados que afetam negativamente o desempenho do banco de dados no Adobe Commerce em sites de infraestrutura em nuvem.

Versões afetadas

Adobe Commerce na infraestrutura em nuvem

Identificar e resolver consultas longas

Determine se há consultas MySQL de execução lenta. Dependendo do plano de infraestrutura em nuvem do Adobe Commerce e, portanto, da disponibilidade de ferramentas, você pode fazer o seguinte.

Analisar consultas de banco de dados com o MySQL

Você pode usar o MySQL para identificar e resolver consultas de longa execução em qualquer projeto do Adobe Commerce na infraestrutura em nuvem.

  1. Execute o SHOW \[FULL\] PROCESSLIST declaração.
  2. Se você vir consultas longas, execute MySQL EXPLAIN e EXPLAIN ANALYZE para cada uma delas, para descobrir o que faz com que a consulta seja executada por um longo tempo.
  3. Com base nos problemas encontrados, siga as etapas para corrigir a consulta para que ela seja executada mais rapidamente.

Analisar consultas usando o Percona Toolkit (somente para arquitetura Pro)

Se seu projeto do Adobe Commerce for implantado na arquitetura Pro, você poderá usar o Percona Toolkit para analisar consultas.

  1. Execute o pt-query-digest --type=slowlog comando em logs de consulta lenta do MySQL.

    • Para encontrar o local dos logs de consultas lentas, consulte Log locations > Service Logs(https://devdocs.magento.com/cloud/project/log-locations.html#service-logs) em nossa documentação para desenvolvedores.
    • Consulte a Percona Toolkit > pt-query-digest documentação.
  2. Com base nos problemas encontrados, siga as etapas para corrigir a consulta para que ela seja executada mais rapidamente.

Verificar se todas as tabelas têm uma chave primária

A definição de chaves primárias é um requisito para um bom design de banco de dados e tabela. As chaves primárias fornecem uma maneira de identificar exclusivamente uma única linha em qualquer tabela.

Se você tiver tabelas sem uma chave primária, o mecanismo de banco de dados padrão para o Adobe Commerce (InnoDB) usará a primeira chave exclusiva não nula como chave primária. Se nenhuma chave exclusiva estiver disponível, o InnoDB criará uma chave primária oculta (6 bytes). O problema com uma chave primária definida implicitamente é que você não tem controle sobre ela. Além disso, o valor implícito é atribuído globalmente para todas as tabelas sem chaves primárias. Essa configuração pode causar problemas de contenção se você executar gravações simultâneas nessas tabelas. Isso pode levar a problemas de desempenho, pois as tabelas também compartilham o incremento de índice de chave primária oculta global.

Evite esses problemas definindo uma chave primária para qualquer tabela que não tenha uma.

Identificar e atualizar tabelas sem uma chave primária

  1. Identifique tabelas sem uma chave primária usando a seguinte consulta SQL:

    code language-sql
    SELECT table_catalog, table_schema, table_name, engine FROM information_schema.tables        WHERE (table_catalog, table_schema, table_name) NOT IN (SELECT table_catalog, table_schema, table_name FROM information_schema.table_constraints  WHERE constraint_type = 'PRIMARY KEY') AND table_schema NOT IN ('information_schema', 'pg_catalog');
    
  2. Para qualquer tabela sem uma chave primária, adicione uma chave primária atualizando o db_schema.xml (o schema declarativo) com um nó semelhante ao seguinte:

    code language-html
    <constraint xsi:type="primary" referenceId="PRIMARY">         <column name="id_column"/>     </constraint>
    

    Ao adicionar o nó, substitua a variável referenceID e column name variáveis com seus valores personalizados personalizados.

Para obter mais informações, consulte Configurar esquema declarativo na documentação do desenvolvedor.

Identificar e remover índices duplicados

Identifique os índices duplicados no banco de dados e remova-os.

Verificar índices duplicados

Para verificar se há índices duplicados na arquitetura de nuvem Pro ou Starter, execute a seguinte consulta de SQL.

SELECT s.INDEXED_COL,GROUP_CONCAT(INDEX_NAME) FROM (SELECT INDEX_NAME,GROUP_CONCAT(CONCAT(TABLE_NAME,'.',COLUMN_NAME) ORDER BY CONCAT(SEQ_IN_INDEX,COLUMN_NAME)) 'INDEXED_COL' FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'db?' GROUP BY INDEX_NAME)as s GROUP BY INDEXED_COL HAVING COUNT(1)>1

A consulta retorna os nomes das colunas e os nomes de índices duplicados.

Os comerciantes de arquitetura Pro também podem executar a verificação usando o Percona Toolkit [pt-duplicate-key checker](https://www.percona.com/doc/percona-toolkit/LATEST/pt-duplicate-key-checker.html%C2%A0) comando.

Remover índices duplicados

Usar o SQL Instrução DROP INDEX para remover índices duplicados.

DROP INDEX

Informações adicionais

Práticas recomendadas de configuração de banco de dados para implantações em nuvem

recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60