← Blog · Engineering Management · September 22, 2026 · 7 min read · By Operate Editorial Team

Read-Only Is a Permission, Not a Capacity Limit: What Support Actually Gets When You Give Them Production Access

Granting support read-only production access is reviewed as a permissions change. It is a capacity change. Locks, temp files, snapshot age and replica lag are not constrained by read-only, and every guardrail ships disabled.

Read-Only Is a Permission, Not a Capacity Limit: What Support Actually Gets When You Give Them Production Access

Read-Only Is a Permission, Not a Capacity Limit: What Support Actually Gets When You Give Them Production Access

TL;DR: Granting read-only production access is often reviewed as a simple permissions change, but it is functionally an unmanaged capacity change. A read-only query cannot change data, but it can consume locks, disk space, and snapshot history, potentially triggering a production incident that standard access reviews are not designed to predict.

The request that gets answered by the wrong department

It is a familiar scene for any engineering leader: the Support or Product team is filing dozens of tickets a week for customer questions that can only be answered by a database query. Engineering becomes the bottleneck, response times slip, and someone proposes a logical solution: "Just give the Support Lead read-only production access so they can unblock themselves."

The request is usually routed to whoever owns IAM or database permissions. The review focuses on security—ensuring the credentials cannot DROP TABLE or UPDATE records. Once the "read-only" constraint is verified, the access is granted, and the risk is considered handled.

However, this framing is fundamentally flawed. Read-only is a constraint on what a query can write; it is not a constraint on what a query can consume. When you grant this access, the organization is making a significant capacity decision through a permissions process, often without the guardrails necessary to protect production stability.

What a read actually costs

While a SELECT statement appears passive, it consumes shared resources that every other production process relies on. According to the PostgreSQL documentation, there are four primary ways a read-only query can cause production harm, and in most default configurations, the guardrails for these risks ship disabled.

The replica is a trade, not an escape

Moving analytical queries to a read replica does not remove the trade-off; it simply relocates it. According to vendor documentation from AWS, Google, and Microsoft, there is no "free" way to handle long-running reads on a standby.

If you leave hot_standby_feedback at its default of off, the read replica will forcibly cancel queries that conflict with incoming WAL records from the primary. As Azure documentation explains, a VACUUM operation on the primary can cause a query cancellation on the replica if it removes rows the replica still needs.

If you turn hot_standby_feedback on to protect the queries, you stop the cancellations but trigger bloat on the primary server. AWS documentation warns that this "prevents autovacuum on the writer instance from removing dead rows." On Aurora PostgreSQL, this trade is often made for you, as the setting is enabled by default and unmodifiable.

Google Cloud SQL provides the most honest structural answer: you may need separate replicas for OLTP (transactions) and OLAP (analytics) to prevent long-running queries from blocking essential replication.

One claim that does not survive checking

It is a common intuition among engineers that a large sequential scan will "blow out" the buffer cache, evicting frequently used data. However, the PostgreSQL source code shows this is largely mitigated. According to the Postgres storage README, the engine uses a 256KB "ring buffer" (BAS_BULKREAD) for large scans specifically to avoid flushing the entire cache. The caveat is narrow: this only engages for relations exceeding a quarter of shared_buffers and does not apply to index scans. We mention this because a serious look at production access requires distinguishing between theoretical fears and documented mechanical risks.

Three options, all of them mispriced

When a non-engineering team needs production data, organizations usually choose one of three paths, and all are commonly mispriced:

  1. Escalate everything to engineering: The price isn't the query; it’s the interrupt and the queue. This is a recurring tax paid by your most expensive headcount. As we've noted in our Twelve Escalation Metrics discussion, these interrupts are often unmeasured and unmanaged.
  2. Grant read-only access: This is priced as a simple permission change. In reality, it is a capacity grant with no owner, no telemetry, and no bounds. It works perfectly until the first long report brings production to its knees.
  3. Build a purpose-shaped path: Whether it’s a dedicated OLAP replica or a bounded query interface, this is priced as a "project nobody wants to staff." Yet, it is the only option where the cost is known in advance and the risks are bounded.

Key Takeaway: Read-only credentials manage what a user can change, but only a capacity envelope can manage what a user can break.

What an honest "Yes" looks like

If you decide to grant production access, the deliverable should not be a username and password. It should be a capacity envelope. An honest "yes" includes:

Notice that every item in this list is a configuration setting, not a permission. Not one of these would surface in a standard security access review.

The question underneath the request

Ultimately, Support did not want database access. They wanted an answer without waiting for a person. Access is merely one way to get that answer, and it is the way that transfers unbounded operational risk to a team with no way to see it coming.

The alternative—building a controlled, observable path—is not free. But the choice is between a cost you can measure and an incident you cannot predict.

Why this matters

As organizations scale, the ratio of support and product staff to engineering staff grows. This creates a compounding pressure to grant direct production access to "unblock" the business. Without a clear understanding that read-only access is a capacity risk, teams will continue to create availability hazards in the name of organizational efficiency.

Sources & further reading


At Operate, we build a platform that watches production and investigates incidents autonomously. Because Operate reads production data to find root causes, we are deeply aware of the trade-offs discussed here. The underlying request—getting an answer without waiting for a human—is the same whether it comes from a support lead or an AI agent. The difference lies in whether that path is bounded and observable. Operate is self-hosted and read-only with a full audit trail, but more importantly, it is designed to propose a fix as a PR for human review rather than acting directly on production, ensuring the "human in the loop" remains the ultimate guardrail for capacity and correctness alike.

#SRE#PostgreSQL#Engineering Management#Database Reliability