Skip to content

Commit 0f9aa8a

Browse files
cli: improve debug.zip transaction_contention_events query
Improvements to this query were made in #139735, however statement timeouts and memory budget exceeded errors were still occurring. This commit improves the query dump by reducing the result set of the CTEs used in the query. Instead of retrieving all fingerprints from the statement_statistics table and using those in the joins, it first filters by the fingerprints present in the contention event registry. Fixes: #146877 Release note (cli change): Improves the performance of the debug zip query that collects transaction_contention_events data, reducing the chances of "memory budget exceeded" or "query execution canceled due to statement timeout" errors.
1 parent 71bcba2 commit 0f9aa8a

File tree

1 file changed

+30
-13
lines changed

1 file changed

+30
-13
lines changed

pkg/cli/zip_table_registry.go

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -559,26 +559,43 @@ var zipInternalTablesPerCluster = DebugZipTableRegistry{
559559
},
560560
"crdb_internal.transaction_contention_events": {
561561
customQueryUnredacted: `
562-
with fingerprint_queries as (
563-
SELECT distinct fingerprint_id, metadata->> 'query' as query
564-
FROM system.statement_statistics
562+
WITH contention_fingerprints AS (
563+
-- First, extract all relevant fingerprints from contention events
564+
SELECT DISTINCT waiting_stmt_fingerprint_id, blocking_txn_fingerprint_id
565+
FROM crdb_internal.transaction_contention_events
566+
WHERE blocking_txn_fingerprint_id != '\x0000000000000000'
565567
),
566-
transaction_fingerprints as (
567-
SELECT distinct fingerprint_id, transaction_fingerprint_id
568-
FROM system.statement_statistics
569-
),
570-
transaction_queries as (
571-
SELECT tf.transaction_fingerprint_id, array_agg(fq.query) as queries
572-
FROM fingerprint_queries fq
573-
JOIN transaction_fingerprints tf on tf.fingerprint_id = fq.fingerprint_id
574-
GROUP BY tf.transaction_fingerprint_id
568+
fingerprint_queries AS (
569+
-- Only fetch statement data for fingerprints that appear in contention events
570+
SELECT DISTINCT fingerprint_id, metadata->>'query' as query
571+
FROM system.statement_statistics ss
572+
WHERE EXISTS (
573+
SELECT 1 FROM contention_fingerprints cf
574+
WHERE cf.waiting_stmt_fingerprint_id = ss.fingerprint_id
575+
)
576+
),
577+
transaction_fingerprints AS (
578+
-- Only fetch transaction data for fingerprints that appear in contention events
579+
SELECT DISTINCT fingerprint_id, transaction_fingerprint_id
580+
FROM system.statement_statistics ss
581+
WHERE EXISTS (
582+
SELECT 1 FROM contention_fingerprints cf
583+
WHERE cf.waiting_stmt_fingerprint_id = ss.fingerprint_id
584+
)
585+
),
586+
transaction_queries AS (
587+
-- Build transaction queries only for relevant transactions
588+
SELECT tf.transaction_fingerprint_id, array_agg(fq.query) as queries
589+
FROM fingerprint_queries fq
590+
JOIN transaction_fingerprints tf ON tf.fingerprint_id = fq.fingerprint_id
591+
GROUP BY tf.transaction_fingerprint_id
575592
)
576593
SELECT collection_ts,
577594
contention_duration,
578595
waiting_txn_id,
579596
waiting_txn_fingerprint_id,
580597
waiting_stmt_fingerprint_id,
581-
fq.query AS waiting_stmt_query,
598+
fq.query AS waiting_stmt_query,
582599
blocking_txn_id,
583600
blocking_txn_fingerprint_id,
584601
tq.queries AS blocking_txn_queries_unordered,

0 commit comments

Comments
 (0)