Telemetry table reference
This feature is in Beta. Workspace admins can control access to this feature from the Previews page. See Manage Databricks previews.
This page documents the tables Lakebase writes to your Unity Catalog schema once you configure observability for a project. These are the tables described in How it works. Insights and Genie read this same data, and because it lands in your own Unity Catalog, you can query it directly with any Databricks tool.
This is a Beta feature. Table and column names might change before general availability.
Columns common to every table
Every table below includes these columns, which identify where a row came from:
Column | Type | Description |
|---|---|---|
| STRING | The Lakebase project the row came from. |
| STRING | The branch the row came from. |
| STRING | The compute endpoint the row came from. |
| STRING | The specific compute instance. This changes when a compute scales to zero and resumes. |
| TIMESTAMP | When the row was recorded. |
| STRING | The compute's mode at the time, for example read-write or read-only. |
Tables with names ending in _counters also include a previous_ts column, marking the start of the interval a row's values accumulated over. These are cumulative values for that interval, not point-in-time readings. Tables ending in _gauges are point-in-time readings instead, and have no previous_ts.
The tables below list only the columns beyond these common ones.
Session activity
A snapshot of every active backend, sampled continuously. This is the same pattern as AWS Performance Insights or Oracle's Active Session History (ASH): if a session is doing anything, including waiting, it shows up here.
active_session_history
Column | Type | Description |
|---|---|---|
| LONG | Ordinal position of this sample within its batch. |
| LONG | The backend's process ID. |
| LONG | The database's object ID. |
| LONG | The connecting role's object ID. |
| LONG | Identifies the query being run. Matches |
| LONG | Internal encoding of the wait event. |
| STRING | The wait event's category, for example |
| STRING | The specific wait event, for example |
| LONG | The backend's state, for example active or idle. |
| LONG | The type of backend process. |
| LONG | How long the current transaction has been open. |
| LONG | How long the current query has been running. |
| LONG | The PID of a session blocking this one, if any. |
| LONG | The PID of the parallel query leader, if this backend is a parallel worker. |
| LONG | Internal status flags. |
| LONG | Links to a specific plan shape in |
| LONG | A hash of the connecting application's name. |
Wait events
Aggregated wait-event counts and time, complementing the per-sample view in active_session_history.
wait_event_counters
Column | Type | Description |
|---|---|---|
| LONG | Internal encoding of the wait event. |
| STRING | The wait event's category. |
| STRING | The specific wait event. |
| LONG | How many times this wait event occurred in the interval. |
| DOUBLE | Total time spent in this wait event during the interval. |
Query plans
A per-execution record of query plans, including the full plan and Neon-specific storage stats. This is the most detailed table, and typically where a slow-query investigation ends up.
plan_history
Column | Type | Description |
|---|---|---|
| LONG | Ordinal position of this row within its batch. |
| BOOLEAN | Whether the plan includes actual execution statistics ( |
| BOOLEAN | Whether the plan includes buffer usage statistics. |
| STRING | Hash identifying the query text. |
| LONG | Identifies the query. Matches |
| DOUBLE | How long the query took to run. |
| DOUBLE | The planner's estimated cost for the query. |
| LONG | The planner's estimated row count. |
| LONG | The actual row count returned. |
| LONG | Identifies this specific plan shape. Matches |
| DOUBLE | Time spent waiting on locks. |
| DOUBLE | Time spent planning the query, separate from execution. |
| LONG | Shared buffer cache activity for this execution. |
| LONG | Local buffer activity, for temporary tables. |
| LONG | Temporary file activity, for example from a large sort or hash. |
| LONG | Number of page requests sent to the pageserver. |
| LONG | Number of pages served from the local file cache instead of the pageserver. |
| LONG | Time spent waiting on pageserver page requests, in microseconds. |
| LONG | The backend process ID that ran this query. |
| LONG | Number of times this execution waited on a lock. |
| LONG | The connecting role's and database's object IDs. |
| STRING | The query text. |
| STRING | The full query plan, as JSON. |
| STRING | The connecting role's and database's names. |
| STRING | The connecting application's name and client address. |
| STRING | Wait events observed during this execution. |
| STRING | Bind parameters used in the query, if any. |
| STRING | PIDs of sessions that blocked this execution, if any. |
| STRING | Internal Neon identifiers for the branch, endpoint, and timeline. |
| DOUBLE | CPU time consumed by this execution, split into user and system time. |
| LONG | Context switches during this execution. |
| STRING / STRING / LONG / STRING | OpenTelemetry-style tracing identifiers, if the query was part of a traced request. |
| LONG | Internal timeline identifier. |
| BOOLEAN | Whether this row's data (for example, a large plan) was truncated before being written. |
Query statistics
Aggregated per-query statistics, sourced from the standard pg_stat_statements extension.
pg_stat_statements_counters
Column | Type | Description |
|---|---|---|
| LONG | The connecting role's and database's object IDs. |
| LONG | Identifies the query. Matches |
| BOOLEAN | Whether this row is for a top-level statement, as opposed to one nested inside a PL/pgSQL function or procedure. See the PL/pgSQL limitation. |
| STRING | The query text. |
| LONG | Number of times this query was executed in the interval. |
| LONG | Number of times this query was planned in the interval. |
| LONG | Total rows returned or affected. |
| DOUBLE | Total time spent executing and planning this query in the interval. |
| LONG | Shared buffer cache activity. |
| LONG | Local buffer activity, for temporary tables. |
| LONG | Temporary file activity. |
| LONG | Write-ahead log volume generated by this query. |
| Mixed | JIT (just-in-time) compilation statistics, if JIT was used for this query. |
Schema changes
Schema changes: what changed, when, and by whom. This is what Genie reads to trace an incident back to a schema change, whether from a deploy or a manual edit.
ddl_history
Column | Type | Description |
|---|---|---|
| LONG | Ordinal position of this row within its batch. |
| STRING | The type of DDL command, for example |
| STRING | The kind and name of the object that changed. |
| STRING | The Postgres schema the object belongs to. |
| STRING | The full DDL statement. |
| DOUBLE | How long the DDL statement took to run. |
| LONG / STRING | The connecting role's object ID and name. |
| STRING | The connecting application's name. |
| LONG | The backend process ID that ran the statement. |
| LONG | The database's object ID. |
| STRING | The session's search path at the time. |
| STRING | A structured, parsed representation of the DDL statement. |
DDL capture has a real gap: a change made right around a compute resuming from scale-to-zero can be missed. If a schema change doesn't appear here even though you know it happened, that's the most likely reason. See Limitations.
Postgres logs
Raw Postgres log messages, including the specific error behind a failure.
postgres_logs
Column | Type | Description |
|---|---|---|
| LONG | Ordinal position of this row within its batch. |
| LONG | Internal log level encoding. |
| STRING | The log severity, for example |
| STRING | The Postgres SQLSTATE error code, for example |
| LONG | The backend process ID, and its parallel query leader's PID if applicable. |
| LONG / STRING | The connecting role's object ID and name. |
| LONG / STRING | The database's object ID and name. |
| STRING | The connecting application's name and client address. |
| STRING | The schema, table, column, constraint, or data type referenced by the error, when Postgres has one. |
| STRING | The function the error occurred in, if applicable. |
| STRING / LONG | The Postgres source file and line the error originated from. |
| STRING | The log message text. |
| STRING | Additional detail, a suggested fix, and the error's context, when Postgres has them. |
| STRING | An internally generated query related to the error, if applicable. |
| STRING | The statement that triggered this log entry. |
| LONG | Indicates which fields, if any, were truncated before being written. |
The structured schema_name, table_name, and column_name fields aren't populated for every error type. A plain "column does not exist" parse error (SQLSTATE 42703), for example, leaves them empty even though message names the column directly. Don't rely on these fields being populated. Check message first.
Compute metrics
Compute-level resource usage: CPU, memory, disk and network I/O, and the local file cache (LFC), Lakebase's compute-side cache in front of the pageserver.
compute_counters
Column | Type | Description |
|---|---|---|
| DOUBLE | Time the storage layer spent throttling writes in this interval. A non-zero value means write volume exceeded what storage can absorb. |
| DOUBLE | CPU time consumed, for the busiest core and in total. |
| DOUBLE | Disk I/O volume. |
| DOUBLE | Network I/O volume. |
| LONG | Local file cache activity for this interval. |
| LONG | Local file cache evictions caused by replica redo, if this compute is a read replica. |
compute_gauges
Column | Type | Description |
|---|---|---|
| LONG | The current write-ahead log position. |
| LONG | WAL replay and receive positions, if this compute is a read replica. |
| LONG | The configured connection limit. |
| LONG | Estimated working set size over the last 5, 15, and 60 minutes. |
| LONG | Local file cache capacity and current usage. |
| LONG | Overall storage capacity and current usage. |
| LONG / DOUBLE | Replication lag, if this compute is a read replica. |
| DOUBLE | The compute's provisioned CPU and memory. |
Database metrics
Per-database activity: rows changed, transactions, sessions, and vacuum health. This is where table bloat and autovacuum signals live.
database_counters
Column | Type | Description |
|---|---|---|
| LONG / STRING | The database's object ID and name. |
| DOUBLE | Time spent active, idle in an open transaction, and connected overall. |
| LONG | Number of deadlocks detected. |
| LONG | Row-level activity for the interval. |
| LONG | Session lifecycle counts. |
| LONG | Shared buffer cache activity. |
| LONG | Committed and rolled-back transactions. |
database_gauges
Column | Type | Description |
|---|---|---|
| LONG / STRING | The database's object ID and name. |
| LONG | Current number of connections to this database. |
| LONG | The database's on-disk size. |
| LONG | Transaction ID and multixact ID age of the oldest unfrozen row. Rising values are the earliest signal of vacuum falling behind, well before bloat becomes visible in table size. |
Next steps
- AI-assisted troubleshooting overview — how this telemetry powers Insights and Genie.
- Find and resolve issues with Insights — see this data surfaced as a diagnosis, not raw rows.
- Diagnose and fix issues with Genie — investigate a problem conversationally.