Re: hash aggregation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11.10.2012 17:15, Korisk wrote:
> "IOS scan" ?
> Index Only Scan
> 
> What's your seq_page_cost and random_page_cost?
> 
> hashes=# SELECT name, setting, reset_val FROM pg_settings WHERE setting <> reset_val;
>           name           |    setting     | reset_val 
> -------------------------+----------------+-----------
>  archive_command         | (disabled)     | 
>  enable_bitmapscan       | off            | on
>  enable_indexscan        | off            | on
>  enable_seqscan          | off            | on
>  log_file_mode           | 0600           | 384
>  random_page_cost        | 0.1            | 4
>  seq_page_cost           | 0.1            | 1
>  transaction_isolation   | read committed | default
>  unix_socket_permissions | 0777           | 511
> (9 rows)
> 
> Postgresql 9.2.1 was configured and built with default settings.
> 
> Thank you.

Hi,

so how much RAM does the system have? Because if you're using the
default shared buffers size (32MB IIRC), that's the first thing you
should bump up. It's usually recommended to set it to ~25% of RAM, but
not more than ~10GB. Set also the work_mem and maintenance_work_mem,
depending on the amount of RAM you have.

Then set effective_cache_size to 75% of RAM (this is just a hint to the
planner, it won't really allocate memory).

Restart the database and try the queries again. Don't run them with
EXPLAIN ANALYZE because that adds overhead that may easily make some of
the queries much slower.

It's great to see the estimates and actual row counts, but for timing
queries it's a poor choice (even the TIMING OFF added in 9.2 is not
exactly overhead-free). Maybe this is what made the seqscan look much
slower?

I usually run them from psql like this

\o /dev/null
\timing on
SELECT ...

which gives me more reliable timing results (especially when executed
right on the server).

Only if all this tuning fails, it's time to fine-tune the knobs, i.e.
the cost variables. Please, don't change the seq_page_cost, always keep
it at 1.0 and change only the other values.

For example if everything fits into the RAM, you may change the
random_page_cost to 1.5 or lower (I'd never recommend to set it lower
than seq_page_cost), and then you may start tuning the cpu_* costs.

But please, this is the last thing you should do - tune the server
properly first. There's even a very nice wiki page about tuning
PostgreSQL servers:

  http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

regards
Tomas


-- 
Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux