Core Extensions for Performance Tuning
1. pg_stat_statements
o Purpose: Tracks execution statistics of queries.
o Usage: Identifies slow or frequently executed queries for optimization.
o Setup: Add to shared_preload_libraries.
CREATE EXTENSION pg_stat_statements;
2. pg_stat_kcache
o Purpose: Provides OS-level statistics (e.g., CPU and I/O usage) for queries.
o Usage: Offers deeper insights into resource consumption.
o Setup: Requires pg_stat_statements to be enabled.
CREATE EXTENSION pg_stat_kcache;
3. pg_wait_sampling
o Purpose: Samples wait events to identify database bottlenecks.
o Usage: Useful for diagnosing lock contention, I/O waits, and more.
o Setup: Add to shared_preload_libraries.
CREATE EXTENSION pg_wait_sampling;
4. auto_explain
o Purpose: Automatically logs execution plans for slow queries.
o Usage: Diagnoses query planning issues for performance optimization.
o Setup: Configured in postgre.conf.
CREATE EXTENSION auto_explain;
5. hypopg
o Purpose: Allows the creation of hypothetical indexes to evaluate their impact
without actually creating them.
o Usage: Index tuning and optimization.
o Setup:
CREATE EXTENSION hypopg;
Example usage:
Internal
SELECT * FROM hypopg_create_index('CREATE INDEX ON my_table (my_column)');
Monitoring and Diagnostics
6. pg_buffercache
o Purpose: Displays the contents of the shared buffer pool.
o Usage: Identifies how much of your data resides in memory vs. disk.
o Setup:
CREATE EXTENSION pg_buffercache;
Query example:
SELECT * FROM pg_buffercache;
7. pg_cron
o Purpose: Schedules periodic tasks like VACUUM or ANALYZE.
o Usage: Automates maintenance tasks.
CREATE EXTENSION pg_cron;
8. pg_repack
o Purpose: Reorganizes tables and indexes to remove bloat without locking them.
o Usage: Reduces table and index bloat while maintaining availability.
Installation may require external tools.
9. plpg_check
o Purpose: Performs static analysis of PL/pg functions.
o Usage: Identifies inefficiencies and errors in stored procedures.
CREATE EXTENSION plpg_check;
10. pg_sentinel
o Purpose: Provides session-level statistics.
o Usage: Tracks session activity and transaction details for analysis.
CREATE EXTENSION pg_sentinel;
Internal
Advanced Optimization Extensions
11. pg_hint_plan
o Purpose: Allows users to add hints to queries to influence the query planner.
o Usage: Optimizes complex queries where the default planner may choose
suboptimal plans.
CREATE EXTENSION pg_hint_plan;
12. pg_stat_plans
o Purpose: Captures and analyzes query execution plans over time.
o Usage: Identifies query plan changes that impact performance.
CREATE EXTENSION pg_stat_plans;
13. pg_stat_io
o Purpose: Tracks I/O usage at the query and table level.
o Usage: Analyzes I/O bottlenecks in the system.
CREATE EXTENSION pg_stat_io;
14. pg_bigm
o Purpose: Enables fast full-text search with bigram indexing.
o Usage: Speeds up text search operations.
CREATE EXTENSION pg_bigm;
15. pg_prewarm
o Purpose: Preloads tables or indexes into memory at startup or on demand.
o Usage: Improves performance for frequently accessed data.
CREATE EXTENSION pg_prewarm;
Visualization and Insights
16. timescaledb
o Purpose: Optimizes Postgre for time-series data.
o Usage: Enhances performance for time-series workloads.
Internal
CREATE EXTENSION timescaledb;
17. pg_stat_activity (built-in view)
o Purpose: Monitors active queries and their statuses.
o Usage: Identifies long-running queries.
Extensions Summary
Extension Purpose Use Case
pg_stat_statements Query performance statistics Identifying slow queries
pg_stat_kcache OS-level stats Resource consumption analysis
pg_wait_sampling Wait event tracking Bottleneck identification
auto_explain Execution plan logging Query planning optimization
hypopg Hypothetical indexes Index tuning
pg_buffercache Shared buffer analysis Memory usage monitoring
pg_cron Task scheduling Automating maintenance tasks
pg_repack Table/index reorganization Reducing bloat
pg_hint_plan Query planner hints Fine-tuning query plans
pg_prewarm Preloading tables into memory Data preloading
Internal