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 / 274308
Accepted
SweetPotato
SweetPotato
Asked: 2020-08-26 03:21:28 +0800 CST2020-08-26 03:21:28 +0800 CST 2020-08-26 03:21:28 +0800 CST

Por que devo renovar os procedimentos armazenados?

  • 772

Existe um motivo significativo para recompilar procedimentos armazenados?

É claro que os dados em um banco de dados mudam com o tempo e o conjunto de resultados de alguns procedimentos armazenados pode diferir devido a dados subjacentes alterados. Mas a menos que haja mudanças nas estruturas das tabelas, os procedimentos armazenados devem ser bons para sempre?

Estou falando do Sybase ASE 15.

stored-procedures sybase
  • 1 1 respostas
  • 157 Views

1 respostas

  • Voted
  1. Best Answer
    David Spillett
    2020-08-26T05:47:30+08:002020-08-26T05:47:30+08:00

    os dados em um banco de dados mudam ao longo do tempo

    Esta é a razão habitual. Embora o conceito de compilar um procedimento armazenado seja específico da implementação, ele geralmente envolve a produção de um plano de consulta para o procedimento e/ou as instruções individuais das quais ele é formado e o armazenamento para reutilização posterior (para salvar a parte do processo que está sendo repetida a cada momento em que o procedimento é chamado).

    À medida que seus dados crescem, o saldo de dados em cada tabela/índice pode mudar de tal forma que o plano ideal quando o procedimento foi compilado pela última vez agora é muito mais ineficiente do que outras opções, de modo que o procedimento não terá mais desempenho poderia. Se você tivesse apenas algumas linhas em uma tabela quando o procedimento foi criado (ou compilado pela última vez), uma varredura pode ter sido mais eficiente do que uma ou mais buscas, por exemplo, mas isso pode não ser mais o caso posteriormente. Além disso, qual índice é mais eficiente tocar primeiro pode mudar ao longo do tempo, especialmente para consultas em tabelas largas e aquelas que se unem em várias tabelas.

    O mecanismo de banco de dados geralmente terá algumas heurísticas incorporadas para causar uma recompilação após grandes alterações de dados, bem como após alterações estruturais, mas geralmente são bastante conservadoras em sua ação, portanto, às vezes, é necessário iniciar uma recompilação manualmente. Muito parecido com a heurística envolvida na decisão de quando reamostrar histogramas de estatísticas de índice (que, por sua vez, alimenta as decisões do plano de consulta em geral e em seus procs armazenados).

    Às vezes, procs com parâmetros precisarão de planos diferentes para serem eficientes para entradas diferentes - às vezes há circunstâncias em que é benéfico sempre recompilar porque a diferença é tão alta que você não quer arriscar usar um plano de cache lento (no MS SQL Server, a WITH RECOMPILEdica existe para lidar com essas circunstâncias ou a instrução por instrução OPTION (RECOMPILE)para uma abordagem mais detalhada). Procedimentos complexos o suficiente para que isso seja um problema importante geralmente são "cheiros de código", o que significa que seu design precisa de um ajuste, embora nem sempre sejam facilmente evitáveis.

    Uma razão final para recompilar procedimentos armazenados, funções, exibições e outros objetos programáticos é quando as alterações em outros lugares são feitas de uma maneira que interrompe a verificação de dependência, o que significa que uma recompilação automática não ocorre quando é realmente necessária. Por exemplo:

    1. Você tem um proc que usa uma visão em uma tabela.
    2. Alguém descarta e recria a exibição (em vez de usar ALTER VIEW).
      As informações de dependência proc->view agora estão perdidas.
    3. A tabela é alterada.
      Como a cadeia de dependência é quebrada, o mecanismo não sabe que as instruções no procedimento podem precisar ser recompiladas, o que significa que o procedimento pode começar a falhar completamente ou fornecer resultados incorretos.
    4. Uma recompilação (neste estágio ou após a recriação da exibição) corrige isso.
    • 3

relate perguntas

  • Otimize esta consulta SQL para desempenho

  • Como retornar um CTE como REFCURSOR de um procedimento armazenado Oracle?

  • Como descubro se existe um procedimento ou função em um banco de dados mysql?

  • Alguém está usando o recurso do SQL Server para criar grupos de stored procedures diferenciadas por número?

  • SQL dinâmico em rotinas armazenadas do MySQL

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