The Curious Engineer

All blogs / Databases

PlanetScale

planetscale.com/blog

Posts about the PlanetScale platform, MySQL, PostgreSQL, databases, and more.

DatabasesDistributed systems / cloudPerformance / optimization

Posts
332 from 20 Mar 2020 to 29 Oct 2026
Posting
weekly (70 in the last year)
Kind
company blog

2026 63

  1. Designing a planned switchover for minimum disruption
  2. What was the turning point for Postgres?
  3. Shard design doesn't start from your tables
  4. I don't trust ON DELETE CASCADE
  5. Neki update: $50 Metal, read-only replicas, Azure, and more
  6. Sequences and other volatiles in Neki
  7. PlanetScale is now available on Azure
  8. What gets TOASTed in Postgres
  9. TIN v1.0.6: 2-3x faster, with support for stemming
  10. What today's software owes to Bronze Age clocks
  11. Introducing Dedicated Read Replicas for Postgres
  12. Building a faster, lazier router for Postgres
  13. Handling hot shards
  14. When to choose x86-64 vs aarch64
  15. TIN Postgres search is faster, better, and cheaper
  16. Anatomy of a (Postgres) search engine
  17. Blocking cutovers to save replication slots
  18. The architecture of Neki
  19. Introducing Lead: TIN-compatible full-text search for CI
  20. Introducing TIN: full-text search for Postgres
  21. 118 million queries per second on Neki
  22. Introducing Neki
  23. The lifecycle of a sharded Postgres query
  24. What is a Neki router?
  25. How one connection kills a database
  26. Problems with large tables in Postgres
  27. The history of Postgres sharding
  28. Poisoned Postgres connection pools
  29. What is a data topology?
  30. The dangers of Postgres subtransactions
  31. Concurrency vs. Throughput: why more parallelism can make databases slower
  32. Massively parallel Postgres backups
  33. Postgres backups under the hood
  34. What's new in Postgres 19
  35. Every UPDATE Leaves a Ghost: MVCC, Bloat, and VACUUM in PostgreSQL
  36. Making 768 servers look like 1
  37. When the Postgres query planner goes rogue
  38. Deadlocks and downtime
  39. One Postgres cluster, many apps
  40. The feedback loops behind Kubernetes
  41. See what your database is doing right now with Connections
  42. The only scalable delete in Postgres is DROP TABLE
  43. Egress problems and where to find them
  44. Problem solving with PlanetScale Insights
  45. Transparency in benchmarking
  46. On benchmarking
  47. RLS sounds great until it isn't
  48. Approaches to tenancy in Postgres
  49. Keeping a Postgres queue healthy
  50. Patterns for Postgres Traffic Control
  51. Graceful degradation in Postgres
  52. High memory usage in Postgres is good, actually
  53. Stripe Projects partnership: Provision PlanetScale Postgres and MySQL databases from the Stripe CLI
  54. Enhanced tagging in Postgres Query Insights
  55. Behind the scenes: How Database Traffic Control works
  56. Introducing Database Traffic Control — PlanetScale
  57. Scaling Postgres connections with PgBouncer
  58. Drizzle joins PlanetScale
  59. Video Conferencing with Postgres
  60. Faster PlanetScale Postgres connections with Cloudflare Hyperdrive
  61. Introducing the PlanetScale MCP server
  62. Database Transactions
  63. Automating our changelog with Cursor commands

2025 30

  1. Postgres 18 is now available
  2. Using MotherDuck with PlanetScale
  3. $50 PlanetScale Metal is GA for Postgres
  4. AI-Powered Postgres index suggestions
  5. $5 PlanetScale is live
  6. Announcing Vitess 23
  7. $50 PlanetScale Metal
  8. $5 PlanetScale
  9. Report on our investigation of the 2025-10-20 incident in AWS us-east-1 — PlanetScale
  10. Benchmarking Postgres 17 vs 18
  11. Larger than RAM Vector Indexes for Relational Databases
  12. Partnering with Cloudflare to bring you the fastest globally distributed applications
  13. Processes and Threads
  14. PlanetScale for Postgres is now GA
  15. Postgres High Availability with CDC
  16. Announcing Neki
  17. Caching
  18. The principles of extreme fault tolerance
  19. Announcing PlanetScale for Postgres
  20. Benchmarking Postgres
  21. Announcing Vitess 22
  22. PlanetScale vectors is now GA
  23. Faster interpreters in Go: Catching up with C++
  24. The Real Failure Rate of EBS
  25. IO devices and latency
  26. Upgrading Query Insights to Metal
  27. PlanetScale Metal: There’s no replacement for displacement
  28. Announcing PlanetScale Metal
  29. Automating cherry-picks between OSS and private forks
  30. Database Sharding

2024 42

  1. Anatomy of a Throttler, part 3
  2. Introducing sharding on PlanetScale with workflows
  3. Announcing Vitess 21
  4. Announcing the PlanetScale vectors public beta
  5. Anatomy of a Throttler, part 2
  6. B-trees and database indexes
  7. Instant deploy requests
  8. Anatomy of a Throttler, part 1
  9. Increase IOPS and throughput with sharding
  10. Tracking index usage with Insights
  11. Zero downtime migrations at petabyte scale
  12. Faster backups with sharding
  13. Building data pipelines with Vitess
  14. The State of Online Schema Migrations in MySQL
  15. Optimizing aggregation in the Vitess query planner
  16. Dealing with large tables
  17. Sharding strategies: directory-based, range-based, and hash-based
  18. Announcing Vitess 20
  19. Self-managed Vitess vs Managed Vitess with PlanetScale
  20. Achieving data consistency with the consistent lookup Vindex
  21. The MySQL adaptive hash index
  22. Introducing global replica credentials
  23. Profiling memory usage in MySQL
  24. Summer 2023: Fuzzing Vitess at PlanetScale
  25. How PlanetScale makes schema changes
  26. Identifying and profiling problematic MySQL queries
  27. The Problem with Using a UUID Primary Key in MySQL
  28. Announcing Vitess 19
  29. PlanetScale forever
  30. Introducing schema recommendations
  31. Foreign key constraints are now generally available
  32. Amazon Aurora Pricing: The many surprising costs of running an Aurora database
  33. Three common MySQL database design mistakes
  34. OAuth applications are now available to everyone
  35. Deprecating the Scaler plan
  36. PlanetScale branching vs. Amazon Aurora blue/green deployments
  37. Databases at scale
  38. Considerations for building a database disaster recovery plan
  39. Working with Geospatial Features in MySQL
  40. PlanetScale vs Amazon Aurora replication
  41. Introducing the Vantage and PlanetScale integration
  42. MySQL isolation levels and how they work

2023 92

  1. Introducing the schemadiff command line tool
  2. $ pscale ping
  3. Announcing foreign key constraints support
  4. The challenges of supporting foreign key constraints
  5. What is HTAP?
  6. Introducing Insights Anomalies
  7. Webhook security: a hands-on guide
  8. Three surprising benefits of sharding a MySQL database
  9. MySQL replication: Best practices and considerations
  10. A guide to HTML email with Ruby on Rails and Tailwind CSS
  11. Sharding for cost-effective database management
  12. PlanetScale ranks 188th in Deloitte’s top 500 fastest-growing companies
  13. Announcing Vitess 18
  14. Announcing the Fivetran integration
  15. Introducing webhooks
  16. What is MySQL replication and when should you use it?
  17. Sync user data between Clerk and a PlanetScale MySQL database
  18. Introducing database reports
  19. Distributed caching systems and MySQL
  20. What is MySQL partitioning?
  21. MySQL High Availability: Connection handling and concurrency
  22. Personalizing your onboarding with Markdoc
  23. PlanetScale vs. Amazon Aurora
  24. PlanetScale vs. Amazon RDS
  25. PlanetScale is bringing vector search and storage to MySQL
  26. PlanetScale Managed is now PCI compliant
  27. Guide to scaling your database: When to shard MySQL and Postgres
  28. Scaling hundreds of thousands of database clusters on Kubernetes
  29. The art and science of database sharding
  30. Streamline database management using the PlanetScale Netlify integration
  31. Emulating foreign key constraints with Drizzle relationships
  32. Horizontal sharding for MySQL made easy
  33. Deploying multiple schema changes at once
  34. What makes up a PlanetScale Vitess database?
  35. Vitess for us all
  36. Introducing IP restrictions
  37. Storing time series data in sharded MySQL to power Query Insights
  38. Is your database bleeding money?
  39. How PlanetScale unlocks developer productivity
  40. Incorporating databases into your CI/CD pipeline
  41. Performant database tree traversal with Rails
  42. Announcing PlanetScale Scaler Pro
  43. Sharding vs. partitioning: What’s the difference?
  44. Introduction to PlanetScale
  45. How PlanetScale keeps your data safe
  46. Announcing Vitess 17
  47. Action on your product data in real time
  48. Datetimes versus timestamps in MySQL
  49. Generated Hash Columns in MySQL
  50. Using PlanetScale with Serverless Framework Node applications on AWS
  51. PlanetScale joins AWS ISV Accelerate
  52. Announcing the Hightouch integration
  53. Using redundant conditions to unlock indexes in MySQL
  54. Optimizing query planning in Vitess: a step-by-step approach
  55. Pulling back the curtain: the new database overview page
  56. Increase developer productivity with Database DevOps
  57. PlanetScale is now available on the Google Cloud Marketplace
  58. Character sets and collations in MySQL
  59. MariaDB vs. MySQL
  60. Backward compatible database changes
  61. Why isn’t MySQL using my index?
  62. Serverless Laravel applications with AWS Lambda and PlanetScale
  63. Database branching: three-way merge for schema changes
  64. Query performance analysis with Insights
  65. MySQL for application developers
  66. Pagination in MySQL
  67. Safely making database schema changes
  68. What is database sharding and how does it work?
  69. An update to our workflow: safe migrations
  70. Declarative schema migrations
  71. Versioned schema migrations
  72. Announcing the PlanetScale GitHub Actions
  73. Building SaaS applications with PlanetScale + Netlify
  74. How to read MySQL EXPLAINs
  75. Connection pooling in Vitess
  76. How to Upgrade from MySQL 5.7 to 8.0
  77. Zero downtime Rails migrations with the PlanetScale Rails gem
  78. Preparing for MySQL 5.7 EOL
  79. DevOps with PlanetScale
  80. Using MySQL with SQLAlchemy: Hands-on Examples
  81. Improvements to database branch pages
  82. Announcing Vitess 16
  83. What are the disadvantages of database indexes?
  84. Faster MySQL with HTTP/3
  85. Migrating from Postgres to MySQL
  86. Introducing the PlanetScale API and OAuth applications
  87. Common MySQL errors and how to fix them
  88. MySQL scaling made easy
  89. What is the N+1 Query Problem and How to Solve it?
  90. Support’s notes from the field
  91. Solving N+1’s with Rails `exists?` queries
  92. Faster MySQL with HTTP/3

2022 70

  1. What is a query planner?
  2. Temporal workflows at scale: Part 2 — Sharding in production
  3. Rails’ safety mechanisms
  4. Building a multi-region Rails application with PlanetScale
  5. Secure your connection string with AWS KMS
  6. All of the tech PlanetScale Vitess replaces
  7. PlanetScale and HIPAA
  8. One million connections
  9. MySQL Integers: INT BIGINT and more
  10. Announcing Vitess 15
  11. What is Vitess: resiliency, scalability, and performance
  12. Laravel’s safety mechanisms
  13. Optimizing queries in arewefastyet
  14. Introduction to MySQL joins
  15. Indexing JSON in MySQL
  16. MySQL data types: VARCHAR and CHAR
  17. Debugging database errors with Insights
  18. The MySQL JSON data type
  19. Using the PlanetScale serverless driver with AWS Lambda functions
  20. Declarative MySQL schemas with Atlas CLI
  21. Build a multi-stage pipeline with PlanetScale and AWS
  22. TAOBench: Running social media workloads on PlanetScale
  23. Gated Deployments: addressing the complexity of schema deployments at scale
  24. One million queries per second with MySQL
  25. Zero downtime Laravel migrations
  26. Run SQL script files on a PlanetScale database
  27. How product design works at PlanetScale
  28. Introducing the PlanetScale serverless driver for JavaScript
  29. Introducing FastPage: Faster offset pagination for Rails apps
  30. How to kill Sidekiq jobs in Ruby on Rails
  31. Database DevOps
  32. How PlanetScale prevents MySQL downtime
  33. Ruby on Rails: 3 tips for deleting data at scale
  34. The Slotted Counter Pattern
  35. Behind the scenes: How we built Password Roles
  36. Safely dropping MySQL tables
  37. Temporal Workflows at scale with PlanetScale: Part 1
  38. Announcing Teams: An easier way to manage database administrator access
  39. We now display PlanetScale system status directly in your dashboard
  40. How do Database Indexes Work?
  41. Getting started with the PlanetScale CLI
  42. Consensus algorithms at scale: Part 8 - Closing thoughts
  43. Deploy requests now alert on potential unwanted changes
  44. Consensus algorithms at scale: Part 7 - Propagating requests
  45. Identifying slow Rails queries with sqlcommenter
  46. Announcing Vitess 14
  47. Grouping and aggregations on Vitess
  48. Consensus algorithms at scale: Part 6 - Completing requests
  49. Introducing PlanetScale Insights: Advanced query monitoring
  50. Extract, load, and transform your data with PlanetScale Connect
  51. Introducing PlanetScale Portals: Read-only regions
  52. The operational relational schema paradigm
  53. Consensus algorithms at scale: Part 5 - Handling races
  54. Consensus algorithms at scale: Part 4 - Establishment and revocation
  55. Generics can make your Go code slower
  56. Why we chose NanoIDs for PlanetScale’s API
  57. Revert a migration without losing data
  58. Behind the scenes: How schema reverts work
  59. How to Prevent SQL Injection Attacks in Node.js
  60. Database schema design 101 for relational databases
  61. Announcing Vitess 13
  62. How we made PlanetScale’s background jobs self-healing
  63. Build a Laravel application with a MySQL database
  64. How to seed a database with Prisma and Next.js
  65. Defining the database maturity model
  66. Introduction to Laravel caching
  67. Using the PlanetScale CLI with GitHub Actions workflows
  68. Using entropy for user-friendly strong passwords
  69. How to set up Next.js with Prisma and PlanetScale
  70. How our Rails test suite runs in 1 minute on Buildkite

2021 20

  1. Introducing Prisma’s Data Platform PlanetScale integration
  2. Bring your data to PlanetScale
  3. PlanetScale is GA
  4. Introducing PlanetScale Managed on AWS and GCP
  5. New PlanetScale pricing: Scaler plan upgrades and our new enterprise plan
  6. Comparing AWS’s RDS and PlanetScale
  7. Quick deploys using the Web Console
  8. Optimizing SQL with Query Statistics
  9. NoneSQL All the DevEx
  10. Automatically copy migration data in PlanetScale branches
  11. Building PlanetScale with PlanetScale
  12. Connect any MySQL client to PlanetScale using Connection Strings
  13. PlanetScale on Vitess
  14. Sam Lambert appointed new CEO of PlanetScale
  15. The promises and realities of the relational database model
  16. Integrating PlanetScale with Vercel in a few steps
  17. Serverless finally has a database
  18. Non-Blocking Schema Changes
  19. Announcing PlanetScale: The database for developers.
  20. Announcing Vitess 9.0

2020 15

  1. Announcing Vitess 8.0
  2. Pitfalls of isolation levels in distributed databases
  3. MySQL semi-sync replication: durability consistency and split brains
  4. Consensus algorithms at scale: Part 3 - Use cases
  5. Orchestrator failure detection and recovery: New Beginnings
  6. Consensus algorithms at scale: Part 2 - Rules of consensus
  7. On joining PlanetScale and the vision of open source database infrastructure
  8. Consensus algorithms at scale: Part 1 - Introduction
  9. Learn Horizontal Scaling on PlanetScaleDB with Vitess — Rate Puppies in a Rust app with Sharded MySQL Database
  10. Announcing Vitess 7
  11. Debunking 3 myths about Vitess fault tolerance
  12. Announcing Vitess 6
  13. ACID Transactions are not just for banks — the Vitess approach
  14. Videos: Intro to Vitess—its powerful capabilities and how to get started
  15. PlanetScale migrates open source Vitess test suite from Python to Go