Truques úteis para encontrar e corrigir consultas lentas no banco de dados do WordPress
Consultas SQL moderadas podem atrapalhar a execução do site de desenvolvimento de aplicativos WordPress. De vez em quando, consultas moderadas são um efeito colateral de SQL inadequadamente estruturado que nunca deveria ter sido feito dessa maneira.
Além do mais, em alguns casos, as perguntas moderadas eram, na verdade, perguntas rápidas em um determinado ponto – mas, à medida que o site se tornava mais experiente, a consulta ficava cada vez mais lenta, impotente para ficar ciente do extenso banco de dados.
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 suficiente para fazer melhorias personalizadas. Criar sem nenhuma 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 blogging, e continua se destacando por isso. Seja como for, ele evoluiu para um sistema de gerenciamento de conteúdo (CMS) totalmente desenvolvido e, para alguns propósitos, pode até mesmo criar um aplicativo da web poderoso – rapidamente e com um plano de gastos fundamentalmente mais baixo do que a melhoria personalizada. Embora o WordPress ofereça aplicativos de desenvolvimento embutidos, ele pode ser usado para aplicativos da web, a fim de torná-lo 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 mostrados, algum trabalho extra é necessário.
Encontrar consultas lentas
Encontrar a origem de perguntas moderadas inclui duas etapas:
- Descobrir quais perguntas são realmente as moderadas.
- Identificar o programa que os está operando.
Deve-se dar uma olhada em dois módulos e um SaaS que podem permitir que eles encontrem 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 todo um conjunto de dados sobre as atividades internas do WordPress, ele fornece uma análise ponto a ponto de:
- Quantas perguntas ocorreram sobre essa demanda?
- Qual consulta na página levou o tempo máximo?
- 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 até 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 um 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:
- Parâmetros de WP_Query
- Solicitar dados (contando a coordenação das regras de reformulação)
- Consultas SQL produzidas pela página atual
Para ativar o SQL seguinte na barra de depuração, o usuário deve permitir SAVEQUERIES em algum lugar do site, provavelmente em wp-config.php
Cuidado: SAVEQUERIES afeta a execução no site e, presumivelmente, não deve ser utilizado em um servidor de geração. No entanto, 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, não fornece as tabelas classificáveis nem apresenta perguntas moderadas para o usuário. O que a Debug Bar fornece é uma capacidade de acompanhamento que direciona o usuário precisamente na direção da origem de uma pergunta.
Este é um resumo dos documentos que são carregados e das capacidades que resultam na consulta que está sendo executada. Na maioria das vezes, alguém está interessado na seção contínua contínua 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 sobre por que o SQL foi executado em qualquer caso.
NewRelic
NewRelic é uma administração que mede e monitora a execução do desenvolvimento de aplicativos da 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 detalhes minuciosos para consultas SQL.
Existem dois contrastes notáveis entre o NewRelic e os módulos que mencionamos anteriormente:
- NewRelic dá muito mais informações sobre a execução do PHP, até o cálculo exato do tempo gasto em cada função
- O NewRelic rastreia cada demanda para o site fora de vista, para que seja possível consultá-lo mais tarde para descobrir SQL moderado. Os módulos apenas fornecem a página atual.
É importante que o NewRelic tenha um nível de serviço gratuito que forneça dados gerais sobre o funcionamento do site, mas que será necessário mudar para um plano pago para as probabilidades e fins sofisticados para verificar demandas específicas e encontrar consultas moderadas.
Compreendendo 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 EXPLAIN do MySQL pode permitir, er, esclarecer o que está acontecendo. Adicionar EXPLAIN no início de uma consulta indica como o MySQL executa uma pergunta. Para consultas complicadas, o EXPLAIN pode ajudar a distinguir focos moderados nos SQLs, por exemplo, subconsultas moderadas ou atividades inúteis.
Corrigindo consultas lentas
Uma vez que se sabe que as consultas são moderadas, e o EXPLAIN revelou ao usuário por que é, deve-se dar uma olhada em algumas opções para corrigir esses problemas sonolentos.
Opção 1: distorcendo a pergunta
Pode haver uma questão que está deixando a tela de Editar postagem em um ritmo muito lento. A consulta era um pedaço da caixa meta 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 seg
Pode-se desenvolver uma consulta que resulta em saídas semelhantes. Tem que ser escolhido como meta_keys único. Excepcional é uma palavra equivalente a particular, que por acaso é uma explicação SQL!
Opção 2: Adicionar um índice
Enquanto o usuário está executando uma pergunta SQL em uma tabela MySQL definida, ele precisa examinar toda a tabela 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 a tornar as informações muito menos difíceis de encontrar. 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 um pouco com isso:
0,0041 seg
0,0023 seg
0,0030 seg
0,0025 seg
0,0019 seg
Isso é extremamente inteligente.
Uma expressão de alerta em arquivos: Toda vez que INSERT cria uma coluna ou UPDATE é utilizado em uma tabela af, a lista é redeterminada, 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 índice posicionada 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 ela apenas afaste os efeitos posteriores da investigação. Dessa forma, limitaria a regularidade com que a investigação era realizada e obteria um “passe livre” com mais frequência do que não.
A API WordPress Transients é uma das formas de reservar as consultas. Os transientes são utilizados para eliminar as consequências de tarefas dispendiosas, por exemplo,
- Solicitações para sites externos (por exemplo, obter postagens contínuas no Facebook)
- Pedaços lentos de manuseio (por exemplo, buscando 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, dezessete abordagens diferentes para entender essa investigação moderada. Qual abordagem deve ser tomada?
A escolha 1 (alterar a pergunta) produziu resultados brilhantes. No entanto, deve-se considerar a possibilidade de que a consulta modificada geralmente não tenha resultados semelhantes. Alguém poderia inadvertidamente burlar o código com uma pergunta um tanto estranha.
A alternativa 2 (incluindo um registro) nem sempre é concebível, dependendo da tabela e seções utilizadas pela consulta. Por conta das tabelas do centro de desenvolvimento de aplicativos 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á diferentes consultas, como 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. No caso específico de alguém, ele pode escolher outra alternativa com base na questão que está corrigindo ou no site específico com problemas de SQL. Certamente não há uma resposta única para a maioria dos problemas de execução, portanto, é permitido divergir da decisão do outro – ou tentar cada um dos três sem demora!
Mantendo-se atualizado
Ele esboçou um problema genuíno aqui. A caixa Custom Fields em CSS-Tricks realmente era um ofensor para algumas consultas de banco de dados extremamente moderadas. Da mesma forma, esboçou várias maneiras de possíveis acordos.
Concepção de novas ideias
Existem diferentes metodologias que podem ser adotadas para tentar acelerar a execução de perguntas que envolvem mais trabalho do que simplesmente ajustar a consulta ou incluir uma lista. Uma das partes mais lentas da questão é o trabalho feito para juntar as tabelas para ir do id do cliente ao id do item, e é preciso fazer isso para cada cliente.
Pode-se desnormalizar as informações criando uma tabela que armazene as informações de permissão, juntamente com o ID do cliente e o ID do item para todas as licenças e simplesmente fazer uma consulta para um cliente específico. Seria necessário modificar a tabela utilizando gatilhos 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 reduzirem a questão no MySQL, pode ser mais rápido dividir a consulta em pelo menos duas articulações e executá-las independentemente em PHP e depois coletar e canalizar os resultados em código.