At a glance
Statements per Second (live) is the cluster-wide SQL throughput: how many statements (SELECT, INSERT, UPDATE, DELETE, plus DDL and transaction control) CockroachDB is executing each second right now. It is the database’s heartbeat. Read on its own it tells you how hard the cluster is working; read against a baseline it tells you whether traffic is normal, surging, or has fallen off a cliff. A sudden drop to near zero usually means something upstream stopped sending work (an application outage, a network break); a sudden spike usually means a traffic event or a runaway loop. This card has no alert of its own because “high” and “low” are both context-dependent; it is the reference signal you read every other card against.
| What it tracks | Statements per Second (live) for the selected period: the rate of SQL statements executed across the whole cluster, summed across nodes. |
| Data source | The sql.query.count time-series metric (the count of executed SQL statements) differentiated to a per-second rate. The DB Console SQL dashboard shows the same as Statements per second / SQL queries per second. |
| Time window | RT (real-time, refreshed on each poll). Throughput is the fastest-moving signal on the cluster and is always read live. |
| Alert trigger | None. Throughput is a reference signal: a healthy value for one cluster is a crisis for another, so there is no universal threshold. Anomalies are caught by pairing it with the cross-channel and error cards. |
| Roles | DBA, platform, SRE |
Calculation
The card reads the cumulative executed-statement counter (sql.query.count) and differentiates it into a per-second rate, summed across all nodes to give a single cluster figure. It counts statements of every kind: reads, writes, DDL, and transaction-control statements (BEGIN, COMMIT, ROLLBACK). Because it is a rate over a short live interval, it responds to load changes within the poll interval, which is what makes it useful as a heartbeat.
A few nuances shape how to read it. First, retries inflate the count: CockroachDB transparently retries some transactions under contention, and each retry is another statement execution, so a contention storm can raise the rate without any extra real work being done (cross-reference Transaction Retries (24h) to separate genuine load from retry churn). Second, the number is statements, not transactions: one transaction can contain many statements, so this is not an order count or a business-event count. Third, it is the gross cluster rate, not per-node, so an uneven distribution is invisible here and must be read from the per-node SQL view. The value of the card is direction and magnitude against your own baseline, not an absolute target.
Worked example
A platform team runs a 6-node CockroachDB cluster backing the storefront, order, and inventory services. Their normal weekday daytime baseline is roughly 4,000 statements/sec, rising to about 9,000 during evening peak. Three readings, taken across 11 Jun 26:| Time | Statements/sec | vs baseline | Reading |
|---|---|---|---|
| 14:00 BST | 4,100 | normal | healthy daytime steady state |
| 20:30 BST | 18,400 | ~2x evening peak | spike, investigate the driver |
| 21:05 BST | 120 | ~3% of baseline | collapse, traffic has stopped arriving |
- A drop is often scarier than a spike. A spike with proportional order growth is revenue; a collapse to near zero means work has stopped arriving, which is almost always an upstream outage the database surfaces first.
- Always read a spike against orders. Throughput up with orders up is healthy load; throughput up with orders flat is a retry storm or a runaway job, very different remediation.
- There is no “good” absolute number. 18,000/sec is wonderful for one cluster and a sign of trouble for another. Read it against your own baseline and the paired cards, never against a fixed threshold.
Sibling cards
| Card | Why pair it with Statements per Second | What the combination tells you |
|---|---|---|
| CRDB Statements Spike vs Ecom Order Rate | The cross-channel sanity check. | Statements up with orders up is real load; statements up with orders flat is retries or a runaway job. |
| Statement Error Rate % | Quality alongside quantity. | High throughput with a rising error rate equals load outpacing capacity; the cluster is straining. |
| Statement Latency p95 (ms) | The latency cost of throughput. | Throughput up with p95 up equals approaching a capacity limit; latency flat means healthy headroom. |
| Connection Pool Saturation % | The capacity gate for a surge. | A throughput surge with saturation climbing equals a looming connection-refusal risk. |
| Transaction Retries (24h) | Distinguishes real work from retry churn. | A throughput rise tracking retries equals contention inflating the count, not new business. |
| Slow-Query Rate % | Whether throughput is healthy or slow. | Rising throughput with a rising slow-query rate equals queries degrading under load. |
| CockroachDB Health Score | The executive composite. | Throughput is context for every other signal that feeds the score. |
Reconciling against the source
To confirm the figure natively, open the DB Console SQL dashboard and read the Statements (queries per second) chart, or querycrdb_internal.node_metrics for sql.query.count and differentiate it yourself. The DB Console SQL Activity → Statements page also breaks throughput down by statement fingerprint, useful for finding which query is driving a spike. On CockroachDB Cloud the QPS chart appears on the cluster Metrics page.
| Reason our number may differ | Direction | Why |
|---|---|---|
| Counter scope. Some native views split reads, writes, and DDL into separate series. | Variable | The card sums all statement types; a chart showing only SELECTs reads lower. |
| Retry inclusion. Transparently retried statements each increment the counter. | Both higher | The card reflects executions including retries, matching the raw metric; a “logical query” view excludes them. |
| Rate window. The card differentiates over the live poll interval. | Marginal | A chart smoothed over a longer resolution flattens short spikes the live card catches. |
| Time zone. Chart axes render in the cluster locale. | Cosmetic | Axis labels shift; the rate does not. |