ワンクリックで
cancel-long-running-queries-and-sessions
Identify and cancel problematic queries and sessions impacting cluster performance
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Identify and cancel problematic queries and sessions impacting cluster performance
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
Analyze table statistics and estimated row counts to understand optimizer decisions and diagnose plan quality issues
Use SHOW BACKUP to analyze incremental backup efficiency by comparing data_size, row_count, and performance metrics across backup chains. Calculate storage savings, monitor change rates, and optimize backup frequency based on data patterns. Essential for balancing RPO requirements with storage costs.
Use SHOW RANGES commands to analyze how table data and indexes are split into ranges and distributed across cluster nodes. Understand key-value encoding, range boundaries, replica placement, and leaseholder assignment for performance troubleshooting.
Analyze query latency using mean, max, and min metrics from statement statistics; percentile data (p50/p90/p99) only available in DB Console UI
Analyze how ranges and replicas are distributed across regions in multi-region clusters. Query range placement, verify regional constraints, identify misplaced ranges, and detect rebalancing issues. Essential for troubleshooting latency, verifying compliance, and optimizing multi-region performance.
Use USING HASH clause to distribute sequential keys across ranges, preventing write hotspots. Hash function maps sequential values to buckets (default 16) spreading writes across the cluster. Fixes timestamp, auto-increment, and date-based hotspots with trade-off on range scan efficiency.
SOC 職業分類に基づく
| name | cancel-long-running-queries-and-sessions |
| description | Identify and cancel problematic queries and sessions impacting cluster performance |
| metadata | {"domain":"Cluster Management","bloom_level":"Apply","version":"1.1.0","cockroachdb_version":"v26.1.0+","status":"complete","tested":true} |
Domain: Cluster Management Bloom's Level: Apply
You'll learn to identify, investigate, and cancel long-running queries and sessions that impact cluster performance. This includes using SHOW QUERIES and SHOW SESSIONS to find problematic operations, filtering by various criteria (runtime, memory usage, application), and applying graceful or forced cancellation strategies.
-- Show all active queries with runtime
SHOW QUERIES;
-- Show queries running longer than 1 minute
SELECT query_id, node_id, user_name, application_name,
start, query, (now() - start) AS duration
FROM [SHOW CLUSTER QUERIES]
WHERE start < (now() - INTERVAL '1 minute')
ORDER BY start;
-- Find longest-running queries
SELECT query_id, node_id, application_name, query,
(now() - start) AS duration
FROM [SHOW CLUSTER QUERIES]
WHERE (now() - start) > INTERVAL '30 seconds'
ORDER BY (now() - start) DESC
LIMIT 10;
-- Get full query text and execution plan
SHOW QUERY 'query-id-here';
-- View query execution statistics
SELECT query_id, session_id, application_name,
start, query, (now() - start) AS duration
FROM [SHOW CLUSTER QUERIES]
WHERE query_id = 'query-id-here';
-- Check query runtime status
SELECT query_id, session_id, (now() - start) AS duration,
CASE
WHEN (now() - start) > INTERVAL '5 minutes' THEN 'VERY_SLOW'
WHEN (now() - start) > INTERVAL '1 minute' THEN 'SLOW_QUERY'
ELSE 'NORMAL'
END AS status
FROM [SHOW CLUSTER QUERIES]
WHERE query_id = 'query-id-here';
-- Find queries from specific application
SELECT query_id, user_name, start, (now() - start) AS duration, query
FROM [SHOW CLUSTER QUERIES]
WHERE application_name = 'myapp'
AND (now() - start) > INTERVAL '30 seconds';
-- Find all queries from specific user
SELECT query_id, application_name, start, (now() - start) AS duration
FROM [SHOW CLUSTER QUERIES]
WHERE user_name = 'reporting_user'
ORDER BY (now() - start) DESC;
-- Identify applications with most long-running queries
SELECT application_name, count(*) AS query_count,
max(now() - start) AS longest_query
FROM [SHOW CLUSTER QUERIES]
WHERE (now() - start) > INTERVAL '10 seconds'
GROUP BY application_name
ORDER BY query_count DESC;
-- Show all active sessions
SHOW SESSIONS;
-- Find sessions idle in transaction
SELECT session_id, node_id, user_name, application_name,
active_queries, last_active_query, session_start
FROM [SHOW CLUSTER SESSIONS]
WHERE active_queries = ''
AND last_active_query != ''
AND (now() - active_query_start) > INTERVAL '5 minutes';
-- Find sessions with multiple active queries
SELECT session_id, application_name, user_name,
active_queries, session_start
FROM [SHOW CLUSTER SESSIONS]
WHERE active_queries != ''
ORDER BY session_start;
-- Sessions from specific client address
SELECT session_id, client_address, user_name,
application_name, active_queries
FROM [SHOW CLUSTER SESSIONS]
WHERE client_address LIKE '10.0.1.%';
-- Cancel specific query (graceful)
CANCEL QUERY 'query-id-here';
-- Cancel query on specific node
CANCEL QUERY '17d0e0c38db5cc380000000000000001' ON NODE 1;
-- Cancel multiple queries from application
-- First identify queries
SELECT query_id FROM [SHOW CLUSTER QUERIES]
WHERE application_name = 'batch_processor'
AND (now() - start) > INTERVAL '2 minutes';
-- Then cancel each query (manual or scripted)
CANCEL QUERY 'query-id-1';
CANCEL QUERY 'query-id-2';
-- Cancel specific session
CANCEL SESSION 'session-id-here';
-- Cancel session on specific node
CANCEL SESSION '17d0e0c38db5cc380000000000000001' ON NODE 1;
-- Force cancel (closes connection immediately)
-- Note: Regular CANCEL SESSION is already forceful
-- Sessions terminate and roll back active transactions
-- Verify query was cancelled
SELECT query_id, (now() - start) AS duration
FROM [SHOW CLUSTER QUERIES]
WHERE query_id = 'cancelled-query-id';
-- Should return no results
-- Check for remaining sessions from application
SELECT count(*) AS session_count
FROM [SHOW CLUSTER SESSIONS]
WHERE application_name = 'problematic_app';
-- Monitor cluster performance after cancellation
SELECT * FROM crdb_internal.node_runtime_info;
-- 1. Identify application queries
SELECT query_id, (now() - start) AS duration, query
FROM [SHOW CLUSTER QUERIES]
WHERE application_name = 'legacy_app';
-- 2. Cancel longest-running queries first
-- Export query IDs and cancel programmatically
-- Or use cockroach sql with --execute flag in a loop
-- 1. Find idle transactions older than threshold
SELECT session_id, user_name, application_name,
active_query_start, last_active_query
FROM [SHOW CLUSTER SESSIONS]
WHERE active_queries = ''
AND last_active_query != ''
AND (now() - active_query_start) > INTERVAL '10 minutes';
-- 2. Cancel sessions (rolls back idle transactions)
CANCEL SESSION 'session-id-1';
CANCEL SESSION 'session-id-2';
-- 1. Find queries sorted by estimated resource usage
SELECT query_id, (now() - start) AS duration, application_name,
substring(query, 1, 100) AS query_preview
FROM [SHOW CLUSTER QUERIES]
WHERE (now() - start) > INTERVAL '30 seconds'
ORDER BY (now() - start) DESC;
-- 2. Cancel top offenders
CANCEL QUERY 'longest-running-query-id';
-- Distributed queries may show on multiple nodes
SELECT query_id, node_id, (now() - start) AS duration
FROM [SHOW CLUSTER QUERIES]
WHERE query LIKE '%FULL SCAN%'
OR query LIKE '%JOIN%'
ORDER BY (now() - start) DESC;
-- Cancel on any node (cancels entire distributed operation)
CANCEL QUERY 'distributed-query-id';
Symptom: CANCEL QUERY succeeds but query still appears in SHOW QUERIES
Causes:
Solutions:
-- Check query phase
SELECT query_id, (now() - start) AS duration, query
FROM [SHOW CLUSTER QUERIES]
WHERE query_id = 'stuck-query-id';
-- If stuck in commit, wait for completion
-- If truly stuck, cancel entire session instead
CANCEL SESSION 'session-id-for-query';
-- Last resort: restart node (only if query is on single node)
-- Not recommended for production
Symptom: Query visible but no clear application_name or user_name
Investigation:
-- Check all query metadata
SELECT * FROM [SHOW CLUSTER QUERIES]
WHERE query_id = 'unknown-query-id';
-- Look for client address patterns
SELECT session_id, client_address, application_name
FROM [SHOW CLUSTER SESSIONS]
WHERE session_id IN (
SELECT session_id FROM [SHOW CLUSTER QUERIES]
WHERE query_id = 'unknown-query-id'
);
-- Check if query is internal/system
-- System queries often have empty application_name
Symptom: Canceling session but connection pool recreates it
Cause: Application connection pool auto-reconnects
Solution:
Symptom: User cannot cancel queries from other users
Cause: Insufficient privileges
Solution:
-- Admin users can cancel any query/session
-- Non-admin users can only cancel their own
-- Grant admin privilege if needed
GRANT admin TO username;
-- Or cancel as admin user
-- cockroach sql --user=admin
-- CANCEL QUERY 'query-id';
Set query timeouts: Use statement_timeout cluster setting to auto-cancel slow queries
SET statement_timeout = '5m';
SET CLUSTER SETTING sql.defaults.statement_timeout = '10m';
Monitor proactively: Set up alerts for long-running queries before they cause issues
Identify patterns: Track which applications/queries frequently need cancellation
Document thresholds: Define SLOs for acceptable query runtime
Use application_name: Ensure applications set meaningful names for easier filtering
-- In connection string
-- postgresql://user@host/db?application_name=my_service
Graceful degradation: Cancel queries in order of severity (longest first)
Communicate with users: Notify application teams before canceling their queries
Test cancellation: Verify applications handle query cancellation gracefully
Log cancellations: Keep audit trail of what was cancelled and why
Review query plans: Use EXPLAIN to understand why queries are slow
SHOW QUERIES and SHOW SESSIONS are lightweight operationsSHOW CLUSTER QUERIES/SESSIONS query all nodes (slightly more expensive)-- Identify long-running queries
SELECT query_id, user_name, application_name,
(now() - start) AS duration, substring(query, 1, 100)
FROM [SHOW CLUSTER QUERIES]
WHERE (now() - start) > INTERVAL '10 minutes'
ORDER BY (now() - start) DESC;
-- Cancel each query (script this for multiple queries)
CANCEL QUERY '17d0e0c38db5cc380000000000000001';
CANCEL QUERY '17d0e0c38db5cc390000000000000002';
-- Find sessions
SELECT session_id, client_address, session_start
FROM [SHOW CLUSTER SESSIONS]
WHERE application_name = 'old_reporting_app';
-- Cancel all sessions
CANCEL SESSION 'session-id-1';
CANCEL SESSION 'session-id-2';
CANCEL SESSION 'session-id-3';
-- Find resource-intensive queries
SELECT query_id, (now() - start) AS duration,
application_name, node_id
FROM [SHOW CLUSTER QUERIES]
ORDER BY (now() - start) DESC
LIMIT 5;
-- Cancel top 3 offenders
CANCEL QUERY 'query-id-1';
CANCEL QUERY 'query-id-2';
CANCEL QUERY 'query-id-3';
-- Verify improvement
SELECT node_id, used_bytes, available_bytes
FROM crdb_internal.node_runtime_info;