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 / 18664
Accepted
François Beausoleil
François Beausoleil
Asked: 2012-06-01 17:56:01 +0800 CST2012-06-01 17:56:01 +0800 CST 2012-06-01 17:56:01 +0800 CST

O VACUUM ANALYZE regular ainda é recomendado sob 9.1?

  • 772

Estou usando o PostgreSQL 9.1 no Ubuntu. O agendamento VACUUM ANALYZEainda é recomendado, ou o autovacuum é suficiente para atender todas as necessidades?

Se a resposta for "depende", então:

  • Eu tenho um banco de dados grande (tamanho de despejo compactado de 30 GiB, diretório de dados de 200 GiB)
  • Faço ETL no banco de dados, importando cerca de 3 milhões de linhas por semana
  • As tabelas com as alterações mais frequentes são todas herdadas de uma tabela mestre, sem dados na tabela mestre (os dados são particionados por semana)
  • Eu crio rollups por hora e, a partir daí, relatórios diários, semanais e mensais

Estou perguntando porque a programação VACUUM ANALYZEestá impactando na minha reportagem. Ele é executado por mais de 5 horas e tive que matá-lo duas vezes esta semana, porque estava afetando as importações regulares do banco de dados. check_postgresnão relata nenhum inchaço significativo no banco de dados, então isso não é realmente um problema.

A partir dos documentos, o autovacuum também deve cuidar do envolvimento do ID da transação. A questão permanece: eu ainda preciso de um VACUUM ANALYZE?

postgresql etl
  • 3 3 respostas
  • 39541 Views

3 respostas

  • Voted
  1. Best Answer
    Daniel Vérité
    2012-06-02T08:40:04+08:002012-06-02T08:40:04+08:00

    VACUUM só é necessário em linhas atualizadas ou excluídas em tabelas não temporárias. Obviamente você está fazendo muitos INSERTs, mas não é óbvio pela descrição que você também está fazendo muitos UPDATEs ou DELETEs.

    Essas operações podem ser rastreadas com a pg_stat_all_tablesexibição, especificamente as colunas n_tup_upde . n_tup_delAlém disso, ainda mais importante, há uma n_dead_tupcoluna que informa, por tabela, quantas linhas precisam ser limpas. (consulte Monitorando estatísticas no documento para funções e visualizações relacionadas à coleta de estatísticas).

    Uma estratégia possível no seu caso seria suprimir o VACUUM agendado, ficando de olho nessa view e verificando em quais tabelas ela n_dead_tupestá subindo significativamente. Em seguida, aplique o VACUUM agressivo apenas a essas tabelas. Isso será uma vitória se houver tabelas grandes cujas linhas nunca sejam excluídas nem atualizadas e o VACUUM agressivo for realmente necessário apenas em tabelas menores.

    Mas continue executando o ANALYZE para que o otimizador tenha sempre estatísticas atualizadas.

    • 32
  2. Erwin Brandstetter
    2012-06-02T08:36:00+08:002012-06-02T08:36:00+08:00

    Não vejo nada na sua pergunta que autovacuumnão resolva. Depende muito do padrão de suas atividades de escrita . Você menciona 3 milhões de novas linhas por semana, mas INSERT(ou COPY) normalmente não cria tabelas e índices inchados. ( autovacuumsó tem que cuidar das estatísticas da coluna , do mapa de visibilidade e de alguns trabalhos menores). UPDATEe DELETEsão a causa dominante do inchaço de tabelas e índices, especialmente ao segmentar linhas aleatórias. Não vejo nada disso na sua pergunta.

    autovacuumpercorreu um longo caminho e está fazendo um ótimo trabalho no Postgres 9.1 ou posterior. Eu daria uma olhada nas autovacuumconfigurações . Se a aspiração tende a interferir com sua carga de trabalho, também dê uma olhada em "Atraso de vácuo baseado em custo" . A aspiração manual deve ser a rara exceção.

    Se você tiver muitos s aleatórios UPDATE, talvez queira definir o FILLFACTORpara algo menor que 100, para permitir atualizações HOT imediatamente e reduzir a necessidade de VACUUM. Mais sobre atualizações HOT:

    • Dados redundantes em declarações de atualização

    Observe também que as tabelas temporárias precisam de manual VACUUM& ANALYZE. Cito o manual sobreCREATE TABLE :

    O daemon de autovacuum não pode acessar e, portanto, não pode limpar ou analisar tabelas temporárias. Por esse motivo, as operações apropriadas de vácuo e análise devem ser executadas por meio de comandos SQL de sessão. Por exemplo, se uma tabela temporária for usada em consultas complexas, é aconselhável executá ANALYZE-la depois que ela for preenchida.

    • 26
  3. MvcCmsJon
    2013-06-14T05:34:45+08:002013-06-14T05:34:45+08:00

    Embora eu concorde que é melhor usar os recursos automáticos em vez de executá-los em todo o banco de dados, na maioria dos casos é necessário o ajuste por tabela.

    Não concordo muito com a escolha de design do postgres para unir vácuo e análise, já vi vários casos em que bancos de dados que fazem muita inserção/atualização, mas pouca exclusão, nunca são analisados ​​e começam a ter um desempenho ruim.

    A solução é entrar nas tabelas que são muito usadas e estão sujeitas a grandes consultas e definir as configurações de análise automática dessas tabelas para algo em que elas sejam analisadas uma vez ou a cada dois dias.

    Você pode acessar as configurações por tabela no gui na guia de vácuo automático e verá as configurações de análise que podem ser definidas independentemente do vácuo.

    As configurações acabam na tabela de opções e podem ser vistas com a consulta

    SELECT c.relname, c.reloptions FROM pg_class c where reloptions is not null
    

    e um valor amostral de uma análise agressiva pode ser

    {autovacuum_enabled=true,autovacuum_analyze_threshold=10,autovacuum_analyze_scale_factor=.01}
    

    Para ver quando foi a última vez que suas tabelas foram analisadas automaticamente

    select 
        relname, 
        n_dead_tup, 
        n_tup_ins, 
        n_tup_upd, 
        n_tup_del, 
        last_autoanalyze, 
        autoanalyze_count 
    from pg_stat_user_tables 
    where last_autoanalyze is not null 
    order by last_autoanalyze desc;
    
    • 7

relate perguntas

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

  • Como posso usar um ETL?

  • 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

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 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

    Como selecionar a primeira linha de cada grupo?

    • 6 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
    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
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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