Обсуждение: Slower Performance on Postgres 9.1.6 vs 8.2.11
All... first let me say thank you for this forum.... I am new to it and
relatively new to postgres, more of a sysadmin than a DBA, but let me
explain my issue. I'll try also to post relevant information as well.
Our IT group took over an app that we have running using postgres and it has
been on version 8.2.11 since we acquired it. It is time to get current, so
I have created instances of our production database that mirror exact
hardware for our existing implementation on version 8.2.11 (running Fedora
Core 8 - wow I know) and also version 9.1.6 on Fedora 17. I am able to
mimic the production 8.2 environment exactly without any of the load of
production and the same for the new 9.1 environment so there is no
perverting of numbers based on load that I can't control
Machines are Cloud based images running 4 (dual Core) Processors, with 15GB
of memory... AMAZON m1.Xlarge boxes - 64 bit OS.
I'm running my query using PSQL from the server
Here is what I discovered. I have this Query:
SELECT s.customernumber AS "Cust Num",
s.name AS "Site",
UPPER( p.name ) AS "Product",
UPPER( ii.lotnumber ) AS "Lot Number",
SUM( ii.quantityremaining ) AS "On Hand"
FROM inventoryitems ii
INNER JOIN inventories i ON i.inventoryid = ii.inventoryid
INNER JOIN sites s ON s.siteid = i.siteid
INNER JOIN accounts a ON a.accountid = s.accountid
INNER JOIN products p ON p.productid = ii.productid
WHERE a.customernumber = 'DS-1007'
GROUP BY s.customernumber, s.name, UPPER( p.name ), UPPER( ii.lotnumber )
HAVING SUM( ii.quantityremaining ) > 0
ORDER BY s.name, UPPER( p.name );
EXPLAIN ANALYZE OUTPUT on 8.2.11 is as follows:
http://explain.depesz.com/s/JdW
-or-
(20 rows)
EXPLAIN ANALYZE OUTPUT on 9.1.6 is as follows:
http://explain.depesz.com/s/QZVF
I KNOW, I KNOW the difference is VERY small in terms of actual time, but
percentage wise this is statistically relevant and we are under a crunch to
make our application perform better.
In looking at the explain analyze output, it appears that in every case, 9.1
out performed the 8.2.11 in actually getting the data, but the NESTED LOOP
time is slow enough to make the Total Runtime but as much as a 10th of a
second slower on average...
I have tried tweaking every parameter I can think of and here are some of
the relevant Parameters from my POSTGRESQL.CONF file (and both machines are
running with KERNEL value " sysctl -w kernel.shmmax=665544320" )
9.1.6 values
max_connections = 250
shared_buffers = 800MB
temp_buffers = 8MB
work_mem = 10MB
maintenance_work_mem = 100MB
wal_buffers = 16MB
effective_cache_size = 8GB
8.2.11 values
max_connections = 250
shared_buffers = 600MB
temp_buffers = 1024
work_mem = 6MB
maintenance_work_mem = 100MB
wal_buffers = 64kB
effective_cache_size = 8GB
In my first attempt at migrating to 9.1 I had a different lc_collate value
at the default and the 9.1 query was running at around 2500 to 2600 ms and
that was huge... When I re-init'd my DB with the proper lc_locale set, I
expected my issue to be gone, and while it was to the extent of performance
before, it is still slower consistently.
AGAIN, the time difference is in the nested loop nodes themselves, not in
the Index Scan's. I don't understand this...
Any help will be greatly appreciated.
Rob Cron
rocron@pssd.com
--
View this message in context:
http://postgresql.1045698.n5.nabble.com/Slower-Performance-on-Postgres-9-1-6-vs-8-2-11-tp5729749.html
Sent from the PostgreSQL - performance mailing list archive at Nabble.com.
robcron <rocron@pssd.com> writes:
> Our IT group took over an app that we have running using postgres and it has
> been on version 8.2.11 since we acquired it. It is time to get current, so
> I have created instances of our production database that mirror exact
> hardware for our existing implementation on version 8.2.11 (running Fedora
> Core 8 - wow I know) and also version 9.1.6 on Fedora 17. I am able to
> mimic the production 8.2 environment exactly without any of the load of
> production and the same for the new 9.1 environment so there is no
> perverting of numbers based on load that I can't control
> Machines are Cloud based images running 4 (dual Core) Processors, with 15GB
> of memory... AMAZON m1.Xlarge boxes - 64 bit OS.
Hm ... Amazon cloud is not exactly known for providing rock-stable
performance environment, but anyway the first thing I would have guessed
at, seeing that the plans are basically the same, was a non-C locale
setting. Another thing to check is whether the new machine has higher
timing overhead --- is the speed difference the same when you just run
the query, rather than EXPLAIN ANALYZE'ing it? (If not,
contrib/pg_test_timing from 9.2 or later might yield useful data.)
regards, tom lane
Sorry, Again, I'm really new and so don't know how I would go about getting results from "contrib/pg_test_timing" Is this something that can be done from psql prompt, or will I need my developers to get involved and write me something...? Sorry for being such a newbie....:) -- View this message in context: http://postgresql.1045698.n5.nabble.com/Slower-Performance-on-Postgres-9-1-6-vs-8-2-11-tp5729749p5729764.html Sent from the PostgreSQL - performance mailing list archive at Nabble.com.
Okay, so I took EXPLAIN ANALYZE off and made sure that timing is on "psql" command \timing shows Timing = on Run the query several times.. 9.1.6 runs this query an average of 354 ms 8.2.11 runs this query an average of 437 ms So 9.1 IS FASTER Why is EXPLAIN ANALYZE showing the reverse...of that...? Evidently, since I fixed the database Collation ( set to a value of "C") it has been faster but I got locked into looking at the EXPLAIN ANALYZE results... MMMM very curious. Rob -- View this message in context: http://postgresql.1045698.n5.nabble.com/Slower-Performance-on-Postgres-9-1-6-vs-8-2-11-tp5729749p5729768.html Sent from the PostgreSQL - performance mailing list archive at Nabble.com.
Hello 2012/10/26 robcron <rocron@pssd.com>: > Okay, so I took EXPLAIN ANALYZE off and made sure that timing is on "psql" > command \timing shows > > Timing = on > > Run the query several times.. > > 9.1.6 runs this query an average of 354 ms > 8.2.11 runs this query an average of 437 ms > > So 9.1 IS FASTER > > Why is EXPLAIN ANALYZE showing the reverse...of that...? > > Evidently, since I fixed the database Collation ( set to a value of "C") it > has been faster but I got locked into looking at the EXPLAIN ANALYZE > results... > > MMMM very curious. 9.1 EXPLAIN ANALYZE collect significantly more information about execution - so there can be higher overhead Regards Pavel > > Rob > > > > -- > View this message in context: http://postgresql.1045698.n5.nabble.com/Slower-Performance-on-Postgres-9-1-6-vs-8-2-11-tp5729749p5729768.html > Sent from the PostgreSQL - performance mailing list archive at Nabble.com. > > > -- > Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-performance
Thank you all for your replies. I did figure out what is going on. 9.1 is indeed faster than 8.2.11 so we are good to go forward. Thank you again -- View this message in context: http://postgresql.1045698.n5.nabble.com/Slower-Performance-on-Postgres-9-1-6-vs-8-2-11-tp5729749p5729991.html Sent from the PostgreSQL - performance mailing list archive at Nabble.com.