I tried sending this a couple days ago but I wasn't a member of the group so I think it's in limbo. Apologies if a 2nd copy shows up at some point.
We recently migrated a 1.3TB database from 8.4 to 9.2.2 on a new server. As part of this migration we added partitions to the largest tables so we could start removing old data to an archive database. Large queries perform much better due to not hitting the older data as expected. Small queries served from records in memory are suffering a much bigger performance hit than anticipated due to the partitioning. I'm able to duplicate this issue on our server trivially with these commands: http://pgsql.privatepaste.com/7223545173 Running the queries from the command line 10k times (time psql testdb < test1.sql >/dev/null) results in a 2x slowdown for the queries not using testtable_90 directly. (~4s vs ~2s). Running a similar single record select on a non-partitioned table averages 10k in 2s. Running "select 1;" 10k times in the same method averages 1.8 seconds. This matches exactly what I'm seeing in our production database. The numbers are different, but the 2x slowdown persists. Doing a similar test on another table on production with 7 children and 3 check constraints per child results in a 3x slowdown. I'm aware that partitioning has an impact on the planner, but doubling the time of in memory queries with only 5 partitions with 1 check each is much greater than anticipated. Are my expectations off and this is normal behavior or is there something I can do to try and speed these in memory queries up? I was unable to find any information online as to the expected planner impact of X # of partitions. Database information follows: Red Hat Enterprise Linux Server release 6.4 (Santiago) Linux hostname.domainname 2.6.32-358.6.1.el6.x86_64 #1 SMP Fri Mar 29 16:51:51 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux PostgreSQL 9.2.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4), 64-bit Server info: 4x Intel(R) Xeon(R) CPU E5-4620 0 @ 2.20GHz 128gb RAM DateStyle | ISO, MDY | configuration file default_statistics_target | 5000 | configuration file default_text_search_config | pg_catalog.english | configuration file effective_cache_size | 64000MB | configuration file effective_io_concurrency | 2 | configuration file fsync | on | configuration file lc_messages | C | configuration file lc_monetary | C | configuration file lc_numeric | C | configuration file lc_time | C | configuration file max_connections | 500 | configuration file max_stack_depth | 2MB | environment shared_buffers | 32000MB | configuration file synchronous_commit | on | configuration file TimeZone | CST6CDT | configuration file wal_buffers | 16MB | configuration file wal_level | archive | configuration file wal_sync_method | fdatasync | configuration file