Re: slow query performance - Mailing list pgsql-general

From Martijn van Oosterhout
Subject Re: slow query performance
Date
Msg-id 20031101003101.GC5475@svana.org
Whole thread Raw
In response to slow query performance  (Dave Weaver <zen13097@zen.co.uk>)
List pgsql-general
Have you tried REINDEX on obs_pkey?

On Wed, Oct 29, 2003 at 09:40:43AM +0000, Dave Weaver wrote:
>
> I'm having severe performance issues with a conceptually simple
> database.  The database has one table, containing weather observations.
> The table currently has about 13.5 million rows, and is being updated
> constantly. The database is running on a dual 550MHz PIII with 512MB RAM.
>
> On the whole, queries are of the form:
>
>     SELECT ? FROM obs WHERE station = ?
>                     AND valid_time < ? AND valid_time > ?
> or:
>     SELECT ? FROM obs WHERE station IN (?, ?, ...)
>                     AND valid_time < ? AND valid_time > ?
>
> Queries like these are taking around 4 to 5 minutes each, which seems
> excessively slow to me (or are my expectations far too optimistic?).
>
> For instance:
>     SELECT station, air_temp FROM obs
>          WHERE station = 'EGBB'
>             AND valid_time > '28/8/03 00:00'
>         AND valid_time < '28/10/03 00:00'
>
> takes 4 mins 32 secs.
>
> An EXPLAIN of the above query says:
>   NOTICE:  QUERY PLAN:
>
>   Index Scan using obs_pkey on obs  (cost=0.00..9.01 rows=1 width=20)
>
> A simple "SELECT count(*) from obs" query takes around that sort of time
> too.
>
> I have run "vacuumdb --analyze obs", to little effect.
>
> How can I speed this up? Where am I going wrong? Is there a problem with
> the table structure, or the indexes? Does the continual updating of the
> database (at the rate of somewhere between 1-3 entries per second) cause
> problems?
>
> The table and indexes are defined as follows:
>
>
>                            Table "obs"
>          Attribute          |           Type           | Modifier
> ----------------------------+--------------------------+----------
>  valid_time                 | timestamp with time zone |
>  metar_air_temp             | double precision         |
>  relative_humidity          | double precision         |
>  pressure_change            | double precision         |
>  ceiling                    | double precision         |
>  metar_dew_point            | double precision         |
>  metar_gusts                | double precision         |
>  wet_bulb_temperature       | double precision         |
>  past_weather               | text                     |
>  visibility                 | double precision         |
>  metar_visibility           | double precision         |
>  precipitation              | double precision         |
>  station                    | character(10)            |
>  pressure_msl               | double precision         |
>  metar_min_temperature_6hr  | double precision         |
>  precipitation_period       | double precision         |
>  metar_wet_bulb             | double precision         |
>  saturation_mixing_ratio    | double precision         |
>  metar_pressure             | double precision         |
>  metar_sky_cover            | text                     |
>  dew_point                  | double precision         |
>  wind_direction             | double precision         |
>  actual_time                | timestamp with time zone |
>  gust_speed                 | double precision         |
>  high_cloud_type            | text                     |
>  precipitation_24hr         | double precision         |
>  metar_precipitation_24hr   | double precision         |
>  pressure_tendency          | text                     |
>  metar_relative_humidity    | double precision         |
>  low_cloud_type             | text                     |
>  metar_max_temperature_6hr  | double precision         |
>  middle_cloud_type          | text                     |
>  air_temp                   | double precision         |
>  low_and_middle_cloud_cover | text                     |
>  metar_wind_dir             | double precision         |
>  metar_weather              | text                     |
>  snow_depth                 | double precision         |
>  metar_snow_depth           | double precision         |
>  min_temp_12hr              | double precision         |
>  present_weather            | text                     |
>  wind_speed                 | double precision         |
>  snow_cover                 | text                     |
>  metar_wind_speed           | double precision         |
>  metar_ceiling              | double precision         |
>  max_temp_12hr              | double precision         |
>  mixing_ratio               | double precision         |
>  pressure_change_3hr        | double precision         |
>  total_cloud                | integer                  |
>  max_temp_24hr              | double precision         |
>  min_temp_24hr              | double precision         |
>  snow_amount_6hr            | double precision         |
> Indices: obs_pkey,
>          obs_station,
>          obs_valid_time
>
>            Index "obs_pkey"
>  Attribute  |           Type
> ------------+--------------------------
>  valid_time | timestamp with time zone
>  station    | character(10)
> unique btree
>
>     Index "obs_station"
>  Attribute |     Type
> -----------+---------------
>  station   | character(10)
> btree
>
>         Index "obs_valid_time"
>  Attribute  |           Type
> ------------+--------------------------
>  valid_time | timestamp with time zone
> btree
>
> (I suspect the obs_valid_time index is redundant, because of the
> obs_pkey index - is that right?)
>
> I'd be grateful for any advice and any clues to help speed this up.
> Many thanks,
> --
> Dave
> email: zen13097 (AT) zen [DOT] co {DOT} uk
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faqs/FAQ.html

--
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> "All that is needed for the forces of evil to triumph is for enough good
> men to do nothing." - Edmond Burke
> "The penalty good people pay for not being interested in politics is to be
> governed by people worse than themselves." - Plato

Attachment

pgsql-general by date:

Previous
From: Martijn van Oosterhout
Date:
Subject: Re: [OT] Choosing a scripting language.
Next
From: Martijn van Oosterhout
Date:
Subject: Re: problem with huge joins