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 / 43772
Accepted
Jharwood
Jharwood
Asked: 2013-06-05 05:15:51 +0800 CST2013-06-05 05:15:51 +0800 CST 2013-06-05 05:15:51 +0800 CST

Por que os bancos de dados não criam seus próprios índices automaticamente?

  • 772

Eu teria pensado que os bancos de dados saberiam o suficiente sobre o que encontram com frequência e seriam capazes de responder às demandas sob as quais são colocados para que pudessem decidir adicionar índices aos dados altamente solicitados.

index rdbms
  • 6 6 respostas
  • 11309 Views

6 respostas

  • Voted
  1. Best Answer
    Martin Smith
    2013-06-07T14:42:06+08:002013-06-07T14:42:06+08:00

    Atualizar

    Isso agora está implementado no SQL Server Azure. Gera recomendações

    insira a descrição da imagem aqui

    e o gerenciamento de índice pode ser configurado para ser automático .

    Ativar gerenciamento de índice automático

    Você pode definir o SQL Database Advisor para implementar recomendações automaticamente. À medida que as recomendações forem disponibilizadas, elas serão aplicadas automaticamente. Como em todas as operações de índice gerenciadas pelo serviço, se o impacto no desempenho for negativo, a recomendação será revertida.

    Resposta Original

    Alguns bancos de dados já (mais ou menos) criam índices automaticamente.

    No SQL Server, o plano de execução às vezes pode incluir um operador Index Spool onde o RDBMS cria dinamicamente uma cópia indexada dos dados. No entanto, este spool não é uma parte persistente do banco de dados mantido em sincronia com os dados de origem e não pode ser compartilhado entre as execuções de consultas, ou seja, a execução de tais planos pode acabar criando e descartando repetidamente índices temporários nos mesmos dados.

    Talvez no futuro os RDBMSs tenham a capacidade de descartar dinamicamente e criar índices persistentes de acordo com a carga de trabalho.

    O processo de otimização do índice é, no final das contas, apenas uma análise de custo-benefício. Embora seja verdade que os humanos possam ter mais informações sobre a importância relativa das consultas em uma carga de trabalho, não há motivo para que essas informações não possam ser disponibilizadas ao otimizador. O SQL Server já possui um administrador de recursos que permite que as sessões sejam classificadas em diferentes grupos de carga de trabalho com diferentes alocações de recursos de acordo com a prioridade.

    Os DMVs de índice ausente mencionados por Kenneth não devem ser implementados cegamente, pois consideram apenas os benefícios de uma consulta específica e não fazem nenhuma tentativa de levar em consideração o custo do índice potencial para outras consultas. Também não consolida índices ausentes semelhantes. por exemplo, a saída deste DMV pode relatar índices ausentes A,B,CeA,B INCLUDE(C)

    Algumas questões atuais com a ideia são

    • A qualidade de qualquer análise automatizada que não crie realmente o índice dependerá muito da precisão do modelo de custeio.
    • Mesmo no campo da análise automatizada, uma solução off-line poderá ser mais completa do que uma solução on-line, pois é imperativo que uma solução on-line não adicione uma grande sobrecarga de contabilidade ao servidor ativo e interfira em seu objetivo principal de executar consultas.
    • Os índices criados automaticamente em resposta à carga de trabalho serão necessariamente criados em resposta a consultas que os considerariam úteis, portanto, ficarão para trás das soluções que criam os índices com antecedência.

    Provavelmente, é razoável esperar que a precisão dos modelos de custeio melhore com o tempo, mas o ponto 2 parece mais complicado de resolver e o ponto 3 é inerentemente insolúvel.

    No entanto, provavelmente a grande maioria das instalações não está nessa situação idealizada com uma equipe qualificada que monitora, diagnostica e antecipa (ou pelo menos reage a) mudanças nas cargas de trabalho continuamente.

    O projeto AutoAdmin na Microsoft Research está em execução desde 1996

    O objetivo deste projeto é tornar os bancos de dados autoajustáveis ​​e autoadministrados, explorando o conhecimento da carga de trabalho

    A página inicial do projeto lista vários projetos intrigantes. Um é particularmente relevante para a questão aqui

    Outro problema interessante surge quando não há DBA disponível (por exemplo, um banco de dados embutido ou uma pequena empresa). Em tais cenários, uma abordagem de ajuste de índice contínuo de baixo toque pode se tornar importante. Nós exploramos soluções ...[em] “ An Online Approach to Physical Design Tuning ” no ICDE 2007.

    Os autores afirmam

    Com recursos de DBMS cada vez mais comuns, como índices on-line, é atraente explorar soluções mais automáticas para o problema de design físico que avançam no estado da arte.

    O artigo apresenta um algoritmo

    Suas principais características são:

    • À medida que as consultas são otimizadas, identificamos um conjunto relevante de índices candidatos que melhorariam o desempenho. Esse recurso permite que o processamento de consultas continue em paralelo com os índices criados em segundo plano.
    • No tempo de execução, rastreamos os benefícios potenciais que perdemos por não ter esses índices candidatos e também a utilidade dos índices existentes na presença de consultas, atualizações e restrições de espaço.
    • Depois de reunir “evidências” suficientes de que uma alteração no design físico é benéfica, acionamos automaticamente as criações ou exclusões de índices.
    • A natureza online do nosso problema implica que geralmente ficaremos atrás de soluções ótimas que conhecem o futuro. No entanto, medindo cuidadosamente as evidências, garantimos que não sofreremos decisões “atrasadas” significativamente, limitando assim o valor da perda incorrida

    A implementação do algoritmo permite a limitação em resposta a alterações na carga do servidor e também pode interromper a criação do índice se, durante a criação, a carga de trabalho mudar e o benefício esperado cair abaixo do ponto considerado válido.

    A conclusão dos autores sobre o tema On- line versus ajuste físico tradicional.

    Os algoritmos online deste trabalho são úteis quando os DBAs não têm certeza sobre o comportamento futuro da carga de trabalho ou não têm possibilidade de fazer uma análise ou modelagem abrangente. Se um DBA tiver informações completas sobre as características da carga de trabalho, uma análise estática e implantação por ferramentas existentes (por exemplo, [2, 3]) seria uma alternativa melhor.

    As conclusões aqui são semelhantes às de outro artigo Autonomous Query-driven Index Tuning

    Nossa abordagem não pode vencer o index advisor se toda a carga de trabalho for conhecida antecipadamente. No entanto, em ambientes dinâmicos com cargas de trabalho em constante evolução e alteração, a abordagem orientada a consultas produz melhores resultados.

    • 27
  2. Thomas Stringer
    2013-06-05T05:20:03+08:002013-06-05T05:20:03+08:00

    O design do índice que você implementa é mais uma arte do que uma ciência. O RDBMS não é inteligente o suficiente para receber cargas de trabalho comuns e projetar uma estratégia de indexação inteligente. Cabe à intervenção humana (leia-se: DBA) analisar a carga de trabalho e determinar qual é a melhor abordagem.

    Se não houvesse penalidade de ter índices, seria uma abordagem de espingarda apenas adicionar um número infinito de índices. Mas como a modificação de dados (INSERTS, UPDATES e DELETES) tem impacto nos índices habilitados em uma tabela, haverá essa sobrecarga variável desses índices.

    É preciso design e estratégia humanos para criar índices de forma inteligente que maximizarão o desempenho de leitura, tendo a menor quantidade de sobrecarga de modificação de dados.

    • 20
  3. BlueRaja - Danny Pflughoeft
    2013-06-05T08:33:15+08:002013-06-05T08:33:15+08:00

    Na verdade, existem alguns bancos de dados que fazem isso. Por exemplo, o BigTable do Google e o SimpleDB da Amazon criam índices automaticamente (embora nenhum dos dois seja RDBMS) . Há também pelo menos um mecanismo MySQL RDBMS que faz isso. O SQL Server também rastreia os índices que acha que você deve criar , embora não chegue a criá-los de fato.

    O problema é surpreendentemente difícil de corrigir, então não é de admirar que a maioria dos bancos de dados não os crie automaticamente (BigTable/SimpleDB se safa porque eles não permitem junções arbitrárias, o que torna as coisas significativamente mais fáceis) . Além disso, criar índices em tempo real é um processo demorado que requer acesso exclusivo a toda a tabela - definitivamente não é algo que você deseja que aconteça enquanto a tabela estiver online.

    No entanto, dado o número de aplicativos da web LAMP que foram escritos por amadores que nem sabem o que é um índice , ainda acho que esse recurso seria benéfico para algumas pessoas.

    • 14
  4. Matt
    2013-06-09T09:57:34+08:002013-06-09T09:57:34+08:00

    Embora já existam algumas respostas extensas, elas parecem contornar a resposta real: os índices nem sempre são desejáveis.

    Com a analogia do carro mencionada nos comentários, seria melhor dizer por que nem todos os carros são equipados com pacotes de esportes radicais? Em parte é uma despesa, mas também se deve ao fato de que muitas pessoas não precisam ou não querem pneus de perfil baixo e suspensão dura como pedra; é desnecessariamente desconfortável.

    Então, talvez você tenha 1.000 leituras para cada inserção, por que não ter um índice criado automaticamente? Se a tabela é ampla e as consultas variadas, por que não ter várias? Talvez a confirmação seja crítica no tempo e as leituras não; nessas circunstâncias, pode ser inaceitável desacelerar sua inserção. Talvez você esteja trabalhando com espaço em disco limitado e não pode se dar ao luxo de ter índices adicionais consumindo o espaço que possui.

    A questão é que os índices não são criados automaticamente porque não são a resposta para tudo. Projetar índices não é simplesmente dizer "ei, isso vai acelerar minhas leituras", há outros fatores a serem considerados.

    • 10
  5. JamesRyan
    2013-06-05T05:21:10+08:002013-06-05T05:21:10+08:00

    Eles podem analisar consultas anteriores e sugerir/criar índices, mas isso não funciona de maneira ideal porque os índices atingem um equilíbrio para acelerar o que você deseja otimizar a um custo e o servidor não pode saber suas intenções.

    • 6
  6. Niko Kiiskinen
    2013-06-13T11:43:07+08:002013-06-13T11:43:07+08:00

    Eles não são inteligentes, são um pedaço de código. Toda vez que você insere novos dados em um banco de dados, ele precisa encontrar um novo local para ele e um mapa para localizá-lo quando solicitado. A indexação parece mais fácil do que é, você acabou de dar um novo número a um novo bloco de dados? Bem, e se a próxima consulta não for sobre o último bloco de dados, mas sobre 36271 blocos anteriores? Você pode encontrá-lo facilmente com seu índice, certo? Mas e se a consulta incluir uma palavra como "pesca" a ser encontrada no antigo bloco 36271 feito em 1997? Ho? Nem uma palavra sobre a pesca no antigo artigo.

    Se os dados chegassem ao banco de dados um por um, eles poderiam ser indexados dessa forma. Mas a indexação simples terá resultados errados e/ou desempenho lento mais cedo ou mais tarde...

    • -4

relate perguntas

  • Quanto "Padding" coloco em meus índices?

  • O que significa "índice" em RDBMSs? [fechado]

  • Como criar um índice condicional no MySQL?

  • Quais são as diferenças entre o NoSQL e um RDBMS tradicional?

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