Re: Query running slow for only one specific id. (Postgres 9.3) version

From: Steve Crawford <scrawford(at)pinpointresearch(dot)com>
To: "Sheena, Prabhjot" <Prabhjot(dot)Singh(at)classmates(dot)com>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>, "pgsql-performance(at)postgresql(dot)org" <pgsql-performance(at)postgresql(dot)org>
Subject: Re: Query running slow for only one specific id. (Postgres 9.3) version
Date: 2015-06-05 18:24:34
Message-ID: 5571E962.90701@pinpointresearch.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-performance

On 06/05/2015 10:54 AM, Sheena, Prabhjot wrote:
>
> Postgresql 9.3 Version
>
> Guys
>
> Here is the issue that I’m facing for couple of weeks now.
> I have table (size 7GB)
>
> *If I run this query with this specific registration id it is using
> the wrong execution plan and takes more than a minute to complete.
> Total number of rows for this registration_id is only 414 in this table*
>
> explain analyze SELECT max(last_update_date) AS last_update_date FROM
> btdt_responses WHERE registration_id = 8718704208 AND response != 4;
>
> QUERY PLAN
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Result (cost=2902.98..2903.01 rows=1 width=0) (actual
> time=86910.730..86910.731 rows=1 loops=1)
>
> InitPlan 1 (returns $0)
>
> -> Limit (cost=0.57..2902.98 rows=1 width=8) (actual
> time=86910.725..86910.725 rows=1 loops=1)
>
> -> Index Scan Backward using btdt_responses_n5 on
> btdt_responses (cost=0.57..6425932.41 rows=2214 width=8) (actual
> time=86910.723..86910.723 rows=1 loops=1)
>
> Index Cond: (last_update_date IS NOT NULL)
>
> Filter: ((response <> 4) AND (registration_id =
> 8718704208::bigint))
>
> Rows Removed by Filter: 52145434
>
> Total runtime: 86910.766 ms
>
> *Same query with any other registration id will come back in milli
> seconds *
>
> explain analyze SELECT max(last_update_date) AS last_update_date FROM
> btdt_responses WHERE registration_id = 8688546267 AND response != 4;
>
> QUERY PLAN
>
> ----------------------------------------------------------------------------------------------------------------------------------------------
>
> Aggregate (cost=529.75..529.78 rows=1 width=8) (actual
> time=19.723..19.723 rows=1 loops=1)
>
> -> Index Scan using btdt_responses_u2 on btdt_responses
> (cost=0.57..529.45 rows=119 width=8) (actual time=0.097..19.689
> rows=72 loops=1)
>
> Index Cond: (registration_id = 8688546267::bigint)
>
> Filter: (response <> 4)
>
> Rows Removed by Filter: 22
>
> Total runtime: 19.769 ms
>
A couple initial questions:

1. Does the result change if you analyze the table and rerun the query?

2. Are there any non-default settings for statistics collection on your
database?

-Steve

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Robert Haas 2015-06-05 18:26:57 Re: [HACKERS] 9.4.1 -> 9.4.2 problem: could not access status of transaction 1
Previous Message Melvin Davidson 2015-06-05 18:23:38 Re: alter column type

Browse pgsql-performance by date

  From Date Subject
Next Message Sheena, Prabhjot 2015-06-05 18:38:13 Re: Query running slow for only one specific id. (Postgres 9.3) version
Previous Message Igor Neyman 2015-06-05 18:05:36 Re: Query running slow for only one specific id. (Postgres 9.3) version