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 / 56374
Accepted
Christian Maíz
Christian Maíz
Asked: 2014-01-09 07:52:39 +0800 CST2014-01-09 07:52:39 +0800 CST 2014-01-09 07:52:39 +0800 CST

VÁCUO CONGELADO vs. VÁCUO COMPLETO

  • 772

Alguém pode explicar a diferença entre esses tipos VACUUMno PostgreSQL?

Eu li o documento, mas ele apenas diz que FULLbloqueia as tabelas e FREEZE"congela" as tuplas. Acho que é isso mesmo. Estou errado?

postgresql vacuum
  • 3 3 respostas
  • 34479 Views

3 respostas

  • Voted
  1. Best Answer
    Scott Marlowe
    2014-01-14T21:17:15+08:002014-01-14T21:17:15+08:00

    Aqui está uma resposta curta e concisa.

    Vacuum full retira um bloqueio exclusivo e reconstrói a tabela para que não tenha blocos vazios (vamos fingir que o fator de preenchimento é 100% por enquanto).

    O congelamento de vácuo marca o conteúdo de uma tabela com um carimbo de data e hora de transação muito especial que informa ao postgres que ele não precisa ser aspirado, nunca. Na próxima atualização, esse ID congelado desaparecerá.

    Por exemplo, o banco de dados template0 está congelado porque nunca muda (por padrão, você não pode se conectar a ele).

    De vez em quando, o daemon autovacuum verifica um banco de dados e suas tabelas para ver o que precisa ser aspirado. Se uma tabela for congelada a vácuo e nunca for atualizada, o daemon autovacuum simplesmente a passará. Além disso, a proteção "wrap around" no postgresql também nunca será ativada nessa tabela.

    tl;dr freeze marca uma tabela como não necessitando de nenhuma manutenção de autovac. A próxima atualização irá descongelá-lo.

    • 17
  2. Jimmy Stenke
    2014-01-10T04:35:23+08:002014-01-10T04:35:23+08:00

    Para explicar melhor o que Jayadevan escreveu.

    A maneira como o Postgres trabalha com transações e para acompanhar os dados visíveis é comparando IDs de transação internos. No entanto, como essas transações são um número inteiro de 32 bits, mais cedo ou mais tarde, elas serão quebradas e, portanto, a nova transação parecerá ter sido feita no passado (e, portanto, será visível em uma transação atual, embora não devesse), enquanto transações mais antigas parecerão que estão sendo feitas no futuro (e como o futuro ainda não existe, esses dados não serão mais visíveis).

    O que o Postgres faz para combater esse problema é atribuir a cada linha com idade suficiente para correr o risco de sofrer com esse wraparound um id de transação especial que sempre é mais antigo que todas as transações. Você pode ver como se os IDs de transação válidos variassem de 0 a 2147483647, ele definirá o ID da transação para todas as linhas atuais como -1.

    No entanto, como o vácuo é basicamente para marcar o espaço vazio para reutilização, ele só funciona nas páginas de dados que foram alteradas.

    O que VACUUM FREEZEfazer é basicamente congelar o ID da transação para todas as páginas, independentemente de terem sido modificadas ou não, para que todas as linhas atuais sejam vistas como antigas para todas as novas transações.

    No entanto, a partir da versão 8.2 VACUUM FREEZEforam descontinuados e não devem ser usados. Em vez disso, existem os parâmetros vacuum_freeze_table_agee autovacuum_freeze_max_ageisso especifica quantas transações podem ocorrer antes que uma varredura completa seja feita na tabela (efetivamente, faça uma interna VACUUM FREEZEna tabela).

    • 8
  3. Jayadevan
    2014-01-09T20:09:45+08:002014-01-09T20:09:45+08:00

    Copie / cole da resposta quando fiz a mesma pergunta - "o vácuo regular marca o espaço vazio para reutilização e recupera o espaço vazio no final de uma relação. Portanto, se o espaço vazio estiver no meio etc, não poderá ser recuperado apenas reutilizado.

    vacuo full compacta uma relação recuperando todo o espaço vazio. Requer um bloqueio exclusivo e é ruim para sistemas de produção em geral por causa disso.

    Portanto, o objetivo do aspirador REGULAR não é recuperar espaço das mesas, mas disponibilizá-lo para reutilização posterior. O objetivo do vácuo FULL é recuperar todo o espaço desperdiçado às custas de um bloqueio exclusivo e desempenho de banco de dados enquanto está acontecendo.

    Portanto, como o vácuo regular não foi projetado para recuperar tudo, você não deve se surpreender que ele não tenha recuperado tudo. Tente seu experimento em conjuntos de dados maiores com mais exclusões aleatórias, etc., para ver a diferença entre vácuo normal e completo."

    http://postgresql.1045698.n5.nabble.com/vacuuming-doubt-td5782828.html

    Para adicionar a isso, o vácuo completo realmente criará novos arquivos para a tabela (os arquivos existentes seriam reduzidos para o tamanho 0). Assim, o sistema operacional pode recuperar o espaço.

    • 1

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

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