Re: [pgbr-geral] Obter menor valor de coluna - Dúvida sobre index only scan em tabela/índice grande

2016-09-30 Por tôpico Matheus de Oliveira
2016-09-30 16:52 GMT-03:00 Everton Luís Berz :

> Ambas realizam um index only scan e levam em torno de 10 minutos pra
> terminar.


hm... Sério? Bem estranho isso mesmo, eram pra ser consultas quase
instantâneas, mesmo com bilhões de linhas na tabela. E ambas têm uma
execução bem semelhante, duvido que encontrará diferença de performance
entre uma e outro (ao menos nas versões mais recentes).

Se está lento assim, a única explicação que vem à minha cabeça é um inchaço
bem grande nesse índice, se for o caso um REINDEX (ou criar um novo índice,
assim pode usar o CONCURRENTLY) deve resolver. Pode testar?

Atenciosamente,
-- 
Matheus de Oliveira
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Erro ao executar vários deletes

2016-09-30 Por tôpico Matheus de Oliveira
On Fri, Sep 30, 2016 at 2:28 PM,  wrote:

> ERROR:  permission denied for schema transporte LINE 1: SELECT 1 FROM ONLY
> "transporte"."anexo_movimento_veiculo" x ...^
> QUERY:  SELECT 1 FROM ONLY "transporte"."anexo_movimento_veiculo" x WHERE
> $1 OPERATOR(pg_catalog.=) "id_movimento_veiculo" FOR KEY SHARE OF x
> CONTEXT:  SQL statement "delete from transporte.movimento_veiculo mv2 where
> mv2.id_movimento_veiculo= movimento_veiculo[i]" PL/pgSQL function
> inline_code_block line 38 at SQL statement


É, acho que essa não é muito intuitiva mesmo... Vou tentar explicar.

Esse erro acontece quando você executa o DELETE na tabela "
transporte.movimento_veiculo", e certamente há uma chave estrangeira da
tabela "anexo_movimento_veiculo" para a "movimento_veiculo", certo? Bem,
para verificar se o DELETE que você executou não fere essa *constraint* (ou
seja, se não está deletando um "movimento_veiculo" que ainda é referenciado
em "anexo_movimento_veiculo"), o PostgreSQL executa o SELECT que você vê aí:

SELECT 1 FROM ONLY "transporte"."anexo_movimento_veiculo" x
WHERE $1 OPERATOR(pg_catalog.=) "id_movimento_veiculo"
FOR KEY SHARE OF x

Sendo "$1" o valor que está sendo excluído pela PK (ou uma UK) de "
movimento_veiculo".

Mas, veja que esse SELECT é executado internamente pelo PostgreSQL (a
maioria das pessoas nem sabe que é um SELECT que é feito para verificar
FK), e essa consulta só existe porque há uma chave estrangeira na tabela "
anexo_movimento_veiculo" (que esse *owner* é responsável por ela), isso
significa que o proprietário/*owner* dessa tabela é quem está forçando essa
restrição, logo esse mesmo proprietário/*owner* deve ter permissão de
executar esse SELECT acima, assim sendo o PostgreSQL faz essa consulta como
se estivesse logado com esse usuário.

Ou seja, a solução do seu problema é:

1. Veja qual o *owner* da "anexo_movimento_veiculo"
2. Adicione permissão necessária. Por exemplo:
GRANT USAGE ON SCHEMA transporte TO ;
3. Teste novamente, e se der algum erro nos avise aqui, pode ter mais
alguma permissão faltando.

Meio chatinho essa parte, fui claro?

Pode perguntar aí se tiver alguma dúvida.

Atenciosamente,
-- 
Matheus de Oliveira
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

[pgbr-geral] Obter menor valor de coluna - Dúvida sobre index only scan em tabela/índice grande

2016-09-30 Por tôpico Everton Luís Berz
Pessoal

preciso obter o menor valor de uma coluna e tentei de duas formas:

a)
SELECT id_log
FROM tb_log
ORDER BY id_log
LIMIT 1;
"Limit  (cost=0.57..0.62 rows=1 width=8)"
"  ->  Index Only Scan using pk_tb_log on tb_log  (cost=0.57..7626461.90
rows=156814622 width=8)"

b)
SELECT min(id_log)
FROM tb_log;
"Result  (cost=0.62..0.63 rows=1 width=0)"
"  InitPlan 1 (returns $0)"
"->  Limit  (cost=0.57..0.62 rows=1 width=8)"
"  ->  Index Only Scan using pk_tb_log on tb_log
 (cost=0.57..8018482.05 rows=156814313 width=8)"
"Index Cond: (id_log IS NOT NULL)"


Ambas realizam um index only scan e levam em torno de 10 minutos pra
terminar.

Entendo que o custo está alto pois são 150 milhões de linhas, mas os dados
do índice já não são armazenados de maneira ordenada? Não seria somente o
PostgreSQL obter o primeiro valor do índice que seja válido? O quê não
estou enxergando aí?

Alguma outra solução pra obter o menor valor da coluna em tempo reduzido?

ps: por motivos diversos, não posso particionar a tabela.


Estrutura da tabela:
xxx=# \d tb_log
 Table "public.tb_log"
 Column |Type |Modifiers
+-+-
 id_log | bigint  | not null default
nextval('sq_tb_log'::regclass)
 id_usuario | integer |
 id_pagina  | character varying(200)  |
 ds_ip  | character varying(15)   | not null
 ds_entidade| character varying(50)   | not null
 ds_id_entidade | character varying(200)  | not null
 tp_operacao| character(1)| not null
 dt_log | timestamp without time zone |
 ds_package | character varying(150)  |
Indexes:
"pk_tb_log" PRIMARY KEY, btree (id_log)
"idx_tb_log2" btree (id_usuario)
"tb_log_in02" btree (dt_log, id_usuario)
Check constraints:
"tp_operacao_check" CHECK (tp_operacao = ANY (ARRAY['I'::bpchar,
'D'::bpchar, 'U'::bpchar, 'S'::bpchar]))



Obrigado
--
Everton
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Depuração & pgHero

2016-09-30 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
2016-09-30 16:47 GMT-03:00 Roberto Mello :
>
> On Fri, Sep 30, 2016 at 12:45 PM, Guimarães Faria Corcete DUTRA, Leandro
>  wrote:
>>
>> https://www.justwatch.com/blog/post/debugging-postgresql-performance-the-hard-way/
>
> Excelentes artigos! Grato por compartilhar!

De nada!

E obrigado por confirmar minha impressão.  Estou tão afastado do
traçado que compartilho algumas coisas até para saber se realmente é
tão bom quanto me pareceu.


-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Depuração & pgHero

2016-09-30 Por tôpico Roberto Mello
On Fri, Sep 30, 2016 at 12:45 PM, Guimarães Faria Corcete DUTRA, Leandro <
l...@dutras.org> wrote:

> Porque hoje é sexta.
>
> https://www.justwatch.com/blog/post/debugging-postgresql-performance-the-
> hard-way/
>
> https://github.com/ankane/pghero


Excelentes artigos! Grato por compartilhar!

Roberto
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

[pgbr-geral] Erro ao executar vários deletes

2016-09-30 Por tôpico bruno.sdo
Olá Pessoal, Esse é meu primeiro post.Não tenho muito experiencia com 
PostgreSQL.Estou fazendo a seguinte consulta para em seguida fazer alguns 
DELETES, porem esta dando erro.DO $$DECLARE reserva_veiculo INTEGER[]; 
movimento_veiculo INTEGER[]; i INTEGER;
BEGIN
  i:=0;
  reserva_veiculo :=  ARRAY (select r.id_reserva_veiculo
from transporte.movimento_veiculo m 
inner join transporte.reserva_veiculo r on (r.id_movimento_veiculo 
= m.id_movimento_veiculo)
left  join requisicoes.requisicao_reserva_veiculo req on 
(req.id_reserva_veiculo = r.id_reserva_veiculo)
inner join transporte.veiculo v on (v.id_veiculo = r.id_veiculo)
where 
--req.numero=21937
v.placa = 'JKO-4601')::integer[];

  movimento_veiculo :=  ARRAY (select m.id_movimento_veiculo
from transporte.movimento_veiculo m 
inner join transporte.reserva_veiculo r on (r.id_movimento_veiculo 
= m.id_movimento_veiculo)
left  join requisicoes.requisicao_reserva_veiculo req on 
(req.id_reserva_veiculo = r.id_reserva_veiculo)
inner join transporte.veiculo v on (v.id_veiculo = r.id_veiculo)
where 
--req.numero=21937
v.placa = 'JKO-4601')::integer[];


FOR i in 1..array_length(reserva_veiculo,1) loop
raise notice 'reserva_veiculo: %', reserva_veiculo[i];

 delete from transporte.motorista_reserva  where 
motorista_reserva.id_reserva_veiculo= reserva_veiculo[i];
 delete from requisicoes.requisicao_reserva_veiculo r where 
r.id_reserva_veiculo= reserva_veiculo[i];
 delete from transporte.reserva_veiculo rv where 
rv.id_reserva_veiculo= reserva_veiculo[i];
end loop;

i :=0;

FOR i in 1..array_length(movimento_veiculo,1) loop
raise notice 'movimento_veiculo: %', movimento_veiculo[i];
 
 delete from transporte.movimento_veiculo_passageiro mv where 
mv.id_movimento_veiculo= movimento_veiculo[i];
 delete from transporte.trecho_percorrido mv1 where 
mv1.id_movimento_veiculo= movimento_veiculo[i];
 delete from transporte.movimento_veiculo mv2 where 
mv2.id_movimento_veiculo= movimento_veiculo[i];  
end loop;
END$$;



Porem está dando o seguinte erro:ERROR:  permission denied for schema transporte
LINE 1: SELECT 1 FROM ONLY "transporte"."anexo_movimento_veiculo" x ...
                           ^
QUERY:  SELECT 1 FROM ONLY "transporte"."anexo_movimento_veiculo" x WHERE $1 
OPERATOR(pg_catalog.=) "id_movimento_veiculo" FOR KEY SHARE OF x
CONTEXT:  SQL statement "delete from transporte.movimento_veiculo mv2 where 
mv2.id_movimento_veiculo= movimento_veiculo[i]"
PL/pgSQL function inline_code_block line 38 at SQL statementSim, tenho 
permissão para excluir. Se eu rodar somente as linhas dos deletes, substituindo 
as variáveis. A exclusão acontece sem erros. Obrigado pela atenção ___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

[pgbr-geral] Depuração & pgHero

2016-09-30 Por tôpico Guimarães Faria Corcete DUTRA , Leandro
Porque hoje é sexta.

https://www.justwatch.com/blog/post/debugging-postgresql-performance-the-hard-way/

https://github.com/ankane/pghero



-- 
skype:leandro.gfc.dutra?chat  Yahoo!: ymsgr:sendIM?lgcdutra
+55 (61) 3546 7191  gTalk: xmpp:leand...@jabber.org
+55 (61) 9302 2691ICQ/AIM: aim:GoIM?screenname=61287803
BRAZIL GMT−3  MSN: msnim:chat?contact=lean...@dutra.fastmail.fm
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Mudanças no repositório do PGDG

2016-09-30 Por tôpico Matheus de Oliveira
2016-09-29 14:15 GMT-03:00 Sebastian Webber :

> Imagino que os servidores baseados no Debian sofram do mesmo mal.


Pelo que entendi essas mudanças foram só nos repositórios yum/rpm mesmo.


-- 
Matheus de Oliveira
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral