3 ms·
> Different table statistics can cause the planner to go in wildly different directions Exactly. That's why my team and I (Postgres.ai) have developed Database
by samokhvalov 5y ago
> Different table statistics can cause the planner to go in wildly different directions
Exactly. That's why my team and I (Postgres.ai) have developed Database Lab Engine [1] and a chatops tool for SQL optimization, Joe bot [2], both are open-source (AGPLv3).
EXPLAIN (ANALYZE, BUFFERS) has to be executed on the same-size DB, with properly adjusted Postgres configuration.
Interesting, that the machine you might using for query plan troubleshooting, can have less RAM and different hardware in general – it doesn't matter for the planner. Even shared_buffers doesn't matter – you can set effective_cache_size matching production (this trick we use in Database Lab when hardware is weaker than on production).
As for the cache states – very good point as well. I'm advocating for buffers- or rows-centric approach: first, optimization should be done to reduce the numbers of buffers or, if you're working with "logical" (dump/restore) copy of the database rather than "physical" (PGDATA copy, keeping the same data layout, including bloat, etc.) – the fewer the numbers, the better. Only then, you pay attention to timing – and keep in mind what can happen under the worst conditions (everything is read from disk), if it makes sense.
[1] https://postgres.ai/products/how-it-works https://postgres.ai/products/how-it-works
[2] https://postgres.ai/products/joe https://postgres.ai/products/joe
- samokhvalov 5y ago> tools to screw up table statistics Perhaps you already know these, but just in case: - https://github.com/ossc-db https://github.com/ossc-db: pg_dbms_stats, pg_store_plans, pg_hint_plan - https://github.com/HypoPG/hypopg https://github.com/HypoPG/hypopg