Nejúčinnějším způsobem, jak toho dosáhnout, je použít pohled. co? Co to má společného s problémem? Nedělejte mazání 10 minut po odděleních. Místo toho vytvořte zobrazení s následující logikou:
create view v_recoveries as
select r.*
from recoveries r
where expiry > date_sub(now(), interval 10 minutes);
Pro výkon chcete index recoveries(expiry)
, takže by to mělo být rychlé.
Pak ve svém volném čase – jednou za rande, jednou za hodinu nebo jednou za týden – smažte nepotřebné záznamy pomocí:
DELETE FROM `recoveries`
WHERE `expiry` <= date_sub(now(), interval 10 minutes);
Tento přístup má několik výhod:
- Přítomnost dat je přesně 10 minut, nikoli na základě plánování nějaké úlohy.
- Skutečné mazání může probíhat, když je systém v klidu.
- Pokud se úloha cron nezdaří, data nejsou „poškozená“ – to znamená, že nezískáte data, která jsou příliš stará.
- Pokud je systém zaneprázdněn (mnoho vložení), pak vložky nesoutěží s mazáními, což dále zpomaluje systém.