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 / 111335
Accepted
TheGameiswar
TheGameiswar
Asked: 2015-08-18 13:54:24 +0800 CST2015-08-18 13:54:24 +0800 CST 2015-08-18 13:54:24 +0800 CST

Como responder por que de repente precisamos de índices ou a consulta precisa ser alterada

  • 772

Sou DBA júnior com 3 anos de experiência. Nosso trabalho é ajustar as consultas ou aconselhar os desenvolvedores que determinado código deve ser reescrito ou índices são necessários.

Uma pergunta simples que a equipe de desenvolvimento faz com frequência é: "Ontem funcionou bem, o que mudou de repente?" e seremos solicitados a verificar o lado da infraestrutura. A primeira reação em qualquer problema sempre parece ser colocar a culpa máxima na infraestrutura, que é sempre a primeira coisa a ser validada.

Como devemos responder às perguntas "o que mudou" feitas pela equipe de desenvolvimento? Vocês já enfrentaram a mesma situação? Em caso afirmativo, por favor, compartilhe sua experiência.

sql-server performance
  • 3 3 respostas
  • 899 Views

3 respostas

  • Voted
  1. Best Answer
    Kin Shah
    2015-08-18T14:14:09+08:002015-08-18T14:14:09+08:00

    Como responder à pergunta alterada por dev?

    Essa é uma pergunta muito comum não apenas com DEV, mas também se aplica a todas as equipes de TI e negócios.

    O que mudou ? ==> pode ser respondido por fatos e números.

    Os fatos referem-se, por exemplo,

    • aumentar a quantidade de usuários que estão acessando o banco de dados ?
    • Alguma alteração no parâmetro de configuração do servidor?
    • Manutenção do banco de dados - estatísticas de atualização, reorganização/reconstrução de índices não sendo executadas? Devido a isso, os planos estão sendo gerados incorretamente!
    • A quantidade de dados aumentou?
    • Foram feitas alterações no lado da rede, o sistema operacional foi corrigido e/ou um novo service pack ou CU para sql server foi implantado - sem fazer um teste de regressão completo do ciclo de negócios do seu aplicativo ?
    • A SAN subjacente tornou-se repentinamente lenta?

    As figuras podem ser derivadas se você tiver dados para mostrar. Por exemplo :

    • A linha de base do seu servidor é crítica durante essa situação. Isso aliviará o jogo da culpa, pois você pode apoiar os fatos com números sólidos.
    • Comece a coletar dados usando DMVs ou sp_whoisactive em uma tabela, para que os dados sejam persistidos após uma reinicialização do servidor SQL.

    (você deve treinar com base em seu ambiente e necessidades, com que frequência coletar os dados/ quais dados coletar e quanto será o período de retenção) ou (você pode investir em um software de terceiros como o sqlsentry ou o gerenciador de diagnóstico do idera que fará o trabalho acima para você) .

    • 10
  2. Aaron Bertrand
    2015-08-18T14:08:27+08:002015-08-18T14:08:27+08:00

    Bem, você pode estar recebendo um plano diferente porque:

    • o plano pode ter sido removido do cache devido a:
      • uma reinicialização do serviço
      • limpeza manual do cache do plano
      • uma reinicialização ou failover de serviço
      • uma alteração inadvertida, por exemplo, certas sp_configurealterações podem liberar o cache
      • alguma alteração em objetos subjacentes, índices, estatísticas ou outras dependências acionou uma recompilação
    • você pode estar obtendo um plano diferente do(s) outro(s) usuário(s) ou invocações anteriores porque:
      • o texto da consulta pode não ser idêntico (isso inclui diferenciação de maiúsculas e minúsculas e espaços em branco, não importa colunas diferentes, critérios de junção, filtros, etc.)
      • a consulta pode ser executada por usuários diferentes com opções de conjunto diferentes (ou esquemas padrão diferentes, se algum objeto no plano não tiver um nome totalmente qualificado, incluindo schema )
    • a consulta e o plano podem ser os mesmos, mas você pode obter um desempenho diferente porque:
      • o plano foi armazenado em cache usando parâmetros diferentes e esse plano não é ideal para o conjunto atual de parâmetros (isso é comumente chamado de "sniffing de parâmetro")
      • a quantidade de dados com base nos parâmetros ou simplesmente devido à alteração de dados nesse meio tempo é significativamente diferente
      • os dados mudaram o suficiente para alterar a maneira mais eficiente de acessar os dados, mas não o suficiente para acionar atualizações ou recompilações de estatísticas (procure por problema de chave ascendente, bem como algoritmo de estatísticas automáticas)
      • os dados foram removidos do buffer pool e agora precisam ser lidos do disco
      • há maior simultaneidade, bloqueio ou outras tensões nos recursos necessários para satisfazer a consulta

    Eu passo por muitos deles com mais detalhes aqui:

    • Vários planos para uma consulta "idêntica"

    Se eles estiverem sendo executados em ambientes diferentes, tenho uma série de coisas para verificar aqui:

    • Planos diferentes para servidores "idênticos"

    Além disso, é importante ter em mente que criar um índice ou alterar a consulta pode não ser o motivo direto de uma consulta ter um desempenho melhor de repente - às vezes é apenas porque essas alterações realmente geraram um novo plano e/ou invalidaram o que já existia .

    • 7
  3. Erik
    2015-08-18T15:27:49+08:002015-08-18T15:27:49+08:00

    Como sempre , Aaron Bertrand e Kin forneceram respostas excelentes. No entanto, ambas as respostas contêm um fio comum. Se você analisar qualquer uma das respostas, verá que o motivo pelo qual XYZ não está funcionando como funcionou ontem não é por causa de algo que você / eles / a pessoa X fizeram. A razão pela qual as coisas mudaram é porque o banco de dados decidiu fazer as coisas de maneira diferente devido a razões XYZ.

    Um banco de dados é uma entidade viva que respira . Os bancos de dados tomarão decisões e mudarão de ideia devido a uma combinação de suposições, estatísticas e outras ferramentas heurísticas. Isso é drasticamente diferente da maioria da programação da camada de aplicativo (aprendizado de máquina sendo uma exceção notável).

    Vou usar algumas referências militares porque não consigo pensar em algo melhor agora. Uma metáfora mais geral seria apreciada (sem trocadilhos).

    Na maioria das aplicações, o programador atua como um instrutor de exercícios. Eles dizem ao computador exatamente o que fazer, em que ordem e, às vezes, por quanto tempo. Programar um banco de dados é mais como atuar como um Comandante. Você diz a ele o que deseja fazer em alto nível e oferece alguma orientação quando necessário. O banco de dados assume a tarefa de descobrir a melhor maneira de executar o plano com base na inteligência atual, como os suboficiais e suboficiais.

    Ao deixar essa distinção clara nas mentes dos outros programadores, eles começarão a ver que você não tem poderes ditatoriais como eles têm sobre seu ambiente. Você está guiando o banco de dados para a solução e, ocasionalmente, o banco de dados se desvia por bons ou maus motivos. Lembre-os de que, no final, não importa por que* o banco de dados saiu dos trilhos, mas sim o que podemos fazer para trazê-lo de volta.

    * Reconheço que "por que" é muito valioso para prevenção futura, aprendizado, etc., mas parece que o OP está enfrentando resistência de pessoas que não estão tentando aprender ou ajudar no problema.

    • 7

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