Performance monitoring data with timing information, spans, and custom measurements
The transactions dataset stores performance monitoring data from Sentry, including transaction timing, spans, measurements, and distributed tracing information. It powers Sentry’s performance monitoring features.
The transactions dataset captures timing data for operations in your application. Each transaction represents a single request, page load, or background task with detailed performance metrics.
event_id: UUID # Unique identifier for the transactionproject_id: UInt64 # Required for all queriestrace_id: UUID # Distributed trace identifierspan_id: UInt64 # Root span ID
transaction_name: String # Transaction name (e.g., "/api/users")transaction_hash: UInt64 # Hash of transaction name (readonly)transaction_op: String # Operation type (pageload, navigation, http.server)transaction_status: UInt8 # Status code (ok, cancelled, unknown, etc.)transaction_source: String # How transaction name was determined
transaction_op categorizes the type of operation. Common values:
timestamp: DateTime # End time (readonly, maps to finish_ts)start_ts: DateTime # Transaction start timestart_ms: UInt16 # Millisecond component of startfinish_ts: DateTime # Transaction finish time (required time column)finish_ms: UInt16 # Millisecond component of finishduration: UInt32 # Duration in millisecondstime: DateTime # Query time column (maps to finish_ts)
The required time column for queries is finish_ts. When you use time in queries, it’s automatically mapped to finish_ts.
user: String # User identifier (promoted from tags)user_id: String # User IDuser_name: String # Usernameuser_email: String # User emailuser_hash: UInt64 # Hash of user identifier (readonly)
release: String # Release version (promoted from tags)environment: String # Environment name (promoted from tags)dist: String # Distribution identifier (promoted from tags)
spans: Nested( op: String, # Span operation type group: UInt64, # Span group hash exclusive_time: Float64, # Time exclusive to this span exclusive_time_32: Float32 # 32-bit version for optimization)
The spans array contains summary information about all spans in the transaction.
MATCH (transactions)SELECT transaction_name, avg(duration) as avg_durationWHERE project_id = 1 AND finish_ts >= toDateTime('2024-01-01 00:00:00') AND finish_ts < toDateTime('2024-01-02 00:00:00') AND duration > 1000GROUP BY transaction_nameORDER BY avg_duration DESCLIMIT 10
MATCH (transactions)SELECT transaction_name, apdex(duration, 300) as apdex_scoreWHERE project_id = 1 AND finish_ts >= toDateTime('2024-01-01 00:00:00') AND finish_ts < toDateTime('2024-01-02 00:00:00')GROUP BY transaction_nameORDER BY apdex_score DESC
MATCH (transactions)SELECT transaction_name, arrayJoin(spans.op) as span_op, avg(arrayJoin(spans.exclusive_time)) as avg_timeWHERE project_id = 1 AND finish_ts >= toDateTime('2024-01-01 00:00:00') AND finish_ts < toDateTime('2024-01-02 00:00:00')GROUP BY transaction_name, span_opORDER BY avg_time DESCLIMIT 20
MATCH (transactions)SELECT quantile(0.5)(measurements[lcp]) as p50_lcp, quantile(0.75)(measurements[lcp]) as p75_lcp, quantile(0.95)(measurements[lcp]) as p95_lcpWHERE project_id = 1 AND finish_ts >= toDateTime('2024-01-01 00:00:00') AND finish_ts < toDateTime('2024-01-02 00:00:00') AND transaction_op = 'pageload' AND measurements[lcp] > 0
MATCH (transactions)SELECT transaction_name, failure_rate() as failure_rateWHERE project_id = 1 AND finish_ts >= toDateTime('2024-01-01 00:00:00') AND finish_ts < toDateTime('2024-01-02 00:00:00')GROUP BY transaction_nameHAVING count() > 100ORDER BY failure_rate DESC
MATCH (transactions)SELECT toStartOfHour(finish_ts) as hour, count() as transaction_countWHERE project_id = 1 AND finish_ts >= toDateTime('2024-01-01 00:00:00') AND finish_ts < toDateTime('2024-01-02 00:00:00')GROUP BY hourORDER BY hour