The Curious Engineer

All blogs / Databases

pganalyze Blog

pganalyze.com/blog

DBAs and developers use pganalyze to identify the root cause of performance issues, optimize queries and to get alerts about critical issues. Sign up for free!

DatabasesPerformance / optimization

Posts
200 from 20 Mar 2014 to 15 Oct 2026
Posting
monthly (19 in the last year)
Kind
company blog
Feed
https://pganalyze.com/feed.xml

2026 18

  1. Safely enable AI Coding Tools to use EXPLAIN ANALYZE on production: Introducing Workbooks in the pganalyze MCP Server
  2. Postgres Monitoring for SQL Server DBAs: Statistics and Logs 101
  3. Postgres in Production Special Series: How to Query pg_stat_statements to Find Slow and Expensive Postgres Queries (Part 7)
  4. Postgres in Production Special Series: Diagnosing High Cardinality Workloads in pg_stat_statements (Part 6)
  5. Find and fix slow Postgres queries on Supabase and Neon with pganalyze
  6. New Query Advisor Insights: Inefficient Index Use, work_mem tuning, and OR to UNION rewrite
  7. Postgres in Production Special Series: Configuring pg_stat_statements to Reduce Deallocations (Part 5)
  8. Postgres in Production Special Series: How pg_stat_statements Decides What to Keep (Part 4)
  9. Postgres in Production Special Series: Where Your Query Text Actually Lives (Part 3)
  10. New in pganalyze: Server Groups and Cluster-Wide Query Performance
  11. Postgres in Production Special Series: What Makes a Statement Unique (Part 2)
  12. pganalyze MCP Server is now in Public Preview
  13. Postgres in Production Special Series: What pg_stat_statements Is and Isn't (Part 1)
  14. Waiting for Postgres 19: Reduced timing overhead for EXPLAIN ANALYZE with RDTSC
  15. The Dilemma of the ‘AI DBA’
  16. Waiting for Postgres 19: Better Planner Hints with Path Generation Strategies
  17. pganalyze Index Advisor is Now Cluster-Aware
  18. Extended 100 day retention in pganalyze, and the new storage format that made it work

2025 9

  1. Continue reading→
  2. How we used pg_query to rewrite queries to fix bad query plans
  3. Introducing pganalyze Query Advisor: Proactive Query Plan Optimization for Postgres
  4. Waiting for Postgres 18: Accelerating Disk Reads with Asynchronous I/O
  5. Postgres vs. SQL Server: B-Tree Index Differences & the Benefit of Deduplication
  6. How Notion Runs PostgreSQL at Scale on Amazon RDS with pganalyze
  7. Comparing EXPLAIN Plans is hard (and how pganalyze does it)
  8. Replacing Oracle Hints: Best Practices with pg_hint_plan on PostgreSQL
  9. Introducing Query Tuning Workbooks: Safely Tune Postgres Queries on Production with pganalyze

2024 30

  1. Tracking Postgres Buffer Cache Statistics over time with pganalyze
  2. Introducing Postgres Plan Statistics in pganalyze for Amazon Aurora
  3. Postgres Planner Quirks: Incremental Sort, and when it goes wrong
  4. Constraint Programming in Action: Optimizing Postgres Index Selection
  5. A practical introduction to Constraint Programming using CP-SAT and Python
  6. The surprising logic of the Postgres work_mem setting, and how to tune it
  7. Waiting for Postgres 17: Better Query Plans for Materialized CTE Scans
  8. Postgres Planner Quirks: JOIN Equivalence Classes and IN/ANY filters
  9. What's (not) in Postgres 17 beta1, and how to test it
  10. Postgres Planner Quirks: How to fix bad JSONB selectivity estimates
  11. Postgres CVE-2024-4317 and how to fix the system views
  12. Postgres Planner Quirks: The impact of ORDER BY + LIMIT on index usage
  13. Waiting for Postgres 17: Streaming I/O for sequential scans & ANALYZE
  14. Waiting for Postgres 17: Faster B-Tree Index Scans for IN(...) lists and ANY =
  15. Waiting for Postgres 17: Benchmarking with pg_buffercache_evict
  16. Waiting for Postgres 17: Faster VACUUM with Adaptive Radix Trees
  17. Waiting for Postgres 17: Improved EXPLAIN for SubPlan nodes
  18. Waiting for Postgres 17: The new built-in C.UTF-8 locale
  19. How Figma built DBProxy for sharding Postgres
  20. Tuning random_page_cost and how index correlation affects query plans
  21. Waiting for Postgres 17: Configurable SLRU cache sizes for increased performance
  22. Introducing pganalyze Index Advisor 3.0 - A workload-aware system for finding missing indexes in Postgres
  23. Speeding up partial COUNT(*) in Postgres by using LIMIT in a subquery
  24. Out of range planner statistics and "get_actual_variable_range" in Postgres
  25. Faster query plans with Postgres 16: Incremental Sorts, Anti-JOINs and more
  26. Reducing table size with optimal column ordering and array-based storage
  27. Finding the root cause of locking problems in Postgres
  28. How to partition Postgres tables by timestamp based UUIDs
  29. The different trade-offs of Distributed Postgres architectures
  30. Introducing pg_query for Postgres 16 - Parsing SQL/JSON, Windows support, PL/pgSQL parse mode & more

2023 50

  1. Waiting for Postgres 17: Incremental base backups
  2. Zero downtime Postgres upgrades and how to logically replicate very large tables
  3. The un-fun work of making Postgres FIPS compliant
  4. Exploring Postgres VACUUM with the VACUUM Simulator
  5. Avoiding deadlocks in Postgres migrations
  6. How to use CREATE STATISTICS to improve a plan rows estimate, and why it matters
  7. GitLab's challenge with Postgres LWLock lock_manager contention
  8. The pg_stat_checkpointer view in Postgres 17
  9. Performance implications of medium size values and TOAST in Postgres and how to mitigate them
  10. PgBouncer 1.21 adds prepared statement support in transaction mode
  11. What the new Rails 7.1 brings for Postgres users
  12. HOT Updates and BRIN indexes in Postgres 16
  13. Postgres I/O Basics, and how to efficiently pack table pages
  14. 4 improvements in Postgres 16 that you might not know about yet
  15. EXPLAIN (ANALYZE, BUFFERS) and interpreting shared buffers hit in Nested Loops
  16. Postgres 16 is released!
  17. How partition-wise joins and aggregates improve query performance
  18. Optimizing bulk loads in Postgres, and how COPY helps with cache performance
  19. Handling outliers in BRIN indexes with the new multi minmax operator class
  20. Partitioning in Postgres and the risk of high partition counts
  21. Introducing pganalyze VACUUM Advisor: Workload-aware autovacuum tuning for Postgres
  22. How Table Access Methods in Postgres may offer a future without Bloat
  23. How to optimize correlated subqueries in Postgres
  24. Postgres performance with IN vs ANY
  25. Storing and querying vector data in Postgres with pgvector
  26. Speed up Postgres with transaction pooling with prepared statements
  27. How to use HOT Updates in Postgres to make CLUSTER work better
  28. How Figma and Notion scaled Postgres
  29. How bulk loading with COPY can be 300% times faster in Postgres 16 Beta 1
  30. Tuning huge pages in Postgres
  31. A Postmortem on High Memory Usage with Prepared Statements
  32. Forcing Join Order in Postgres Using Optimization Barriers
  33. Postgres 16: Logical decoding on standbys
  34. Postgres 16: Running EXPLAIN on any query (even with $1 parameters!)
  35. Postgres 16: Buffer cache hit ratio and I/O times in pg_stat_io
  36. Continue reading→
  37. PL/Rust 1.0 and its trusted language mode
  38. Collations in Postgres
  39. Postgres connection pooling: Comparing PgCat and pgbouncer
  40. UUIDs vs Serial for Primary Keys - what's the right choice?
  41. Handling integer sequence overflow without downtime in Postgres
  42. How Postgres DBAs can use pg_stat_io
  43. Unlogged tables in Postgres: Is their data truly gone after a crash?
  44. Avoid Postgres performance cliffs with MultiXact IDs and foreign keys
  45. Postgres 16: Cumulative I/O statistics with pg_stat_io
  46. Never run VACUUM FULL: How to run pg_repack on Amazon RDS and Aurora
  47. Tracing Locks in Postgres using eBPF programs
  48. Postgres 16: Surviving without a superuser & reserved_connections
  49. Using Memoize to speed up joins between two Postgres tables
  50. Using pgbench to load data faster, and the random_normal function in PG16

2022 56

  1. Speed up Postgres queries with UNIONs and subquery pull-up
  2. Benchmarking multi-column, covering and hash indexes in Postgres
  3. Roaring Bitmaps and pgfaceting: Fast counting across large datasets in Postgres
  4. Lock monitoring in Postgres: Find blocking queries in a lock tree with pganalyze
  5. Creating custom extensions on Amazon RDS and Aurora with pg_tle
  6. PostgreSQL ANY vs IN lists: Bind parameters and performance
  7. 5mins of Postgres E44: Reducing replication lag with maintenance_io_concurrency in Postgres 15
  8. 5mins of Postgres E43: Logical replication in Postgres 15 & why the REPLICA IDENTITY matters
  9. 5mins of Postgres E42: A surprising case of very large integers causing a Sequential Scan
  10. 5mins of Postgres E41: Tuning shared_buffers for OLTP and data warehouse workloads & is 25% of RAM a good choice?
  11. 5mins of Postgres E40: How to debug slow Postgres UPDATEs and bloated tables with auto_explain & page_inspect
  12. 5mins of Postgres E39: Postgres 15 release, and 6 tips for managing indexes
  13. 5mins of Postgres E38: When to use BRIN indexes in Postgres, tuning pages_per_range and determining correlation with pg_stats
  14. 5mins of Postgres E37: New in Postgres 15: Logical replication column filters & database-wide ICU collations
  15. 5mins of Postgres E36: Optimizing Postgres query throughput in Python using pipeline mode and psycopg 3.1
  16. 5mins of Postgres E35: How to run EXPLAIN on normalized queries from pg_stat_statements using plan_cache_mode
  17. 5mins of Postgres E34: Making the most of Parallel VACUUM and why SQL/JSON was pushed out to Postgres 16
  18. 5mins of Postgres E33: Postgres on Kubernetes, choosing the right operator, and handling major version upgrades
  19. 5mins of Postgres E32: Benchmarking and improving query network latency using tc, COPY and pipeline mode
  20. 5mins of Postgres E31: Postgres security patch release, spotting vulnerable extensions and securing the public schema
  21. 5mins of Postgres E30: Postgres performance puzzle, Linux readahead and tuning effective_io_concurrency
  22. 5mins of Postgres E29: Postgres lock conflicts on Amazon Aurora & tuning max_standby_streaming_delay and hot_standby_feedback
  23. 5mins of Postgres E28: Row Level Security in Postgres, security invoker views and why LEAKPROOF functions matter
  24. 5mins of Postgres E27: Postgres 16 - Make subquery alias optional in FROM clause
  25. 5mins of Postgres E26: New in Postgres 15 - NULL handling in UNIQUE constraints & Parallel DISTINCT
  26. 5mins of Postgres E25: Postgres lock monitoring, LWLocks and the log_lock_waits setting
  27. 5mins of Postgres E24: Tuning the Postgres statistics target & understanding selectivity for spatial indexes
  28. 5mins of Postgres E23: Fuzzy text search & case-insensitive ICU collations in Postgres
  29. 5mins of Postgres E22: Reducing AWS Aurora I/O costs with table partitioning & understanding partition pruning
  30. 5mins of Postgres E21: Server-side backup compression with LZ4 and Zstandard in Postgres 15, and the removal of exclusive backup mode
  31. 5mins of Postgres E20: An important bug in Postgres 14 with REINDEX / CREATE INDEX CONCURRENTLY, and using the amcheck extension
  32. A balanced approach to automatic Postgres indexing: The new version of the pganalyze Index Advisor
  33. An automatic indexing system for Postgres: How we built the pganalyze Indexing Engine
  34. 5mins of Postgres E19: Speeding up sort performance in Postgres 15
  35. Design at pganalyze: How we use design principles to develop new features and products
  36. 5mins of Postgres E18: Partition pruning, prepared statements and generic vs custom query plans
  37. 5mins of Postgres E17: Demystifying Postgres for application developers: A mental model for tables and indexes
  38. 5mins of Postgres E16: Incremental Materialized Views with pg_ivm and Looking Ahead to Postgres 15 Beta 1
  39. The Unexpected Find That Freed 20GB of Unused Index Space
  40. 5mins of Postgres E15: Tuning Postgres' Deterministic Query Planner, Extended Statistics and Join Collapse Limits
  41. 5mins of Postgres E14: HOT Updates vs Bottom-Up Index Deletion in Postgres 14
  42. 5mins of Postgres E13: New SQL/JSON and JSON_TABLE features in Postgres 15
  43. 5mins of Postgres E12: The basics of tuning VACUUM and autovacuum
  44. How Postgres Chooses Which Index To Use For A Query
  45. Postgres INSERT ON CONFLICT and how it compares to MERGE in Postgres 15
  46. 5mins of Postgres E10: max_wal_size, Postgres full page writes and UUID vs BIGINT primary keys
  47. 5mins of Postgres E9: PostGIS vs GPUs, tuning parallel queries, and automating Citus extension benchmarks with HammerDB
  48. 5mins of Postgres E8: Postgres Auditing: Table triggers with supabase vs the pgAudit extension
  49. 5mins of Postgres E7: Autovacuum, dead tuples not yet removable, and the Postgres xmin horizon
  50. 5mins of Postgres E6: Optimizing Postgres Text Search with Trigrams and GiST indexes
  51. 5mins of Postgres E5: Finding the root cause of high CPU utilization in Postgres with EXPLAIN and the Linux perf command
  52. 5mins of Postgres E4: Writing your own custom Postgres aggregates with Rust or raw SQL
  53. 5mins of Postgres E3: Postgres performance cliffs with large JSONB values and TOAST
  54. 5mins of Postgres E2: Using unnest(..), generate_series(), and PostGIS
  55. 5mins of Postgres E1: Using Postgres statistics to improve bad query plans, pg_hint_plan extension
  56. Postgres in 2021: An Observer's Year In Review

2021 14

  1. The Fastest Way To Load Data Into Postgres With Ruby on Rails
  2. Understanding Postgres GIN Indexes: The Good and the Bad
  3. Postgres Views in Django
  4. How we deconstructed the Postgres planner to find indexing opportunities
  5. A better way to index your Postgres database: pganalyze Index Advisor
  6. Using Postgres CREATE INDEX: Understanding operator classes, index types & more
  7. Efficient Pagination: PostgreSQL and Django
  8. PostgreSQL Partitioning in Django
  9. GeoDjango and PostGIS in Django
  10. Using Postgres Row-Level Security in Ruby on Rails
  11. A look at Postgres 14: Performance and Monitoring Improvements
  12. Creating Custom Postgres Data Types in Rails
  13. Introducing pg_query 2.0: The easiest way to parse Postgres queries
  14. Efficient Postgres Full Text Search in Django

2020 10

  1. Creating Custom Postgres Data Types in Django
  2. PostGIS vs. Geocoder in Rails
  3. Lessons Learned from Running Postgres 13: Better Performance, Monitoring & More
  4. Using Postgres Row-Level Security in Python and Django
  5. Postgres JSONB Fields in Django
  6. Building SVG Components in React
  7. Advanced Active Record: Using Subqueries in Rails
  8. Introducing New Charts & Date Picker in pganalyze
  9. Full Text Search in Milliseconds with Rails and PostgreSQL
  10. Effectively Using Materialized Views in Ruby on Rails

2019 4

  1. Introducing Automated Postgres EXPLAIN Visualization & Insights
  2. Similarity in Postgres and Rails using Trigrams
  3. Efficient GraphQL queries in Ruby on Rails & Postgres
  4. Postgres Connection Tracing, Wait Event Analysis & Vacuum Monitoring go into GA on pganalyze

2018 3

  1. Postgres 11: Monitoring JIT performance, Auto Prewarm & Stored Procedures
  2. Postgres Log Monitoring with pganalyze: Introducing Log Insights 2.0
  3. Postgres Log Monitoring 101: Deadlocks, Checkpoint Tuning & Blocked Queries

2017 3

  1. Visualizing & Tuning Postgres Autovacuum
  2. Whats New in Postgres 10: Monitoring Improvements
  3. Introducing Log Insights: Realtime Analysis of Postgres Logs

2015 1

  1. Monitoring PostgreSQL 9.5 & Improved Weekly Reports

2014 2

  1. Introducing pg_query: Parse PostgreSQL queries in Ruby
  2. Announcing The All-New Database Check-Up