Issues Reference
PG Pilot detects 42 different database issues. Click any issue for detailed documentation including detection criteria, impact analysis, and remediation steps.
Index Issues
5 issuesDuplicate Index
WarningMultiple indexes exist on the same table covering the same columns. Duplicate indexes waste storage and slow down writes without providing additional query benefits.
Integer Primary Key
WarningA table uses an integer (4-byte) primary key that may exhaust available IDs. For high-volume tables, this can cause application failures when IDs run out.
Invalid Index
WarningAn index that failed to build completely and is marked as invalid. Invalid indexes are not used by queries but still consume resources.
Unindexed Foreign Key
WarningA foreign key constraint exists without an index on the referencing columns. This causes full table scans when deleting or updating parent rows.
Unused Index
NoticeAn index that has never been scanned since statistics were last reset. Unused indexes waste disk space and slow down write operations.
Table Health
6 issuesAutovacuum Disabled on Table
WarningA table has autovacuum explicitly disabled, meaning it will not be automatically vacuumed by PostgreSQL.
Freeze Age Risk
WarningA table's frozen transaction ID age is approaching the autovacuum_freeze_max_age threshold, which will trigger aggressive anti-wraparound vacuum.
High Sequential Scan Ratio
WarningA table has a high ratio of sequential scans to index scans, indicating that queries may be missing useful indexes.
Table Bloat
WarningA table has a high ratio of dead tuples to live tuples, indicating significant bloat. This wastes disk space and slows down sequential scans.
Tables Needing Vacuum
NoticeA table has accumulated dead tuples or hasn't been vacuumed recently, indicating maintenance is needed.
Unlogged Table
WarningA table is created as UNLOGGED, meaning data is not written to WAL and will be lost on crash or unclean shutdown.
Sequence Issues
1 issuesTransaction ID
1 issuesReplication
4 issuesHigh Replication Lag
WarningA replication slot has significant lag, meaning the replica is far behind the primary database.
Inactive Replication Slot
WarningA replication slot is inactive (no consumer connected), causing WAL files to accumulate and potentially filling the disk.
Old Replication Slot XMIN
WarningA replication slot has an old xmin value, preventing VACUUM from removing dead tuples and causing table bloat.
WAL Status Issues
CriticalA replication slot has a concerning WAL status, indicating WAL segments may be at risk of removal or already lost.
Connections
6 issuesConnection Blocking
WarningA query is blocked waiting for a lock held by another session. This creates a blocking chain that can cascade to affect multiple queries.
Connection Pool Exhaustion
WarningThe database is approaching its max_connections limit. New connections may fail if the limit is reached.
Idle Connection
NoticeA connection has been idle for an extended period, consuming a connection slot without doing useful work.
Idle Transaction
WarningA connection is in "idle in transaction" state, holding locks and preventing VACUUM from cleaning up dead tuples.
Long-Running Query
WarningA query has been executing for more than 5 minutes, which may indicate a performance problem or runaway operation.
Old Transaction
NoticeA transaction has been open for more than 5 minutes, which may indicate a problem and can prevent vacuum from cleaning up dead tuples.
Configuration
18 issuesAutovacuum Disabled Globally
CriticalAutovacuum is disabled globally, which will cause table bloat, stale statistics, and eventual XID wraparound database shutdown.
Debug Logging Enabled
WarningDebug-level logging is enabled, creating massive log volumes and significant performance overhead.
Excessive Statement Logging
WarningEvery SQL statement is being logged, creating massive log files and significant I/O overhead.
Few Superuser Reserved Connections
NoticeVery few connections are reserved for superusers, which may prevent administrators from connecting during a connection exhaustion crisis.
High Autovacuum Freeze Max Age
WarningThe autovacuum_freeze_max_age is set higher than recommended, delaying XID freezing and increasing wraparound risk.
Index Scans Disabled
WarningIndex scans are disabled, forcing all queries to use sequential scans regardless of available indexes.
Index-Only Scans Disabled
WarningIndex-only scans are disabled, preventing PostgreSQL from using its most efficient scan method for covered queries.
Log Minimum Duration Zero
WarningEvery query's duration is being logged (log_min_duration_statement = 0), creating excessive log output.
Low Checkpoint Completion Target
NoticeThe checkpoint_completion_target is low, causing I/O spikes during checkpoints instead of smooth background writes.
No Idle Transaction Timeout
NoticeNo idle_in_transaction_session_timeout is set, meaning idle transactions can block vacuum and hold locks indefinitely.
No Lock Timeout
NoticeNo lock_timeout is configured, meaning queries can wait indefinitely for locks instead of failing fast.
No Statement Timeout
NoticeNo statement_timeout is configured, meaning queries can run indefinitely without being automatically terminated.
Statistics Tracking Disabled
CriticalStatistics tracking (track_counts) is disabled, which breaks autovacuum and prevents collecting table and index statistics.
Synchronous Commit Disabled
WarningSynchronous commit is disabled, meaning committed transactions may be lost in a crash window of up to 600ms.
WAL Level Minimal
WarningWAL level is set to minimal, which disables replication and prevents point-in-time recovery.
Weak Password Encryption
CriticalThe database is using MD5 for password hashing, which is cryptographically broken and vulnerable to attacks.
fsync Disabled
CriticalThe fsync setting is disabled, meaning PostgreSQL does not ensure data is written to disk. A crash will likely cause unrecoverable data corruption.
full_page_writes Disabled
CriticalThe full_page_writes setting is disabled, risking torn page corruption after a crash that cannot be detected or repaired.