Diferentes Índices são utilizados para a mesma consulta com diferentes companyids

0

Pergunta

Estamos executando a seguinte consulta no nosso instância RDS e ele está tomando grande quantidade de tempo e para diferentes companyId ele é executado em um segundo.

Consulta:

Consulta Simples select * from items_1_primary WHERE items_1_primary.item_type_id IN (1,2) AND items_1_primary.hidden IS NULL AND items_1_primary.company_id = 9130347227057236 ORDER BY items_1_primary.id LIMIT 1 OFFSET 0

FYI Este é o plano de consulta para duas empresas diferentes

inventorymigrationprod=> explicar analisar select * from items_1_primary ONDE items_1_primary.item_type_id EM (1,2) E items_1_primary.oculto É NULO E items_1_primary.company_id =9130347227057236 ORDEM items_1_primary.id do LIMITE de 1 DESVIO 0;

PLANO DE CONSULTA

Limite (custo=0.57..1894.58 linhas=1 width=332) (tempo real=372100.718..372100.719 linhas=1 loops=1) -> Index Scan usando items_1_primary_pkey no items_1_primary (custo=0.57..175867668.27 linhas=92855 largura=332) (tempo real=372100.717..372100.717 linhas=1 loops=1) Filtro: (escondida(É NULO) E (item_type_id = QUALQUER ('{1,2}'::numérico[])) E (company_id = '9130347227057236'::numérico)) Linhas Removido pelo Filtro: 535927031 O Tempo de planejamento: 1.626 ms Tempo de execução: 372100.745 ms (6 linhas)

inventorymigrationprod=> explicar analisar select * from items_1_primary ONDE items_1_primary.item_type_id EM (1,2) E items_1_primary.oculto É NULO E items_1_primary.company_id =9130348260181756 ORDEM items_1_primary.id do LIMITE de 1 DESVIO 0; PLANO DE CONSULTA

Limite (custo=10659.77..10659.77 linhas=1 width=332) (tempo real=9.559..9.560 linhas=1 loops=1) -> Sort (custo=10659.77..10665.38 linhas=2242 largura=332) (tempo real=9.557..9.558 linhas=1 loops=1) Chave de classificação: identificação O Método de classificação: top-N heapsort Memória: 25kB -> Index Scan usando items_1_primary_company_id_item_type_id no items_1_primary (custo=0.57..10648.56 linhas=2242 largura=332) (tempo real=0.057..6.117 linhas=10823 loops=1) Index Cond: ((company_id = '9130348260181756'::numérico) E (item_type_id = QUALQUER ('{1,2}'::numérico[]))) Filtro: (oculto É NULO) O Tempo de planejamento: 0.138 ms Tempo de execução: 9.589 ms (9 linhas) Instância de banco de dados(s): inventário-migração-prod-cluster

Índices Na Tabela

índices: "items_1_primary_pkey de CHAVE PRIMÁRIA", btree (id) "items_1_primary_company_id_item_type_id" btree (company_id, item_type_id) "items_1_primary_uniqueness" RESTRIÇÃO EXCLUSIVA, btree (company_id, item_id)

database-administration postgresql
2021-10-27 07:29:17
1

Melhor resposta

1

Ou PostgreSQL sobre-estimativas do número de linhas que satisfazem a condição, ou eles são distribuídos em um desfavoráveis forma dentro da tabela.

Se o primeiro for o caso, e ANALYZE (talvez, com o aumento da default_statistics_target) poderia resolver o problema.

Mas o que causa o problema, você pode evitá-lo, alterando o ORDER BY cláusula para que o PostgreSQL não pode utilizar um índice:

ORDER BY items_1_primary.id + 0
2021-10-27 07:39:45

Muito obrigado funcionou! Como saber a Causa Raiz.
Raju

Se analisar a ajuda, a insuficiência de estatísticas são a causa. Se não, é a distribuição dos dados na tabela.
Laurenz Albe

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................