AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 216919
Accepted
LowlyDBA - John M
LowlyDBA - John M
Asked: 2018-09-07 06:05:47 +0800 CST2018-09-07 06:05:47 +0800 CST 2018-09-07 06:05:47 +0800 CST

Por que minha consulta é executada rapidamente no Ambiente A, mas lenta no Ambiente B?

  • 772

Eu tenho um pedaço de SQL que parece rodar muito rápido no Ambiente A, mas a mesma consulta é muito lenta no Ambiente B!

Os ambientes devem ser os mesmos, então o que devo fazer e/ou onde devo procurar para ver por que a consulta não executa o mesmo?

sql-server performance
  • 3 3 respostas
  • 12075 Views

3 respostas

  • Voted
  1. Best Answer
    LowlyDBA - John M
    2018-09-07T06:05:47+08:002018-09-07T06:05:47+08:00

    Existem muitos fatores internos e externos ao SQL Server que podem fazer com que a mesma consulta tenha um desempenho diferente em ambientes diferentes, mesmo quando configurados exatamente da mesma forma, qualquer um dos quais pode resultar em planos de consulta e desempenho muito diferentes.

    Servidor

    • O hardware entre os ambientes é o mesmo (discos, memória, CPU, etc.)?
      • Se as VMs estiverem sendo usadas, os vizinhos barulhentos podem afetar o desempenho geral da VM?
      • Se estiver na nuvem, o escalonamento automático e outras configurações têm paridade?
    • Os ambientes são mistos entre físico/virtual/nuvem?
    • As versões do sistema operacional correspondem?
    • Os ambientes estão em datacenters diferentes?

    Instância

    • As versões do SQL Server são as mesmas?
    • Uma CU ou SP pode fazer muita diferença, mesmo que as versões principais sejam as mesmas.
    • A carga de trabalho ativa durante a execução da consulta é comparável?
      • O mesmo volume de consultas está presente em todos os ambientes?
      • A natureza da carga de trabalho é a mesma em todos os ambientes?
    • Todos os ambientes participam da mesma configuração de HA/DR?
      • Muitas vezes, ambientes inferiores não terão grupos de disponibilidade, envio de logs ou configuração de replicação enquanto a produção/DR pode estar usando essas tecnologias.
    • Os mesmos trabalhos de manutenção são executados nos mesmos cronogramas em todos os ambientes?
    • Os sinalizadores de rastreamento são equivalentes em todos os ambientes?
    • As mesmas tarefas de backup estão sendo executadas em todos os ambientes?
    • O impacto dos backups deve ser mínimo, mas geralmente eles não são executados em ambientes inferiores.
    • As configurações do sistema são as mesmas?

    Base de dados

    • Os esquemas/índices/estatísticas/objetos são todos iguais nos ambientes?
      • Mesmo consultas SELECT podem causar atualizações de estatísticas
    • Existem exatamente os mesmos dados em todos os ambientes?
      • Quantidade de dados
      • Distribuição de dados
      • Tamanho dos dados (pense em dados fictícios em tipos de dados de comprimento variável que podem não refletir o tamanho dos valores reais em outros ambientes)
    • As configurações de nível de banco de dados são as mesmas?
    • Os níveis de compatibilidade são os mesmos?

    Com tudo isso em mente, não é surpreendente que, em muitos casos, simplesmente não seja possível copiar perfeitamente todos os aspectos de um banco de dados em diferentes ambientes. Embora os testes possam fornecer um bom grau de certeza sobre o desempenho das consultas em cada ambiente, não deve ser surpresa se houver discrepâncias entre os ambientes. Ao desenvolver uma nova consulta, geralmente é necessário um ajuste adicional à medida que avança para a produção.

    Normalmente, ajustar uma consulta mais lenta em um ambiente não deve causar regressões nos planos de execução gerados, portanto, é uma oportunidade de ajustar índices, estatísticas ou a própria consulta para uma melhoria geral.

    Observação final: ambientes inferiores são subdimensionados e, muitas vezes, não se espera que forneçam o mesmo desempenho de um ambiente de produção ou pré-produção.

    Mais recursos:

    • Planos diferentes para servidores "idênticos" por Aaron Bertrand
    • 13
  2. Phil S
    2018-09-07T07:33:32+08:002018-09-07T07:33:32+08:00

    As outras respostas são boas, mas eu acrescentaria que você deve considerar a quantidade de dados no Ambiente B e qualquer contenção com outras consultas.

    Algumas consultas SQL não mostram problemas de desempenho isoladamente (por exemplo, 1000 linhas na tabela, nenhuma outra consulta em execução), mas podem ser horríveis com 10.000.000 linhas na tabela (por exemplo, problemas de detecção de parâmetros) e/ou outras consultas potencialmente gravando, atualizando ou bloqueando as tabelas envolvidas.

    Eu concordo com as outras respostas sobre como verificar a correspondência de hardware/ambientes/configurações primeiro, mas se nada óbvio aparecer, comece a examinar os planos de execução de consultas, executar o SQL Profiler etc.

    • 9
  3. dland
    2018-09-07T06:40:04+08:002018-09-07T06:40:04+08:00

    Resumindo, você precisa isolar se o próprio db é lento em relação ao outro, ou se o ambiente dele é mais lento. Descarte as coisas mais fáceis primeiro.

    Isso já aconteceu comigo algumas vezes. Cada vez que se tratava de ambiente: outra pessoa estava martelando e privando o banco de dados de IOPS em um servidor.

    Execute um top(1) no servidor mais lento e veja se a CPU está enfrentando grandes quantidades de estados de espera ou roubo de CPU se você estiver em um ambiente virtual.

    Isso também ajudará a apontar para índices ausentes que fazem com que os planos de execução executem verificações de tabela completas em vez de verificações de índice (mas isso é fácil de detectar com log de consulta lento). Isso também aparecerá em ps como procs em um estado D.

    Uma vez que você descartou isso, é hora de cavar mais fundo no hardware: o trabalho está sendo espalhado por todas as CPUs, tem uma porta de rede renegociada para 100Mb. Execute vmstat e/ou iostat em ambas as máquinas e compare as diferenças.

    Se os conjuntos de dados forem idênticos, a mesma consulta gera o mesmo plano de execução em ambos? As tabelas contêm o mesmo número de linhas? As definições de índice são idênticas? As tabelas têm níveis semelhantes de fragmentação? Números semelhantes de conexões ativas?

    • 3

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve