Skip to content

sql: Add contended tables, indexes, and keys views #61507

@awoods187

Description

@awoods187

We now have rich contention information on contention, but we require developers to find it and address it themselves. Instead, we could make predetermined views that would ease observability.

Contended tables:

CREATE VIEW crdb_internal.contended_tables (database_name, schema_name, name, num_contention_events)
AS SELECT DISTINCT database_name, schema_name, name, num_contention_events
FROM crdb_internal.cluster_contention_events
JOIN crdb_internal.tables
ON crdb_internal.cluster_contention_events.table_id = crdb_internal.tables.table_id
ORDER BY num_contention_events desc;

With sample TPC-C results:

select * from contended_tables;
  database_name | schema_name |       name       | num_contention_events
----------------+-------------+------------------+------------------------
  tpcc          | public      | warehouse        |                   496
  system        | public      | jobs             |                   178
  tpcc          | public      | district         |                    71
  system        | public      | sqlliveness      |                    51
  NULL          | pg_catalog  | pg_extension     |                    33
  system        | public      | jobs             |                    33
  tpcc          | public      | stock            |                     9
  NULL          | pg_catalog  | pg_event_trigger |                     9
  NULL          | pg_catalog  | pg_event_trigger |                     6
  NULL          | pg_catalog  | pg_event_trigger |                     4
  NULL          | pg_catalog  | pg_event_trigger |                     3
  NULL          | pg_catalog  | pg_event_trigger |                     2
  NULL          | pg_catalog  | pg_event_trigger |                     1

We should also add views for contended indexes and contended keys.

CREATE VIEW tpcc.contended_indexes (database_name, schema_name, name, index_name, num_contention_events)
AS SELECT DISTINCT database_name, schema_name, name, index_name, num_contention_events
FROM crdb_internal.cluster_contention_events, crdb_internal.tables, crdb_internal.table_indexes
WHERE crdb_internal.cluster_contention_events.index_id = crdb_internal.table_indexes.index_id
AND crdb_internal.cluster_contention_events.table_id = crdb_internal.tables.table_id
ORDER BY num_contention_events desc limit 5;
 SELECT * from contended_indexes;
  database_name | schema_name |    name     | index_name | num_contention_events
----------------+-------------+-------------+------------+------------------------
  tpcc          | public      | warehouse   | primary    |                   812
  system        | public      | jobs        | primary    |                   182
  tpcc          | public      | district    | primary    |                   142
  system        | public      | sqlliveness | primary    |                    55
  system        | public      | jobs        | order_idx  |                    34
(5 rows)

Metadata

Metadata

Assignees

Labels

A-sql-cli-observabilityIssues related to surfacing SQL observability in SHOW, CRDB_INTERNAL, SYSTEM, etc.C-enhancementSolution expected to add code/behavior + preserve backward-compat (pg compat issues are exception)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions