Every autoloaded option is fetched and unserialised on every request, and a plugin storing a large structure in one turns a cache into a fixed cost.
SELECT option_name, LENGTH(option_value) AS bytes
FROM wp_options WHERE autoload = 'yes'
ORDER BY bytes DESC LIMIT 5;
-- 4.1 MB in one row
SELECT SUM(LENGTH(option_value))/1024 AS kb
FROM wp_options WHERE autoload = 'yes';
-- healthy: under ~800
Tracking the total over time is more useful than a one-off cleanup, because it identifies the deploy that introduced a regression rather than the accumulated state. The cost is not only the query but unserialising several megabytes into PHP arrays on every request, including admin-ajax and cron.