Technologies/PostgreSQL/postgresql.sequential_scans
PostgreSQLPostgreSQLMetric

postgresql.sequential_scans

Sequential scans initiated
Dimensions:None
Available on:DatadogDatadog (1)Native (1)OpenTelemetryOpenTelemetry (1)PrometheusPrometheus (1)
Interface Metrics (4)
DatadogDatadog
Enabled with `relations`. The number of sequential scans initiated on this table. This metric is tagged with db, schema, table.
Dimensions:None
Native
last_seq_scan statistic from pg_stat_all_tables
Dimensions:None
OpenTelemetryOpenTelemetry
The number of sequential scans.
Dimensions:None
PrometheusPrometheus
Number of sequential scans initiated on this table
Dimensions:None

Technical Annotations (37)

Configuration Parameters (2)
default_statistics_targetrecommended: 500
Increase for skewed columns to improve histogram depth and cardinality estimates
cpu_tuple_costrecommended: 0.01
Estimated cost to process one tuple; affects optimizer decisions on scan methods
CLI Commands (16)
EXPLAIN (ANALYZE) SELECT * FROM table WHERE column = 'value';diagnostic
CREATE INDEX ON table_name(column_name);remediation
explain (analyze, buffers) SELECT latitude, longitude, id FROM cities WHERE country_code = 'CA';diagnostic
\d citiesdiagnostic
CREATE INDEX CONCURRENTLY ON cities (country_code);remediation
ALTER TABLE your_table ALTER COLUMN status SET STATISTICS 500;remediation
CREATE INDEX idx_orders_status_created ON orders (status, created_at);remediation
EXPLAIN ANALYZE SELECT o.id, o.total, c.name FROM orders o JOIN customers c ON c.id = o.customer_id WHERE o.created_at > '2026-01-01' AND o.status = 'completed';diagnostic
EXPLAIN ANALYZE SELECT * FROM table_name WHERE column_name = 'value'diagnostic
EXPLAIN ANALYZE query_returning_large_datasetdiagnostic
CREATE INDEX idx_orders_customer ON orders(customer_id);remediation
SELECT relname AS table, seq_scan, seq_tup_read, idx_scan, seq_tup_read / NULLIF(seq_scan, 0) AS avg_seq_tup FROM pg_stat_user_tables WHERE seq_scan > 0 ORDER BY seq_tup_read DESC LIMIT 20;diagnostic
SELECT schemaname || '.' || relname AS table, seq_scan, idx_scan, n_live_tup, round(100.0 * seq_scan / NULLIF(seq_scan + idx_scan, 0), 2) AS seq_scan_pct FROM pg_stat_user_tables WHERE seq_scan > 1000 AND n_live_tup > 10000 ORDER BY seq_scan DESC;diagnostic
SELECT datname, stats_reset FROM pg_stat_database;diagnostic
SELECT relname, seq_scan, seq_tup_read / seq_scan AS tup_per_scan FROM pg_stat_user_tables WHERE seq_scan > 0;diagnostic
SELECT schemaname, relname AS table_name, seq_scan, idx_scan, n_tup_ins AS inserts, n_tup_upd AS updates, n_tup_del AS deletes, n_dead_tup AS dead_tuples, last_vacuum, last_autovacuum FROM pg_stat_user_tables ORDER BY n_dead_tup DESC;diagnostic
Technical References (19)
Seq ScanconceptIndex ScanconceptRows Removed by FilterconceptEXPLAINcomponentCONCURRENTLYconcepthistogramconceptselectivityconceptcardinality estimatesconceptBitmap Index Scancomponentpg_stat_statementscomponentsequential scanconceptshared bufferscomponentwork memorycomponentWHERE predicateconceptpg_stat_user_indexescomponentpg_stat_user_tablescomponentpg_stat_databasecomponentseq_scancomponentidx_scancomponent
Related Insights (10)
Sequential scan instead of index scan causes 10-20x slowdownwarning
Insufficient column statistics cause poor selectivity estimateswarning
Sequential scan reads excessive rows due to missing indexwarning
Missing or ineffective indexes cause sequential scans on large tableswarning
Sequential scans consume CPU resources during row extraction phaseinfo
Missing indexes force sequential scans on small result setswarning
Large result sets make sequential scans optimal despite proper indexinginfo
Missing indexes on WHERE clause columns cause full table scanscritical
High sequential scan count may indicate missing indexes requiring query optimizationwarning
High sequential scan to index scan ratio indicates missing indexeswarning