Heroku Postgres Production Tier Technical Characterization
Last updated November 20, 2023
Table of Contents
The information in this document is subject to change as Heroku adapts the service to better handle customer database workloads.
Heroku Postgres plans offer different performance characteristics based on their CPU, RAM, and I/O architectures. This article provides a technical description of the implementation of Standard-tier and higher plans, along with important performance characteristics for each plan.
The following table outlines Heroku Postgres Standard-tier and higher plans, along with relevant specifications about the underlying hardware:
|Plan||vCPU||RAM||PIOPs||Burstable vCPU||Connection Limit||Disk Size||Burstable Disk|
|standard-0 premium-0 private-0 shield-0||2||4 GB||3000||yes, limited||120||64 GB||no|
|standard-2 premium-2 private-2 shield-2||2||8 GB||3000||no||400||256 GB||no|
|standard-3 premium-3 private-3 shield-3||2||15.25 GB||3000||no||500||512 GB||no|
|standard-4 premium-4 private-4 shield-4||4||30.5 GB||3000||no||500||768 GB||no|
|standard-5 premium-5 private-5 shield-5||8||61 GB||4000||no||500||1 TB||no|
|standard-6 premium-6 private-6 shield-6||16||122 GB||6000||no||500||1.5 TB||no|
|premium-l-6 private-l-6 shield-l-6||16||122 GB||6000||no||500||2 TB||no|
|premium-xl-6 private-xl-6 shield-xl-6||16||122 GB||6000||no||500||3 TB||no|
|standard-7 premium-7 private-7 shield-7||32||244 GB||9000||no||500||2 TB||no|
|standard-8 premium-8 private-8 shield-8||64||488 GB||12000||no||500||3 TB||no|
|standard-9 premium-9 private-9 shield-9||96||768 GB||16000||no||500||4 TB||no|
|premium-l-9 private-l-9 shield-l-9||96||768 GB||16000||no||500||5 TB||no|
|premium-xl-9 private-xl-9 shield-xl-9||96||768 GB||16000||no||500||6 TB||no|
|standard-10 premium-10 private-10 shield-10||128||1 TB||32000||no||500||8 TB||no|
As of June 29, 2023, we’ve migrated all production-tier databases (Standard, Premium, Private, and Shield) away from burstable disk. All production-tier databases have a baseline performance starting at 3000 PIOPs.
pg:info command to check whether your Postgres database has an upgrade available:
$ heroku pg:info === HEROKU_POSTGRESQL_RED Plan Standard 4 Status available
All Heroku Postgres plans aside from the Essential tier are single-tenant plans. A customer’s database and related management software are the sole residents of resources on the instance, offering more predictable performance. However, virtualized infrastructure is still subject to some resource contention, and minor performance variations are expected.
Burstable vCPU Performance
All Heroku Postgres plans come with a baseline level of performance, but standard-0, premium-0, private-0, and shield-0 plans are able to burst past that baseline. Burstable performance plans allow each database to run in isolation as a single-tenant instance. This means that when your database is provisioned, no other customer is running on the same server. When your database bursts for an extended time, it’s brought back to the original baseline level of performance. If a consistent level of performance is needed, a non-burstable Heroku Postgres plan provides fixed levels of performance.
The plan type determines the baseline level of performance:
|standard-0 premium-0 private-0 shield-0||0.2|
Each of these plans can burst past these load averages for a short amount of time. If the database has a sustained load over those amounts, however, it’s brought back to the baseline. Load averages can be found in the Heroku Postgres Server metrics, which are part of your application’s logs.
Architecture, vCPU, RAM, and I/O
All Heroku Postgres plans run on 64-bit architectures. This ensures both high performance for internal Postgres operations and interoperability with other features like Forks and Followers across all Standard-tier and higher plans.
vCPU indicates the number of virtual processors on the underlying instance. A larger vCPU count provides higher performance on the virtual server or instance.
RAM is the approximate amount of memory used for data caching. An in-depth discussion on Postgres caching can be found in Understanding Heroku Postgres Data Caching.
All instances are backed by EBS-optimized instances where EBS disks with provisioned IOPs are attached. PIOPs are a measure of how many I/O operations the underlying disks can perform per second. The number of IOPs provisioned for each plan determines its I/O throughput. On write-heavy applications, I/O can be a significant bottleneck, but on read-heavy ones, your hot dataset fits in RAM and can therefore perform well with lower IOPs values.
All Standard-tier and higher plans are encrypted at rest with AES-256, block-level storage encryption. Amazon manages the keys, and individual volume keys are stable for the lifetime of the volume. You can find more details about EBS encryption here. Heroku doesn’t encrypt anything for you at the Postgres level, so if you wish to encrypt, you can use the PGCrypto extension for your own encryption.
All backup files that are taken using Heroku PGBackups are stored in an encrypted S3 bucket in the US region.