Обсуждение: EXPLAIN times

Поиск
Список
Период
Сортировка

EXPLAIN times

От
Afra
Дата:
We have two different instances of Postgresql running on two different
Redhat boxes:

OS: DB1 - Red Hat Linux release 7.1sbe (Seawolf)
     DB2 - Red Hat Linux release 7.2 (Enigma)

The postgres version for each box is 7.2.1.

When we run a simple query:

SELECT    ord_contact_name.l_name
FROM    ord_contact_name
JOIN    ord_dv_job_num
USING    (ord_obj_guid)
WHERE    (ord_dv_job_num.dv_job_number ='1334298')

These are the EXPLAIN results on DB1:

NOTICE:  QUERY PLAN:

Merge Join  (cost=152183.00..271426.66 rows=9416137 width=105)
   ->  Sort  (cost=141295.60..141295.60 rows=613709 width=69)
         ->  Seq Scan on ord_contact_name  (cost=0.00..18568.09
rows=613709 width=69)
   ->  Sort  (cost=10887.40..10887.40 rows=3069 width=36)
         ->  Index Scan using dv_job_number_ord_dv_job_num_ke on
ord_dv_job_num  (cost=0.00..10709.67 rows=3069 width=36)

And the EXPLAIN results on DB2:

NOTICE:  QUERY PLAN:

Nested Loop  (cost=0.00..9.91 rows=1 width=90)
   ->  Index Scan using dv_job_number_ord_dv_job_num_ke on
ord_dv_job_num  (cost=0.00..3.89 rows=1 width=40)
   ->  Index Scan using ord_obj_guid_ord_contact_name_k on
ord_contact_name  (cost=0.00..6.01 rows=1 width=50)


Usually, this means that the indices are corrupt, but we have reindexed
many times. Does anyone know why DB1 is so much slower than DB2?

Memory is the same on both machines - over a Gig of RAM.
DB1 and DB2 both are SMP and DB1 uses hardware RAID. However, DB1 is
running on two different nodes (if one ethernet card shuts down, the
other can still be accessed).

Does anyone have any suggestions?

Thank you

Afra




Re: EXPLAIN times

От
Neil Conway
Дата:
Afra <aa4@cse.buffalo.edu> writes:
> The postgres version for each box is 7.2.1.

Upgrading to 7.2.3 would be a good idea (it won't effect this problem,
it's just a good idea in general).

> These are the EXPLAIN results on DB1:
>
> NOTICE:  QUERY PLAN:
>
> Merge Join  (cost=152183.00..271426.66 rows=9416137 width=105)
>    ->  Sort  (cost=141295.60..141295.60 rows=613709 width=69)
>          ->  Seq Scan on ord_contact_name  (cost=0.00..18568.09
> rows=613709 width=69)
>    ->  Sort  (cost=10887.40..10887.40 rows=3069 width=36)
>          ->  Index Scan using dv_job_number_ord_dv_job_num_ke on
> ord_dv_job_num  (cost=0.00..10709.67 rows=3069 width=36)
>
> And the EXPLAIN results on DB2:
>
> NOTICE:  QUERY PLAN:
>
> Nested Loop  (cost=0.00..9.91 rows=1 width=90)
>    ->  Index Scan using dv_job_number_ord_dv_job_num_ke on
> ord_dv_job_num  (cost=0.00..3.89 rows=1 width=40)
>    ->  Index Scan using ord_obj_guid_ord_contact_name_k on
> ord_contact_name  (cost=0.00..6.01 rows=1 width=50)

Have you run VACUUM ANALYZE on both databases recently? (if you
haven't, do so). The statistics for DB1 look bizarrely incorrect, so
I'd suspect that updating them will fix the problem.

Is PostgreSQL configured in the same way on both systems?

Cheers,

Neil

--
Neil Conway <neilc@samurai.com> || PGP Key ID: DB3C29FC

Re: EXPLAIN times

От
Afra
Дата:
Thank you for the response.

We run VACUUM ANALYZE every night, so we don't think this is a problem.
Postgres was also installed the same ways for both and we fine-tuned
some of the variables in the config files (regarding memory, for example).

Thank you.

Afra

Neil Conway wrote:

> Afra  writes:
>
> >The postgres version for each box is 7.2.1.
>
>
> Upgrading to 7.2.3 would be a good idea (it won't effect this problem,
> it's just a good idea in general).
>
>
> >These are the EXPLAIN results on DB1:
> >
> >NOTICE:  QUERY PLAN:
> >
> >Merge Join  (cost=152183.00..271426.66 rows=9416137 width=105)
> >   ->  Sort  (cost=141295.60..141295.60 rows=613709 width=69)
> >         ->  Seq Scan on ord_contact_name  (cost=0.00..18568.09
> >rows=613709 width=69)
> >   ->  Sort  (cost=10887.40..10887.40 rows=3069 width=36)
> >         ->  Index Scan using dv_job_number_ord_dv_job_num_ke on
> >ord_dv_job_num  (cost=0.00..10709.67 rows=3069 width=36)
> >
> >And the EXPLAIN results on DB2:
> >
> >NOTICE:  QUERY PLAN:
> >
> >Nested Loop  (cost=0.00..9.91 rows=1 width=90)
> >   ->  Index Scan using dv_job_number_ord_dv_job_num_ke on
> >ord_dv_job_num  (cost=0.00..3.89 rows=1 width=40)
> >   ->  Index Scan using ord_obj_guid_ord_contact_name_k on
> >ord_contact_name  (cost=0.00..6.01 rows=1 width=50)
>
>
> Have you run VACUUM ANALYZE on both databases recently? (if you
> haven't, do so). The statistics for DB1 look bizarrely incorrect, so
> I'd suspect that updating them will fix the problem.
>
> Is PostgreSQL configured in the same way on both systems?
>
> Cheers,
>
> Neil
>