Skip to content

Database observer

Slow-query capture, the raw report, exports, deletion, and settings are provided by the native_observability_database_observer submodule. It is part of the DASHBOARD install tier; enable it with drush no:preset:dashboard, or directly with drush en native_observability_database_observer -y.

Routes

Route Path Permission
native_observability_database_observer.report /admin/reports/native-observability/database-observer access native observability database observer
native_observability_database_observer.view /admin/reports/native-observability/database-observer/{id} access native observability database observer
native_observability_database_observer.export /admin/reports/native-observability/database-observer/{id}/export access native observability database observer
native_observability_database_observer.export_filtered /admin/reports/native-observability/database-observer/export/filtered access native observability database observer
native_observability_database_observer.delete_all /admin/reports/native-observability/database-observer/delete-all administer native observability database observer
native_observability_database_observer.delete_filtered /admin/reports/native-observability/database-observer/delete-filtered administer native observability database observer
native_observability_database_observer.settings /admin/config/development/native-observability/settings/database-observer administer native observability database observer

Report

Open /admin/reports/native-observability/database-observer. DatabaseObserverListController::list() renders a filterable, paginated table (ID, relation, route/path, duration, slow flag, request/trace link, created date). Filters read from the query string: search, relation_type, is_slow.

The page states its scope explicitly: this RAW report stores only queries above the configured slow-query threshold. Aggregated per-request database counters, used to enrich trace payloads and the database summary span, are not listed row by row here.

Each row shows its relation_type (request_bound when the query is correlated to a captured request, unrelated otherwise) and, when the row has a request_id that matches a stored trace, a link to that trace via native_observability.trace_view_by_request_id.

Single query view

Follow a row's ID link, or open /admin/reports/native-observability/database-observer/{id} directly, for full details on one captured slow query.

Exports

Single query

/admin/reports/native-observability/database-observer/{id}/export downloads the raw stored record as JSON.

Filtered set

/admin/reports/native-observability/database-observer/export/filtered downloads the rows matching the current filter set as JSON.

Deletion

Two deletion actions are available, both gated by administer native observability database observer:

  • Delete all (delete_all): removes every stored slow-query record.
  • Delete filtered (delete_filtered): removes only the rows matching the filter set (search, relation_type, is_slow) currently applied on the report page.
flowchart LR
    A[Database observer records] --> B[Filtered: rows matching current filters]
    A --> C[All: every record]

Both forms redirect back to the report page after deletion, with a status message reporting how many rows were removed.

Settings

/admin/config/development/native-observability/settings/database-observer configures capture behavior, the slow-query threshold, whether SQL text is stored, the per-request query cap, and retention. See Database observer settings for the full list of keys and their default values.

The settings form also documents the module's runtime model directly: ordinary query counters stay in memory during the request for trace enrichment, and only queries above slow_query_threshold_ms are persisted to the RAW table (max_stored_queries_per_request caps how many of those a single request can write).