---
title: "Postgres on NVMe: performance and the convergence of transactions and analytics"
description: "The post examines how local NVMe storage changes Postgres performance, particularly when working sets exceed memory and disk latency becomes the bottleneck. It argues that while faster storage accelerates transactional workloads, it does not alter the row-store layout, so analytical queries still require different approaches. Benchmark results show 9.2× more throughput on NVMe, with a median of 16,030 TPS versus 1,734 on EBS. The post introduces WalShadow, an open-source replication engine that reads the physical Postgres WAL to enable sub-second replication to ClickHouse without logical slots. It concludes that failover is solvable with tools like Patroni, and that storage latency is only part of the performance problem."
---

# Postgres on NVMe: performance and the convergence of transactions and analytics

[Clickhouse](https://yomu.fyi/company/clickhouse) · Sep 21, 2026

**Type:** Benchmark

## Summary

The post examines how local NVMe storage changes Postgres performance, particularly when working sets exceed memory and disk latency becomes the bottleneck. It argues that while faster storage accelerates transactional workloads, it does not alter the row-store layout, so analytical queries still require different approaches. Benchmark results show 9.2× more throughput on NVMe, with a median of 16,030 TPS versus 1,734 on EBS. The post introduces WalShadow, an open-source replication engine that reads the physical Postgres WAL to enable sub-second replication to ClickHouse without logical slots. It concludes that failover is solvable with tools like Patroni, and that storage latency is only part of the performance problem.

## Context

The post is a blog article and webinar summary by Kaushik Iska, discussing the performance of Postgres on local NVMe storage and the convergence of transactional and analytical workloads. It references a webinar with Moniepoint, a payments company, and includes benchmark results comparing NVMe to EBS, as well as a new tool called WalShadow for sub-second replication.

## Takeaways

- When a Postgres working set exceeds memory, storage latency becomes the bottleneck, and local NVMe can provide 9.2× more throughput than EBS, with a median of 16,030 TPS versus 1,734.
- Faster storage does not change the physical row-store layout, so analytical workloads still require different storage engines or approaches, as transactional and analytical queries have fundamentally different demands.
- WalShadow, an open-source replication engine, reads directly from the physical Postgres WAL to enable sub-second replication to ClickHouse without logical replication slots, keeping inserts, updates, deletes, and schema changes in sync.

## FAQ

### What hardware and configuration were used in the benchmark?

The benchmark used eight identical clusters with the only variable being the storage class: m6id.4xlarge instances with 16 vCPU and 64 GiB RAM, a source build of Postgres 18.3, shared\_buffers set to 16 GB, and checksums enabled.

### How much faster is NVMe compared to EBS in the benchmark?

The benchmark showed 9.2× more throughput on NVMe, with a median of 16,030 TPS compared to 1,734 on EBS. This demonstrates that faster storage can significantly improve transactional performance when the working set exceeds memory.

### How does WalShadow achieve sub-second replication?

WalShadow reads directly from the physical Postgres WAL and converts changes into ClickHouse-native blocks, enabling sub-second replication without logical replication slots. It keeps inserts, updates, deletes, and supported schema changes in sync.

**Tags:** [ClickHouse](https://yomu.fyi/topic/clickhouse), [NVMe](https://yomu.fyi/topic/nvme), [Performance](https://yomu.fyi/topic/performance), [Postgres](https://yomu.fyi/topic/postgres), [Replication](https://yomu.fyi/topic/replication)

- Source: [Clickhouse](https://clickhouse.com/blog/postgres-on-nvme)
- Source URL: https://clickhouse.com/blog/postgres-on-nvme
- Ingested by Yomu: 2026-09-21T18:00:11.657Z

[Read original post](https://clickhouse.com/blog/postgres-on-nvme)
