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 / 333202
Accepted
pramod
pramod
Asked: 2023-11-17 16:01:47 +0800 CST2023-11-17 16:01:47 +0800 CST 2023-11-17 16:01:47 +0800 CST

Tempos de execução inconsistentes para consulta PostgreSQL com buscas de heap inalteradas

  • 772

Tenho uma consulta que seleciona valores distintos de uma tabela e notei que o tempo de execução diminuiu significativamente após a execução inicial.

Aqui está a consulta e o plano de execução correspondente que obtive quando executei a consulta pela segunda vez.

    EXPLAIN ANALYZE SELECT DISTINCT integration_type FROM my_schema.my_table;
    
    Unique (cost=0.43..576843.69 rows=7 width=2) (actual time=0.032..2826.863 rows=8 loops=1)
    -> Index Only Scan using my_index on my_schema.my_table (cost=0.43..538707.38 rows=15254521 width=2) (actual time=0.031..1881.219 rows=14730886 loops=1)
    Heap Fetches: 1381786
    Planning Time: 0.557 ms
    Execution Time: 2826.897 ms

Pela primeira vez executei a consulta, demorou mais de 30 segundos. No entanto, as execuções sucessivas demoraram consistentemente menos de 3 segundos, embora o número de buscas de heap permanecesse o mesmo e não mudasse (ainda 1.381.786).

Estou curioso para entender por que o tempo de execução diminuiu para execuções sucessivas, apesar das buscas de heap inalteradas. Isso poderia estar relacionado a mecanismos de cache ou outras otimizações que o PostgreSQL emprega?

Estou usando o PostgreSQL versão 14.9

Quaisquer insights ou sugestões sobre por que esse comportamento ocorre e como posso otimizar ainda mais a consulta ou as configurações do banco de dados serão muito apreciados.

Obrigado.

postgresql
  • 1 1 respostas
  • 43 Views

1 respostas

  • Voted
  1. Best Answer
    jjanes
    2023-11-18T01:25:34+08:002023-11-18T01:25:34+08:00

    As buscas de heap descrevem com que frequência uma varredura somente de índice precisava consultar a tabela para verificar a visibilidade. Ele não descreve com que frequência era necessário buscar dados do disco em vez da memória. Você não esperaria que o número necessário de buscas de heap mudasse à medida que os dados se tornassem residentes na memória. Ele ainda precisa consultar essas páginas, estejam elas na memória ou não.

    Para determinar leituras de buffer, você precisa fazer isso EXPLAIN (ANALYZE, BUFFERS)e obter uma linha como:

    Buffers: shared hit=23 read=19
    

    que informa quantos buffers consultados já estavam no pool shared_buffers.

    Mas isso ainda não informa se as leituras do buffer foram falhas reais (e precisavam ser lidas no disco) ou se foram encontradas no cache de arquivos do sistema operacional. Portanto, você também deve ativar track_io_timing para obter não apenas uma contagem, mas também os tempos.

    Livrar-se das buscas de heap precisa de um VÁCUO. Uma busca de heap que não existe não pode precisar atingir o disco. Aquele que existe pode ou não ser satisfeito pela memória, dependendo de quanta memória você tem e de quantas outras atividades estão acontecendo.

    • 2

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