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 / 40864
Accepted
SqlRyan
SqlRyan
Asked: 2013-04-25 22:08:45 +0800 CST2013-04-25 22:08:45 +0800 CST 2013-04-25 22:08:45 +0800 CST

Os otimizadores de consulta de banco de dados estão cientes das diferenças de desempenho de armazenamento?

  • 772

Pelo que entendi, o otimizador de consulta no SQL Server (ou qualquer outro RDBMS, na verdade) não está ciente do desempenho do armazenamento sob o banco de dados e tomará decisões como se todo o armazenamento tivesse custo igual. Isso é preciso ou há algum conhecimento de desempenho de armazenamento que é levado em consideração?

Em um exemplo totalmente artificial, digamos que minhas linhas de tabela sejam armazenadas em uma unidade SSD em minha SAN com tempos de acesso instantâneos, onde meus índices são armazenados em unidades SAS extremamente sobrecarregadas, resultando em saturação de disco e filas de disco constantes. Quando o RDBMS gera o plano de execução, é mais provável favorecer uma varredura de tabela do que uma operação de índice (ou possivelmente um índice fino e pesquisas de tabela associadas, em oposição a um índice de cobertura, porque é menos IO nos discos SAS)?

Suspeito que a resposta seja sólida "sem chance de o otimizador ser inteligente ou mesmo ciente do desempenho do disco", mas eu só queria ver se alguém sabe ao certo. Estou usando o SQL Server, mas estou interessado em qualquer sistema de banco de dados.

execution-plan storage
  • 2 2 respostas
  • 489 Views

2 respostas

  • Voted
  1. Best Answer
    StrayCatDBA
    2013-04-26T01:26:12+08:002013-04-26T01:26:12+08:00

    O otimizador de consulta do servidor SQL não leva em consideração variações no desempenho do disco ao compilar um plano de consulta. Paul White fornece uma ótima visão geral do otimizador baseado em custo do Sql Server aqui:

    https://sqlkiwi.blogspot.com/2010/09/inside-the-optimizer-plan-costing.html

    Alguns pontos-chave são:

    • O otimizador não está tentando calcular o custo exato de um plano. É tentar escolher o plano com o menor custo relativo entre várias alternativas.

    • É uma visão simplificada da realidade. Ele assume que um servidor pode executar 320 io/s e que o desempenho da CPU não aumentou em mais de uma década.

    • Mesmo que os servidores hoje tenham características de desempenho muito diferentes, o otimizador ainda faz um trabalho muito bom na maioria dos casos.

    Então, por que a Microsoft não adiciona alguma inteligência adicional ao otimizador? No futuro, eles podem, no entanto, o mais provável são pequenos ajustes nos custos de iteradores individuais. Atualmente, o benefício não existe para justificar o esforço.

    Você pode usar chamadas dbcc não documentadas para alterar algumas das suposições dos otimizadores de consulta. NÃO OS USE EM UM SERVIDOR DE PRODUÇÃO

    DBCC SETIOWEIGHT(<multiplier>)
    DBCC SETCPUWEIGHT(<multiplier>)
    

    Ambos têm valores padrão de 1. Brinque com eles e veja se consegue chegar a valores diferentes que consistentemente produzem planos melhores na maioria dos casos. Você descobrirá que pequenas mudanças não mudarão a maioria dos planos e grandes mudanças gerarão planos realmente bizarros.

    Um ponto adicional é que, embora o SQL não considere o desempenho de io ao compilar um plano, ele responde ao desempenho de io durante a execução do plano (limitando leituras de leitura antecipada se io estiver saturado, etc.)

    • 8
  2. mustaccio
    2019-06-22T09:36:44+08:002019-06-22T09:36:44+08:00

    O otimizador de consulta Db2 for LUW está ciente das características de desempenho de hardware da máquina em que está sendo executado e as leva em consideração.

    Especificamente, cada tablespace tem dois parâmetros numéricos que refletem o desempenho de armazenamento subjacente: overhead, que reflete a sobrecarga do controlador de E/S e o tempo de latência e busca de disco em milissegundos, e transferrate, que indica o tempo necessário para transferir uma página de tablespace do disco para a memória.

    Esses parâmetros podem ser especificados no momento da criação do tablespace para substituir os valores padrão derivados heuristicamente.

    Os parâmetros de desempenho de E/S, juntamente com o cpu_speedparâmetro de nível de gerenciador de banco de dados, são usados ​​pelo otimizador para calcular o custo de E/S e CPU de cada operador de plano de consulta e, portanto, afetarão qual plano será escolhido. Posteriormente, seu cenário seria completamente plausível no Db2. Da mesma forma, em um sistema com velocidade de CPU muito alta e desempenho de disco mais ou menos, o otimizador pode preferir operadores intensivos de CPU (por exemplo, varredura de tabela e classificação) a outros mais intensivos de E/S (por exemplo, acesso à tabela baseado em índice).

    Acredito que o Db2 para z/OS também considera as características de desempenho de hardware subjacentes, obtendo-as da camada de gerenciamento de armazenamento, não como parte da configuração do banco de dados.

    • 0

relate perguntas

  • O código cria um plano diferente quando executado ad-hoc em comparação com um procedimento armazenado

  • bestas de armazenamento extremo

  • Exibir consulta subjacente do SQL 2008 sp_cursorexecute e plano de execução

  • Estratégia eficaz de backup e arquivamento para banco de dados e arquivos vinculados

  • Noções básicas do plano de execução - confusão de correspondência de hash

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • 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

    Conceder acesso a todas as tabelas para um usuário

    • 5 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
    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
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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