diff --git a/snuba/admin/static/tracing/query_display.tsx b/snuba/admin/static/tracing/query_display.tsx
index ec7ce55ebfd..992941bf2a7 100644
--- a/snuba/admin/static/tracing/query_display.tsx
+++ b/snuba/admin/static/tracing/query_display.tsx
@@ -107,10 +107,24 @@ function QueryDisplay(props: {
options={storages}
/>
-
+
+ ) =>
+ setQuery((prevQuery) => ({
+ ...prevQuery,
+ gather_profile_events: evt.currentTarget.checked,
+ }))
+ }
+ onLabel="PROFILE"
+ offLabel="NO PROFILE"
+ size="md"
+ />
+
+
Query results
diff --git a/snuba/admin/static/tracing/types.tsx b/snuba/admin/static/tracing/types.tsx
index e9c0a8a8747..ae6c0f7bc7b 100644
--- a/snuba/admin/static/tracing/types.tsx
+++ b/snuba/admin/static/tracing/types.tsx
@@ -1,6 +1,7 @@
-type TracingRequest = {
- storage: string;
+export type TracingRequest = {
sql: string;
+ storage: string;
+ gather_profile_events?: boolean;
};
type TracingResult = {
diff --git a/snuba/admin/views.py b/snuba/admin/views.py
index d8ee8a04ad0..b70a2d1beb5 100644
--- a/snuba/admin/views.py
+++ b/snuba/admin/views.py
@@ -496,7 +496,14 @@ def clickhouse_trace_query() -> Response:
query_trace = run_query_and_get_trace(storage, raw_sql)
- gather_profile_events(query_trace, storage)
+ if req.get("gather_profile_events", True):
+ try:
+ gather_profile_events(query_trace, storage)
+ except Exception:
+ logger.warning(
+ "Error gathering profile events, returning trace anyway",
+ exc_info=True,
+ )
return make_response(jsonify(asdict(query_trace)), 200)
except InvalidCustomQuery as err:
return make_response(