{
  "license": "CC BY 4.0",
  "recipe": {
    "slug": "long-running-database-transactions",
    "title": "Measure Long-Running Database Transactions",
    "testedWith": "Apache DataFusion 45.2.0",
    "lastReviewed": "2026-07-28"
  },
  "contract": {
    "tableName": "database_transaction_events",
    "schema": [
      {
        "name": "timestamp_utc",
        "type": "Timestamp",
        "description": "Transaction terminal-event time."
      },
      {
        "name": "service",
        "type": "Utf8",
        "description": "Owning application service."
      },
      {
        "name": "transaction_name",
        "type": "Utf8",
        "description": "Stable logical transaction class."
      },
      {
        "name": "release",
        "type": "Utf8",
        "description": "Application release."
      },
      {
        "name": "duration_ms",
        "type": "Float64",
        "description": "Begin-to-terminal transaction duration."
      },
      {
        "name": "outcome",
        "type": "Utf8",
        "description": "committed, rolled_back, or timed_out."
      }
    ]
  },
  "query": "SELECT\n  service,\n  transaction_name,\n  release,\n  COUNT(*) AS transactions,\n  approx_percentile_cont(duration_ms, 0.95) AS p95_duration_ms,\n  MAX(duration_ms) AS max_duration_ms,\n  SUM(CASE WHEN outcome <> 'committed' THEN 1 ELSE 0 END) AS unsuccessful\nFROM database_transaction_events\nWHERE timestamp_utc >= now() - INTERVAL '7 days'\nGROUP BY service, transaction_name, release\nORDER BY p95_duration_ms DESC, unsuccessful DESC;",
  "fixtureKind": "schema-example",
  "inputRows": [
    {
      "timestamp_utc": "2026-07-28T10:00:00Z",
      "service": "service_example_1",
      "transaction_name": "transaction_name_example_1",
      "release": "release_2026_07_1",
      "duration_ms": 12,
      "outcome": "success"
    },
    {
      "timestamp_utc": "2026-07-28T11:00:00Z",
      "service": "service_example_2",
      "transaction_name": "transaction_name_example_2",
      "release": "release_2026_07_2",
      "duration_ms": 37,
      "outcome": "failed"
    },
    {
      "timestamp_utc": "2026-07-28T12:00:00Z",
      "service": "service_example_3",
      "transaction_name": "transaction_name_example_3",
      "release": "release_2026_07_3",
      "duration_ms": 24,
      "outcome": "success"
    }
  ],
  "illustrativeInputRows": [
    {
      "timestamp_utc": "2026-07-28T10:00:00Z",
      "service": "service_example_1",
      "transaction_name": "transaction_name_example_1",
      "release": "release_2026_07_1",
      "duration_ms": 12,
      "outcome": "success"
    },
    {
      "timestamp_utc": "2026-07-28T11:00:00Z",
      "service": "service_example_2",
      "transaction_name": "transaction_name_example_2",
      "release": "release_2026_07_2",
      "duration_ms": 37,
      "outcome": "failed"
    },
    {
      "timestamp_utc": "2026-07-28T12:00:00Z",
      "service": "service_example_3",
      "transaction_name": "transaction_name_example_3",
      "release": "release_2026_07_3",
      "duration_ms": 24,
      "outcome": "success"
    }
  ],
  "expectedOutput": {
    "columns": [
      "service",
      "transaction_name",
      "release",
      "transactions",
      "p95_duration_ms",
      "max_duration_ms",
      "unsuccessful"
    ],
    "rows": [
      {
        "service": "billing",
        "transaction_name": "invoice-finalize",
        "release": "api-88",
        "transactions": 820,
        "p95_duration_ms": 6800,
        "max_duration_ms": 24100,
        "unsuccessful": 28
      },
      {
        "service": "projects",
        "transaction_name": "member-import",
        "release": "api-88",
        "transactions": 240,
        "p95_duration_ms": 4210,
        "max_duration_ms": 18200,
        "unsuccessful": 9
      }
    ]
  },
  "notes": [
    "The compact input rows demonstrate field names and JSON types; they are not claimed to generate the displayed aggregate by themselves.",
    "The expected output is deterministic synthetic review data for the documented output shape.",
    "Adapt time windows, thresholds, identities, and business definitions before operational use."
  ]
}