Release Notes
List of upcoming and historic changes to the scraper.
Next, TBD
- Add a Grafana-only Harry PostgreSQL Repository Health dashboard covering
partition-aware storage, collector freshness, PostgreSQL workload and
maintenance, sessions, locks, current Grafana activity, and optional
pg_stat_statementsquery history. Keep the high-churn latest-collector panels in a collapsed bottom section and document PostgreSQL hot-standby recovery conflicts and operator-controlled mitigation tradeoffs. - Add partitioned native repository-ingestion accounting with exact daily per-source and per-dataset write counters, five-minute buffered updates, and forced graceful-shutdown flushing. Use it for storage attribution, ingestion continuity, seven-day change detection, and 30-day storage projection panels. Provision alerts for stale accounting, sharp SQL-ingestion drops, and sharp repository-ingestion growth.
- Consolidate identical ASM diskgroup capacity observations across databases in the global Alerting Overview dashboard and provisioned Grafana alert, so databases sharing ASM do not produce duplicate rows or duplicate alerts.
0.2.1, 2026-08-13
- Replace the unbounded
oracle_latest_scrape_statusview with a small transactionally maintained current-state table keyed by database and collector. Backfill it during upgrades and use it for Grafana dashboards, alert evaluation, and SQL Exporter reads without scanning retained history. - Stop the DAH Average Active Sessions panel from drawing lines across periods with no activity samples, so idle or unavailable intervals remain visible as gaps instead of misleading interpolation.
- Serialize and pace godror physical OCI connection creation across all Oracle
pools. This prevents synchronized pool expiration or reconnect attempts from
entering
dpiConn_createconcurrently and aborting the process with native heap-corruption errors; established connections and queries remain concurrent. - Add default-enabled active/standby operation using PostgreSQL advisory-lock
leader election with human-readable scopes, writable-primary validation,
multi-host connection support, and distinct
/healthzand/readyzendpoints. Standbys avoid Oracle and write-pool initialization; leaders exit non-zero on leadership loss for clean service-manager restart. Document that PostgreSQL quorum and fencing remain mandatory to prevent split brain. - Run two Harry instances in the Docker Compose test stack, expose their
liveness/readiness endpoints on ports
9161and9162, and document a repeatable kill, takeover, and standby-rejoin test. - Assign ownership of Harry and its original components to Jorge Holgado, with commercial support provided under the OneClickDBA brand.
- Add signed-tag GitHub Releases with checksummed
go-oraandgodrorbinaries, plus multi-architecture Oracle Linux 8/9 images published to GitHub Container Registry. Derive release versions from tags and identify untagged builds as0.0.0-dev. - Rename the project to Harry - Performance Scraper for Oracle Database,
including the
harry-scraperexecutable and service, GitHub repositories, container images, Go module, Kubernetes objects, configuration paths, Oracle client identifier, Grafana alert labels, and release archives. - Rename the default PostgreSQL database and role to
harry_monitoring. - Replace the unavailable Oracle attribution-helper process with a reproducible
go-licensespipeline that generates notices for every released driver and operating-system variant and verifies the committed inventory in CI. - Promote standard Oracle operational measurements from the optional generic definition pack into default-enabled native collectors and typed, daily-partitioned PostgreSQL tables for database state, instance load, resource limits, tablespaces, ASM, system counters, wait classes, and system metrics.
- Add reset-aware interval deltas and stable PostgreSQL rate/latest-state views for efficient Grafana dashboards and alert evaluation.
- Persist per-database connectivity and collector success, duration, sample
count, and errors in
oracle_scrape_status, including failed scrapes that produce no Oracle measurements. - Add an Oracle Operational Overview dashboard and provisioned Grafana alerts for stale collection, connectivity, tablespace, resource-limit, and ASM pressure without requiring Prometheus.
- Add a global Oracle Alerting Overview dashboard with authoritative Grafana alert lists, cross-database collector health, stale-collector detection, capacity risks, database state, and direct investigation links. Link provisioned alert rules to their relevant context panels.
- Use the cross-version
postgresdatasource type in provisioned alert queries. It is native in Grafana 9 and retained as a PostgreSQL alias in Grafana 12 and 13, preventing evaluation-error alerts with missing query labels. - Use portable Reduce and Math alert expressions instead of the newer Threshold command, preserving labeled alert instances across Grafana 9, 12, and 13.
- Document the critical requirement for an independent external availability check of the scraper, PostgreSQL, Grafana, and notification path, because a failed monitoring stack cannot alert on its own failure.
- Remove the superseded
oracle-operational-metrics.tomland YAML files from images and release archives;oracle_metric_samplesremains available only for user-defined additional metrics. - Rank bounded SQL text and plan candidates by elapsed-time deltas accumulated
from frequent
GV$SQLSTATSsamples instead of cumulative cursor lifetime, combining RAC instances and plan hashes by SQL ID. - Split SQL troubleshooting into a four-category Oracle SQL Performance overview and a linked Oracle SQL Top Consumers dashboard with top-20 ranking, detailed time, workload and I/O graphs with fixed series colors, smooth DAH-style area rendering, and one-minute rate averaging that removes counter-update sawteeth without changing the stored samples. Include full SQL text and cached plans in the same drilldown.
- Add deterministic access, join, and sort colors to the Top Consumers execution-plan table, plus review signals for full scans, Cartesian joins, temporary-space estimates, and unusually large optimizer estimates.
- Serialize additional metric queries per database to prevent simultaneous OCI connection creation when pooled connections reach their maximum lifetime.
- Calculate the
GV$SQLSTATS.LAST_ACTIVE_TIMElookback from each monitored database'sSYSDATE, avoiding cross-time-zone SQL collection gaps, and remove the unsafe process-wideORA_SDTZrecommendation for multi-database setups. - Remove redundant source-database columns from Grafana table panels while retaining the dashboard-level database filters and internal query joins.
- Make Oracle ASH collection explicitly opt-in and default activity analytics
to independent two-second
GV$SESSIONsampling. Persist the activity source and represented duration, use duration-weighted AAS calculations, and warn operators that enabling ASH requires them to verify Diagnostics Pack licensing. - Move frequent SQL counter collection to recently active
GV$SQLSTATSrows so short, high-frequency statements remain diagnosable without appearing in a session sample. FetchSQL_FULLTEXTand child-plan identities only through the bounded, slower SQL detail pass. - Add bounded, interval-controlled
GV$SQL_PLANcollection for top SQL cursors, deduplicate plan operations inoracle_sql_plans, retain plans while they are referenced by SQL samples, and expose selected execution plans in the Oracle SQL Performance dashboard. - Replace
metrics.defaultandmetrics.customwith one optional orderedmetrics.definitionslist. Native SQL, session, blocking, and DAH collection now runs without any generic metric definition file. - Rename the supplied metric pack from
default-metrics.*tooracle-operational-metrics.*, stop embedding it as a fallback, and remove its duplicated high-cardinalitytop_sqldefinition. - Document the boundary between native typed performance collectors and
additional SQL-derived metrics stored in
oracle_metric_samples, including PostgreSQL cardinality and retention considerations. - Normalize Oracle SQL text into
oracle_sql_texts, collect completeSQL_FULLTEXTonce per source database and SQL ID, and expire unreferenced text with the global PostgreSQL retention policy. The SQL Performance dashboard keeps short previews and adds a full-width selected-SQL text panel. - Rename the project runtime to scraper terminology, including Go types, the default binary name, Docker targets, sample manifests, and active documentation.
- Replace the Prometheus scrape endpoint runtime with scheduled Oracle metric collection that writes neutral metric samples to PostgreSQL using batched
COPYinserts. - Add PostgreSQL output configuration, schema auto-migration for scrape summaries and metric samples, and example configuration entries.
- Remove Prometheus collector, logging, web toolkit, and client dependencies from the scraper code.
- Add PostgreSQL to the Docker Compose test stack and configure the scraper examples to write to it.
- Build the Docker Compose scraper service from the local fork image instead of Oracle's published Prometheus endpoint image.
- Add direct Oracle performance scraping for
GV$SQL,GV$SESSION, and blocking sessions, with dedicated PostgreSQL tables and a starter Grafana dashboard backed by PostgreSQL. - Add PostgreSQL Grafana dashboard filters and live
SQL_IDpanels for currently active Oracle sessions. - Preserve available Oracle performance samples when one of the SQL, session, or blocking-session queries fails.
- Document the Oracle PDB scope of monitoring users and the additional
GV_$SQLpermission required for SQL performance samples. - Pass explicit Go build arguments through the local Compose image build for compatibility with Podman builds.
- Add PostgreSQL activity-history storage and a dedicated DAH Grafana dashboard.
- Split Docker builds into a reusable
build-depsstage and wire the local compose build to reuse that dependency image cache. - Include collected Database Activity History samples in the aggregated PostgreSQL write payload.
- Replace the scrape-summary parent table with daily range-partitioned PostgreSQL sample tables and create partitions on demand before writing samples.
- Add a single PostgreSQL sample retention setting that drops expired daily partitions across all sample tables.
- Add per-database
connMaxIdleTimefor Oracle connections so idle pooled sessions can be recycled before database profileIDLE_TIMEkills them. - Remove the duplicated raw JSON payload from
oracle_metric_samplesto reduce PostgreSQL storage usage. - Remove DAH-overlapping activity history panels from the Oracle DB Performance Grafana dashboard.
- Add DAH Grafana drilldowns for top wait events and module/program activity.
- Change the DAH SQL_ID activity panel to a stacked top-SQL timeline using interval buckets and total/max legend values.
- Add a PostgreSQL-backed Oracle SQL Performance Grafana dashboard for high-cardinality SQL diagnostics.
- Refactor the Oracle DB Performance Grafana dashboard into a current sessions and blocking dashboard.