Truques úteis para encontrar e corrigir consultas lentas ao banco de dados do WordPress

Publicados: 2019-04-17

Consultas SQL moderadas podem prejudicar a execução do site de desenvolvimento de aplicativos WordPress. De vez em quando, consultas moderadas são um efeito colateral de SQL inadequadamente estruturada que nunca deveria ter sido feita dessa maneira.

Além do mais, em alguns casos, consultas moderadas eram, na realidade, perguntas rápidas em um certo ponto - mas à medida que o site se tornava mais experiente, a consulta ficava cada vez mais lenta, impotente para ficar ciente do banco de dados em expansão.

Apesar de como o SQL ficou moderado, deve-se investigar algumas abordagens para descobrir e corrigir problemas no desenvolvimento de aplicativos WordPress. Aqui e ali, pode-se exigir determinado aplicativo da web e pode não ter energia, aptidão ou plano de gastos suficientes para fazer melhorias personalizadas. Criar sem qualquer preparação pode ser a resposta para alguns problemas, mas pode demorar mais do que começar a partir de uma base de código atual. O WordPress foi inicialmente estruturado como um estágio de blog, e continua se destacando por isso. Seja como for, ele avançou para um sistema de gerenciamento de conteúdo (CMS) completo e, para alguns propósitos, pode até criar um aplicativo da Web forte - rapidamente e com um plano de gastos fundamentalmente menor do que a melhoria personalizada. Embora o WordPress ofereça aplicativos de desenvolvimento integrados, ele pode ser usado para aplicativos da Web, para torná-lo ainda mais útil. As estruturas inerentes de página e postagem podem ser utilizadas para muitas coisas, mas se alguém precisar de informações e campos personalizados para serem incluídos, procurados ou questionados, controlados e exibidos, será necessário algum trabalho extra.

Encontrando consultas lentas

Encontrar a origem de perguntas moderadas inclui duas etapas:

  1. Descobrir quais perguntas são realmente as moderadas.
  2. Identificando o programa que os está operando.

Deve-se dar uma olhada em dois módulos e um SaaS que pode permitir que eles descubram consultas moderadas.

Monitor de consultas

Para obter informações sobre a página que está sendo executada no momento, este módulo pode ser usado. Apesar de um cluster inteiro de dados sobre as atividades internas do WordPress, ele fornece uma divisão ponto a ponto de:

  • Quantas perguntas ocorreram sobre essa demanda?
  • Qual consulta na página levou o máximo de tempo?
  • Quais capacidades investiram mais energia em questões de SQL?
  • Se essas consultas se originaram de módulos, assuntos ou do centro do WordPress

A tela de consulta ainda reconhece perguntas moderadas com conteúdo vermelho enervante, o que torna muito simples selecionar o problema SQL.

Barra de depuração

Outro instrumento fenomenal para encontrar SQL extremamente moderado é o antigo e confiável módulo Debug Bar. A barra de depuração fornece um dado sobre o funcionamento interno do WordPress quando uma página é carregada com assuntos como:

  1. Parâmetros de WP_Query
  2. Solicitar dados (coordenando as regras de renovação de contagem)
  3. Consultas SQL produzidas pela página atual

Para habilitar o seguimento do SQL na Barra de Depuração, o usuário deve fazer questão de permitir SAVEQUERIES em algum lugar do site—provavelmente em wp-config.php

Atenção: SAVEQUERIES afeta a execução no site e, presumivelmente, não deve ser utilizado em um servidor de geração. No entanto, ele pode ser usado em uma máquina de avanço.

Encontrar o SQL moderado não é extremamente fácil com a Barra de Depuração. Por exemplo, ele não fornece as tabelas classificáveis ​​ou apresenta consultas moderadas para o usuário. O que o Debug Bar oferece é um acompanhamento de capacidade que direciona o usuário precisamente para a direção da origem de uma pergunta.

Este é um resumo dos documentos que são carregados e as capacidades que resultam na consulta que está sendo executada. Na maioria das vezes, a pessoa está interessada na seção de continuidade absoluta no resumo; este é o lugar onde a pergunta moderada foi executada e onde se deve começar sua caçada. O conveniente de ter a configuração de cada capacidade que leva a essa pergunta é que ela pode revelar uma visão do motivo pelo qual o SQL foi executado em qualquer caso.

NewRelic

NewRelic é uma administração que mede e rastreia a execução do desenvolvimento de aplicativos web, incluindo o desenvolvimento de aplicativos WordPress. A administração fornece uma tonelada métrica de dados sobre a execução do site. É tudo menos difícil perder todo o senso de direção nas informações que o NewRelic fornece ao usuário a cada minuto em detalhes para consultas SQL.

Existem dois contrastes notáveis ​​entre o NewRelic e os módulos que mencionamos antes:

  1. NewRelic fornece muito mais informações sobre a execução do PHP, até o cálculo exato do tempo gasto em cada função
  2. O NewRelic rastreia cada demanda para o site fora de vista, para que possa ser consultado posteriormente para descobrir SQL moderado. Os módulos apenas lhe dão a página atual.

É importante que o NewRelic tenha um nível de arranjo gratuito que forneça dados gerais sobre a execução do site, no entanto, será necessário passar para um arranjo pago para as probabilidades e fins extravagantes para verificar demandas singulares e encontrar consultas moderadas.

Entendendo uma consulta lenta com EXPLAIN

Até este ponto, os dispositivos foram protegidos para encontrar perguntas moderadas. Atualmente, deve-se saber por que essas investigações estão atrapalhando as coisas.

A palavra de ordem MySQL EXPLAIN pode permitir, er, esclarecer o que está acontecendo. Adicionar EXPLAIN ao início de uma consulta indica como o MySQL executa uma questão. Para consultas complicadas, EXPLAIN pode ajudar a distinguir focos moderados nos SQLs, por exemplo, subconsultas moderadas ou atividades desnecessárias.

Corrigindo consultas lentas

Uma vez que se percebe que as consultas são moderadas, e EXPLAIN revelou ao usuário por que isso acontece, deve-se dar uma olhada em algumas opções para corrigir esses problemas sonolentos.

Opção 1: torcendo a pergunta

Pode haver uma pergunta que está deixando a tela de Editar Post muito lenta. A consulta era um pedaço da meta-caixa de Campos Personalizados.

A parte definitiva do SQL está trazendo uma lista meta_keys da tabela ks29so_postmeta que com toda a probabilidade não começa com o sinal de sublinhado. A explicação GROUP BY implica que cada resultado é especial.

Executando esta consulta várias vezes, aqui está o tempo que pode levar:

1,7145 seg.

1,7911 seg.

1,8076 seg.

1,7707 seg.

1,8456 segundos

Pode-se desenvolver uma consulta que resulte em saídas semelhantes. Tem que ser escolhido como meta_keys único. Excepcional é uma palavra equivalente para particular, que por acaso é uma explicação SQL!

Opção 2: Adicionando um Índice

Enquanto o usuário está executando uma pergunta SQL em uma tabela MySQL definida, ele precisa examinar a tabela inteira para entender quais são as linhas que são significativas para a consulta específica. No momento em que a mesa fica enorme, essa verificação começa a demorar um pouco.

É aí que entram os registros do MySQL. As listas pegam as informações em uma tabela e as organizam de forma que as informações sejam muito menos difíceis de serem encontradas. Ao classificar as informações de uma maneira específica, os arquivos ajudam a diminuir a medida de filtragem que o MySQL realiza para cada consulta.

Os arquivos podem ser adicionados a segmentos únicos ou em várias seções.

Com um arquivo em meta_key, o primeiro tempo de pergunta SQL se parece com isso:

0,0041 seg.

0,0023 segundos

0,0030 seg.

0,0025 segundos

0,0019 seg

Isso é extremamente inteligente.

Uma expressão de alerta em arquivos: Toda vez que INSERT faz uma coluna ou UPDATE é utilizado em uma tabela f, a lista é re-determinada, o que pode ser uma atividade cara. Os registros tornam a leitura da tabela mais rápida, mas a gravação é mais lenta. Embora uma lista de índices colocada corretamente possa funcionar extremamente bem, não se deve ficar obcecado por ela sem verificar os impactos gerais da lista no banco de dados.

Opção 3: armazenar em cache os resultados da consulta

Uma vez que se percebe que há uma questão moderada. Em vez de mudar a pergunta, pode haver um cenário em que ele apenas ponha de lado os efeitos posteriores da investigação. Dessa forma, a pessoa limitaria a regularidade da investigação e obteria um “passe livre” na maioria das vezes.

A API do WordPress Transients é uma das formas de reservar as consultas. Os transientes são utilizados para afastar as consequências de tarefas caras, por exemplo,

  • Solicitações para sites externos (por exemplo, obter postagens em andamento no Facebook)
  • Manuseio lento (por exemplo, buscar cordas enormes com uma articulação habitual)
  • Consultas de banco de dados lentas!
Escolhendo uma abordagem

Existem várias alternativas que foram apresentadas, e provavelmente há dezessete abordagens diferentes para entender essa investigação moderada. Qual abordagem deve ser adotada?

A opção 1 (mudando a pergunta) rendeu resultados brilhantes. No entanto, deve-se considerar a possibilidade de que o inquérito modificado geralmente não tenha resultados semelhantes. Pode-se involuntariamente burlar o código com uma pergunta um tanto estranha.

A alternativa 2 (incluindo um registro) não é sempre concebível dependendo da tabela e das seções utilizadas pela pesquisa. Por conta das tabelas centrais de desenvolvimento de aplicativos do WordPress, seria necessário enfatizar os outros efeitos dos registros:

  • A rotina de atualização do centro espera listas adicionais?
  • A inclusão de um arquivo moderará consultas diferentes, semelhantes a INSERT e UPDATE?

A alternativa 3 (reservar os resultados por meio de moradores de rua) tem efeito insignificante – o usuário não precisa alterar a primeira consulta e não há necessidade de ajustar a estrutura do banco de dados.

Normalmente, as pessoas optam pela opção 3. Em seu caso específico, ele pode escolher outra alternativa dependendo da questão que está corrigindo ou do site específico com problemas de SQL. Certamente não há uma resposta de medida única para a maioria dos problemas de execução, então é permitido discordar da decisão do outro - ou tentar cada uma das três sem demora!

Manter-se atualizado

Ele esboçou um problema genuíno aqui. A caixa Custom Fields em CSS-Tricks realmente foi um ofensor para algumas consultas de banco de dados extremamente moderadas. Da mesma forma, esboçou vários caminhos para possíveis arranjos.

Conceber novas ideias

Existem diferentes metodologias que podem ser adotadas para tentar acelerar a execução de perguntas que incluem mais trabalho do que simplesmente ajustar a pergunta ou incluir uma lista. Uma das partes mais lentas da questão é o trabalho feito para unir as tabelas para ir de client id para item id, e é preciso fazer isso para cada cliente.

Pode-se desnormalizar as informações criando uma tabela que armazena as informações de permissão, juntamente com o ID do cliente e o ID do item para todas as licenças e simplesmente consultando isso para um determinado cliente. Seria necessário modificar a tabela utilizando os gatilhos do MySQL em INSERT/UPDATE/DELETE para a tabela de licenças (ou outros dependendo de como as informações podem mudar), mas isso melhoraria significativamente a execução do questionamento dessas informações.

Assim, se várias junções moderar a questão no MySQL, pode ser mais rápido quebrar a consulta em pelo menos duas articulações e executá-las independentemente em PHP e depois reunir e canalizar os resultados em código.