WPShadow

All Shadow checks

WordPress database checks in Shadow

Database health: tables that have grown too large or still use an older storage engine, orphaned post and user data, stale sessions, auto-drafts piling up, and the size of the options WordPress loads on every page.

There are 12 checks in this family. Shadow reports what it finds, and nothing is changed until you approve a fix.

In this family

What each check looks at

All Tables Have a Primary Key

Checks that every WordPress database table has a primary key. Tables missing a primary key degrade replication performance and can slow certain queries.

Auto-Draft Accumulation

Checks whether auto-draft rows have accumulated in wp_posts. WordPress creates an auto-draft every time the post editor is opened and never automatically removes them.

Autoloaded Options Total Size Under Limit

Checks that the total byte size of all autoloaded wp_options rows is under 800 KB. Large autoload payloads slow every page load.

No High-Frequency Orphaned Post Meta Keys

Checks for post meta keys written to more than 80% of published posts by a plugin that is no longer active. These orphaned rows waste database space and slow meta queries.

Why it matters. Checks for meta_key values that appear on an unusually high proportion of posts compared to the total published post count. This pattern typically indicates a plugin that is writing data to every post but has since been removed, leaving behind large amounts of stale metadata.

No MyISAM Tables in Use

Checks that all WordPress database tables use the InnoDB storage engine. MyISAM is outdated, lacks transactions, and does not support crash recovery.

No Orphaned User Meta

Checks that every row in wp_usermeta has a corresponding user in wp_users. Orphaned rows are created when users are deleted without cleanup hooks and waste database space.

Stale User Sessions Not Accumulating

Checks that the number of user session token rows in wp_usermeta is not disproportionate to the active user count, which would indicate expired sessions are not being cleared.

Why it matters. Checks that expired WordPress user sessions are not accumulating in wp_usermeta. Each logged-in user stores a serialised session token in wp_usermeta; WordPress should be expiring these automatically, but on busy sites they can pile up and slow user-related queries.

User Table Unusually Large

Checks whether wp_users has grown large enough to cause noticeable slowdowns in the admin. Large user tables degrade the Users list screen, author dropdowns in the block editor, and any query that joins against wp_users.

WooCommerce Session Table Not Bloated

Checks that the wp_woocommerce_sessions table (if present) contains fewer than 10,000 rows. A larger table indicates WooCommerce scheduled cleanup is not running correctly.

Why it matters. Checks whether the wp_woocommerce_sessions table exists and, if so, whether its row count has grown to an unhealthy size. A large sessions table indicates that WooCommerce session cleanup is not running correctly.

wp_options Table Not Bloated

Checks that the total row count in wp_options is under 2,000. An abnormally large options table is a sign of plugin data bloat.

Why it matters. Checks that the total number of rows in wp_options has not grown to an unhealthy size. Bloated options tables are often caused by plugins that write per-item records rather than using a single serialised option.

wp_postmeta Not Excessively Bloated

Checks that the ratio of wp_postmeta rows to published post count is under 100:1. A higher ratio typically signals abandoned plugin data clogging the database.

Why it matters. Checks that the wp_postmeta table has not grown to a size that is disproportionate to the number of published posts. A high ratio usually indicates orphaned or abandoned plugin data.

wp_usermeta Not Excessively Bloated

Checks that the ratio of wp_usermeta rows to registered users is under 200:1. A higher ratio typically signals abandoned plugin data left behind in the database.

Why it matters. Checks that the wp_usermeta table has not grown to a size disproportionate to the number of registered users. A high ratio often indicates abandoned plugin metadata that was never cleaned up.

The other check families

Shadow is free and runs on your own server, with no account. The source is on GitHub, and these descriptions come from it.

Find me online: LinkedIn · Bluesky · X · Mastodon · YouTube · GitHub · WordPress.org