We're building the solution for scaling and managing huge Postgres databases.
More to come, but in the meantime: neki.dev
We're building the solution for scaling and managing huge Postgres databases.
More to come, but in the meantime: neki.dev
Correlating schema/config changes and performance has never been easier.
The perfect tool for squeezing every ounce of performance out of your database resources.
Correlating schema/config changes and performance has never been easier.
The perfect tool for squeezing every ounce of performance out of your database resources.
Every row (tuple) you insert into a Postgres table includes xmin and xmax metadata. xmin is the transaction that created the row, and xmax the one that updates or deleted it.
Every row (tuple) you insert into a Postgres table includes xmin and xmax metadata. xmin is the transaction that created the row, and xmax the one that updates or deleted it.
This latency graph shows a r6id → i7i upgrade. Same vCPU count. Same amount of RAM. Both using local SSDs.
Upgrading to a newer instance makes a big difference.
This latency graph shows a r6id → i7i upgrade. Same vCPU count. Same amount of RAM. Both using local SSDs.
Upgrading to a newer instance makes a big difference.
TPCC is widely used for OLTP, but was published in 1992.
Who's working on this? What do you want to see in a modern OLTP benchmark?
TPCC is widely used for OLTP, but was published in 1992.
Who's working on this? What do you want to see in a modern OLTP benchmark?
Postgres needs to ensure that data is durable while maintaining good write performance + crash recovery ability. The key is in the Write-Ahead Log (WAL).
Postgres needs to ensure that data is durable while maintaining good write performance + crash recovery ability. The key is in the Write-Ahead Log (WAL).
Connection pooling is broadly important for databases, but especially for Postgres because of its process-per-connection architecture.
Don't know what that means? I have the perfect article!
Connection pooling is broadly important for databases, but especially for Postgres because of its process-per-connection architecture.
Don't know what that means? I have the perfect article!
It's the default (and in most cases, required) storage layer for every EC2 instance running in AWS.
This article by Marc Olson was a delightful read on its history and engineering challenges.
www.allthingsdistributed.com/2024/08/cont...
It's the default (and in most cases, required) storage layer for every EC2 instance running in AWS.
This article by Marc Olson was a delightful read on its history and engineering challenges.
www.allthingsdistributed.com/2024/08/cont...
Try btree.app and bplustree.app.
These are standalone sandboxes of the visuals I built for my "B-trees and database indexes" article. Helpful for learning B-tree insertion, search, and node splits.
Try btree.app and bplustree.app.
These are standalone sandboxes of the visuals I built for my "B-trees and database indexes" article. Helpful for learning B-tree insertion, search, and node splits.
If you care about performance, get comfortable running `explain` and `explain analyze` commands regularly, and learn how to interpret its output.
This blog is a great intro.
www.depesz.com/2013/04/16/e...
If you care about performance, get comfortable running `explain` and `explain analyze` commands regularly, and learn how to interpret its output.
This blog is a great intro.
www.depesz.com/2013/04/16/e...
planetscale.com/blog/50-doll...
Keeping nextval() in sync shouldn't be that hard. What am I missing?
Keeping nextval() in sync shouldn't be that hard. What am I missing?
Elastic Block Storage (EBS) is great for low-I/O workloads, but becomes a bottleneck or cost sink for heavy workloads.
Two common types of EBS are gp3 and io2. Both are network-attached storage backed by SSDs, but have different performance characteristics.
Elastic Block Storage (EBS) is great for low-I/O workloads, but becomes a bottleneck or cost sink for heavy workloads.
Two common types of EBS are gp3 and io2. Both are network-attached storage backed by SSDs, but have different performance characteristics.
Foreign key: A column that establishes a relationship between two tables. This is frequently set up as a column in one table (post) that stores primary key values from another table (user) so that it can join between the two.
Foreign key: A column that establishes a relationship between two tables. This is frequently set up as a column in one table (post) that stores primary key values from another table (user) so that it can join between the two.
Jeremy Cole has done MySQL at Twitter, Google, and Shopify. One of the most knowledgeable MySQL engineers in the world, and his blog is an information goldmine.
blog.jcole.us/2013/01/10/b...
Jeremy Cole has done MySQL at Twitter, Google, and Shopify. One of the most knowledgeable MySQL engineers in the world, and his blog is an information goldmine.
blog.jcole.us/2013/01/10/b...
My personal biggest takeaway? Gemini is fast! I mostly stick with Claude but maybe I should give it a go.
My personal biggest takeaway? Gemini is fast! I mostly stick with Claude but maybe I should give it a go.
In both Postgres and MySQL, it's possible for identical SELECTs in the same transaction to see different results.
In both Postgres and MySQL, it's possible for identical SELECTs in the same transaction to see different results.
Required reading for everyone building applications in the cloud.
planetscale.com/blog/the-pri...
Required reading for everyone building applications in the cloud.
The most interesting bit? TrueTime, an API that gives time results with error bounds, and one that guarantees <= 7 ms of clock skew. Impressive!
The downside? Not OSS. Even if it were, would require reproducing the timing hardware.
The most interesting bit? TrueTime, an API that gives time results with error bounds, and one that guarantees <= 7 ms of clock skew. Impressive!
The downside? Not OSS. Even if it were, would require reproducing the timing hardware.
Time to bring it back?
Started this long before PlanetScale Postgres. Would be a fun opportunity to compare the MVCC models of Postgres and MySQL.
Time to bring it back?
Started this long before PlanetScale Postgres. Would be a fun opportunity to compare the MVCC models of Postgres and MySQL.
How do you communicate in the face of unreliability? It's not easy!
This is classically known as the "two generals problem" and is a great way to think about communicating over unreliable channels.
How do you communicate in the face of unreliability? It's not easy!
This is classically known as the "two generals problem" and is a great way to think about communicating over unreliable channels.
io_uring was frequently the worst performer!
It was slower than both `sync` and `worker` in many cases. Tomas Vondra has a wonderful article explaining why it isn't always the best choice.
vondra.me/posts/tuning...
io_uring was frequently the worst performer!
It was slower than both `sync` and `worker` in many cases. Tomas Vondra has a wonderful article explaining why it isn't always the best choice.
vondra.me/posts/tuning...
There's a few surprising results, but overall Postgres 18 has some nice improvements.
Read all about it at the link below.
There's a few surprising results, but overall Postgres 18 has some nice improvements.
Read all about it at the link below.
Both great features with different tradeoffs.
Both great features with different tradeoffs.
This is a neat technique for spreading out increments across many rows to reduce contention.
This is a neat technique for spreading out increments across many rows to reduce contention.