Simplifique o diagnóstico de desempenho de consultas no Amazon Redshift com o Question Profiler


Redshift da Amazon é um information warehouse em nuvem rápido, escalonável, seguro e totalmente gerenciado que permite analisar seus dados em escala. Amazon Redshift sem servidor permite acessar e analisar dados sem as configurações usuais de um information warehouse provisionado. Os recursos são provisionados automaticamente e a capacidade do information warehouse é dimensionada de forma inteligente para oferecer desempenho rápido até mesmo para as cargas de trabalho mais exigentes e imprevisíveis. Se preferir gerenciar os recursos do Amazon Redshift manualmente, você poderá criar clusters provisionados para suas necessidades de consulta de dados. Para obter mais informações, consulte Clusters do Amazon Redshift.

O Amazon Redshift fornece métricas e dados de desempenho para que você possa monitorar a integridade e o desempenho de clusters provisionados, grupos de trabalho sem servidor e bancos de dados. Os dados de desempenho que você pode usar no console do Amazon Redshift se enquadram em duas categorias:

  • Métricas do Amazon CloudWatch – Ajuda a monitorar os aspectos físicos do seu cluster ou sem servidor, como utilização de recursos, latência e taxa de transferência.
  • Consultar e carregar dados de desempenho – Ajuda a monitorar a atividade do banco de dados, inspecionar e diagnosticar problemas de desempenho de consulta.

Amazon Redshift introduziu um novo recurso chamado Consultar perfilador. O Question Profiler é uma ferramenta gráfica que ajuda os usuários a analisar os componentes e o desempenho de uma consulta. Esse recurso faz parte do console do Amazon Redshift e fornece uma representação visible e gráfica da ordem de execução da consulta, do plano de execução e de diversas estatísticas. O Question Profiler facilita aos usuários a compreensão e a solução de problemas de suas consultas.

Nesta postagem, abordamos dois casos de uso comuns para solucionar problemas de desempenho de consultas. Mostramos passo a passo como analisar e solucionar problemas de consultas de longa duração usando o Question Profiler.

Visão geral

Para o Amazon Redshift Serverless, o Question profiler pode ser acessado acessando o console Serverless. Escolher Consulta e monitoramento de banco de dadosselecione uma consulta e navegue até o Plano de consulta guia. Se um plano de consulta estiver disponível, você observará uma lista de consultas filhas. Escolha uma consulta para visualizá-la no Question Profiler.

Para o Amazon Redshift provisionado, o Question Profiler pode ser acessado acessando o painel de clusters provisionados. Escolher Consulta e cargase escolha uma consulta. Navegue até o Plano de consulta guia. Se um plano de consulta estiver disponível, você observará uma lista de consultas filhas. Escolha uma consulta para visualizá-la no Question Profiler.

Pré-requisitos

  • Você pode usar o seguinte exemplo Gerenciamento de identidade e acesso da AWS (IAM) para configurar seu usuário ou função IAM com privilégios mínimos para acessar o Question Profiler no console da AWS. Se o usuário ou a função do IAM já tiver acesso ao Consulta e cargas seção do painel do cluster provisionado do Redshift ou Consulta e monitoramento de banco de dados seção do painel sem servidor do Redshift, nenhuma permissão adicional será necessária:
{
    "Model": "2012-10-17",
    "Assertion": (
        {
            "Impact": "Enable",
            "Motion": (
                "redshift:DescribeClusters",
                "redshift-serverless:ListNamespaces",
                "redshift-serverless:ListWorkgroups",
                "redshift-data:ExecuteStatement",
                "redshift-data:DescribeStatement",
                "redshift-data:GetStatementResult"
            ),
            "Useful resource": (
                "arn:aws:redshift-serverless:",
                "arn:aws:redshift-serverless:",
                "arn:aws:redshift:"
            )
        }
    )
}

  • Você pode optar por usar o Question Profiler em sua conta com um information warehouse e consultas existentes do Amazon Redshift. No entanto, se você quiser implementar esta demonstração em seu information warehouse existente do Amazon Redshift, baixe o pocket book Redshift question editor v2, Demonstração do criador de perfil de consulta Redshifte consulte o Carregamento de dados seção posteriormente nesta postagem.
  • Você deve se conectar ao cluster usando credenciais de banco de dados e conceder o sys:operator ou sys:monitor função para o usuário do banco de dados para visualizar consultas executadas pelos usuários.

Carregamento de dados

Editor de consultas do Amazon Redshift v2 vem com dados de amostra que pode ser carregado em um banco de dados de amostra e no esquema correspondente. Para testar o Question Profiler em relação aos dados de amostra, carregue os dados de amostra tpcds e execute consultas.

  1. Para carregar o tpcds dados de amostra, inicie o editor de consultas Redshift v2 e expanda o banco de dados sample_data_dev.
  2. Escolha o ícone associado ao tpcds.
  3. O editor de consultas v2 carrega os dados em um esquema tpcds no banco de dados amostra_dados_dev.

A captura de tela a seguir mostra essas etapas.
Simplifique o diagnóstico de desempenho de consultas no Amazon Redshift com o Question Profiler

  1. Verifique os dados executando o seguinte exemplo de consulta, conforme mostrado na captura de tela a seguir.
choose depend(*) from sample_data_dev.tpcds.buyer;

Verifique os dados

Casos de uso

Nesta postagem, descrevemos dois casos de uso comuns relacionados ao desempenho de consultas e como usar o Question Profiler para solucionar problemas de desempenho:

  1. Junções de loop aninhadas – Este tipo de junção é o mais lento dos tipos de junção possíveis. As junções de loop aninhadas são junções cruzadas sem uma condição de junção que resultam no produto cartesiano de duas tabelas.
  2. Distribuição de dados abaixo do excellent – Se a distribuição de dados estiver abaixo do excellent, você poderá notar uma grande transmissão ou redistribuição de dados entre nós de computação quando duas tabelas grandes forem unidas.

Caso de uso 1: junções de loop aninhadas

Para solucionar problemas de desempenho com junções de loop aninhado usando o Question Profiler, siga estas etapas:

  1. Importar bloco de notas baixado anteriormente em pré-requisitos seção do weblog no editor de consultas Redshift v2.
  2. Defina o contexto do banco de dados para sample_data_dev no Question Editor v2, conforme mostrado na captura de tela a seguir.
    Defina o contexto do banco de dados
  3. Correr cell #3 do pocket book de demonstração para diagnosticar um problema de desempenho de consulta relacionado a junções de loop aninhadas.
    Etapa 3

A consulta leva cerca de 12 segundos para ser executado, conforme mostrado no painel de resultados do Question Editor v2 na captura de tela a seguir.

Resultados da etapa 4

  1. Correr cell #5 para capturar o ID da consulta do SYS_QUERY_HISTORY filtragem de visualização do sistema com base no rótulo de consulta definido na etapa anterior.Célula 5
  2. No console do Amazon Redshift, no painel de navegação, selecione Consulta e cargas e escolha o nome do cluster onde a consulta foi executada originalmente, conforme mostrado na captura de tela a seguir.
    Consulta e cargas
  3. Isso abrirá o novo Question Profiler. Sob o Histórico de consultas seção, escolha Connect with database.Após a conexão bem-sucedida ao banco de dados, você observará o standing exibido como Linked e exibindo o histórico de consultas, conforme mostrado na captura de tela a seguir.
    Conectar ao banco de dados
  4. Você pode encontrar suas dúvidas por ID da consulta ou ID do processo. Insira o ID de consulta capturado na etapa anterior para filtrar a consulta de longa duração para análise posterior e escolha o ID de consulta correspondente, conforme mostrado na captura de tela a seguir.
    Consulta de pesquisa
  5. Sob o Plano de consulta seção, escolha Little one question 1conforme mostrado na captura de tela a seguir. Se houver várias consultas filhas, você terá que inspecionar cada uma delas em busca de problemas de desempenho.
    Consulta filhaIsso abrirá o plano de consulta em uma visualização em árvore junto com métricas adicionais no painel lateral. Isso permite analisar rapidamente os fluxos, segmentos e etapas da consulta. Para obter mais informações sobre fluxos, segmentos e etapas, consulte Fluxo de trabalho de planejamento e execução de consultas no Guia do desenvolvedor de banco de dados do Amazon Redshift.
  6. Ligar Ver transmissões e, no Fluxos painel lateral, investigue e identifique qual fluxo tem o maior tempo de execução. Nesse caso, ID de fluxo 5 é onde a consulta passa a maior parte do tempo, conforme mostrado na captura de tela a seguir
    Ativar visualização do stream
  7. No Fluxos painel lateral, sob EU IAselecione 5 focar na Corrente 5 para análise mais aprofundada. O fluxo 5 mostra uma etapa de Nestloopconforme mostrado na captura de tela a seguir.
    Passo Nestloop
  8. Escolha o Nestloop passo para analisar melhor. O painel lateral mudará com detalhes da etapa e métricas adicionais sobre a junção de loop aninhado.
  9. Ao olhar para Detalhes da etapa – nestlooppodemos inspecionar o Linhas de entrada e evaluate isso com o Linhas de saídaconforme mostrado na captura de tela a seguir. Neste caso, devido à união cruzada com o Store_returns tabela, 287.514 linhas de entrada explodem para 950.233.770 linhas, fazendo com que nossa consulta seja executada mais lentamente.
    Detalhes da etapa Nestloop
  10. Corrija a consulta introduzindo uma condição de junção entre o store_sales e store_returns. Correr cell #7 do caderno de demonstração do Question editor v2. A consulta reescrita é executada em apenas 307 milissegundos.Célula 7

Caso de uso 2: distribuição de dados abaixo do excellent

  1. Para demonstrar uma distribuição de dados abaixo do excellent, altere o estilo de distribuição das tabelas web_sales e web_returns para ATÉ correndo cell #10 do bloco de notas de demonstração do editor de consultas v2.Célula 10
  1. Correr cell #12. A consulta leva 409 milissegundos para ser executado, conforme mostrado pelo tempo decorrido na captura de tela a seguir do editor de consultas v2.Célula 12
  2. Seguir etapas 3–10 de caso de uso 1 para localizar o query_id e para abrir a visualização do Question Profiler para a consulta anterior.
  3. Na página Consultar perfilador da consulta anterior, ative Ver transmissões. No Fluxos painel lateral, investigue e identifique qual fluxo tem o maior tempo de execução. Nesse caso, ID do fluxo 6 é onde a consulta passa a maior parte do tempo, conforme mostrado na captura de tela a seguir.
    Ver transmissões
  4. Sob EU IAselecione 6 do Fluxos painel lateral para análise posterior.
    Painel lateral de fluxos

O fluxo 6 mostra uma etapa de hash be part of, que envolve uma hash be part of de duas tabelas que são redistribuídas. Isto pode ser inferido a partir Hash Direita Junte-se a DS_DIST_BOTH sob Explicar as informações do nó do plano na captura de tela a seguir. Geralmente, essas redistribuições ocorrem porque as tabelas não estão unidas em suas chaves de distribuição ou não possuem o estilo de distribuição correto. No caso de tabelas grandes, estas redistribuições podem levar a uma degradação significativa do desempenho e, portanto, é importante identificar e corrigir tais passos para otimizar o desempenho da consulta.

Etapa de junção de hash

  1. Corrija esse padrão de distribuição de dados abaixo do excellent escolhendo as chaves de distribuição apropriadas nas tabelas envolvidas: web_sales e web_returns. Para alterar os estilos de distribuição, execute cell #14 do pocket book de demonstração para alterar os comandos da tabela.
    Célula 14
  2. Depois que os comandos anteriores terminarem de ser executados, execute cell #16 para executar novamente a consulta selecionada. Conforme mostrado no Editor de Consultas na captura de tela a seguir, agora a mesma consulta finalizada em 244 milissegundos depois de atualizar o estilo de distribuição para chave para tabelas web_sales e web_returns.
    Célula 16
  3. Na visualização Consultar perfilador, ative Ver transmissões e observe que Fluxos 5 agora levou mais tempo. Levou 8 milissegundos para terminar, em comparação com 13 milissegundos na etapa anterior.
    Ver transmissões
  4. No Fluxos painel lateral, sob EU IAselecione 5 para detalhar ainda mais e escolha o Hashjoin Como mostra a captura de tela a seguir, depois de alterar o estilo de distribuição para chave para ambos web_sales e web_return tabelas, nenhuma das tabelas precisa ser redistribuída no tempo de execução da consulta, resultando em desempenho otimizado.
    Etapa de junção de hash

Considerações

Considere os seguintes detalhes ao usar o Question Profiler:

  1. O Question Profiler exibe informações retornadas pelas visualizações SYS_QUERY_HISTORY, SYS_QUERY_EXPLAIN, SYS_QUERY_DETAIL e SYS_CHILD_QUERY_TEXT.
  2. O Question Profiler exibe apenas informações de consulta para consultas executadas recentemente no banco de dados. Se uma consulta for concluída usando um cache de conjunto de resultados pré-preenchido, o Question Profiler não terá informações sobre ela porque o Amazon Redshift não gera um plano de consulta para essas consultas.
  3. Consultas executadas pelo Question Profiler para retornar as informações da consulta executadas no mesmo information warehouse que as consultas definidas pelo usuário.

Limpar

Para evitar custos inesperados, execute a seguinte ação para excluir os recursos que você criou:

Solte todas as tabelas do sample_data_dev sob tpcds esquema.

Conclusão

Nesta postagem, discutimos como usar o Amazon Redshift Question Profiler para monitorar e solucionar problemas de consultas de longa execução. Demonstramos uma abordagem passo a passo para analisar o desempenho da consulta examinando o plano e as estatísticas de execução da consulta e identificando a causa raiz da lentidão da consulta. Experimente esse recurso em seu ambiente e compartilhar seu suggestions conosco.


Sobre os Autores

Raks KhareRaks Khare é arquiteto de soluções especialista em análise sênior na AWS, baseado na Pensilvânia. Ele ajuda clientes de diversos setores e regiões a arquitetar soluções de análise de dados em escala na plataforma AWS. Fora do trabalho, ele gosta de explorar novos destinos de viagem e gastronomia e de passar bons momentos com sua família.

Bênção Bamiduro faz parte da equipe de gerenciamento de produtos do Amazon Redshift. Ela trabalha com clientes para ajudar a explorar o uso do Amazon Redshift ML em seus information warehouses. Nas horas vagas, Blessing adora viagens e aventuras.

Ekta Ahuja é arquiteto de soluções especialista em Amazon Redshift na AWS. Ela é apaixonada por ajudar os clientes a criar soluções de dados e análises escalonáveis ​​e robustas. Antes da AWS, ela trabalhou em diversas funções diferentes de engenharia e análise de dados. Fora do trabalho, ela gosta de fotografia de paisagem, viagens e jogos de tabuleiro.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *