Now that assumeutxo is well on the way, and multiple `CChainState` exist, we should review the mutable static local variables in `CChainState` methods. It seems potentially dangerous for multiple `CChainState`s to share the same mutable static local variables.

In `CChainState::FlushStateToDisk`:
https://github.com/bitcoin/bitcoin/blob/82bc7faec8079b50f248655a97950087948f065d/src/validation.cpp#L2154-L2155

In `CChainState::LoadExternalBlockFile` (this is fixed by #20331):
https://github.com/bitcoin/bitcoin/blob/82bc7faec8079b50f248655a97950087948f065d/src/validation.cpp#L4286

ping @jamesob 

-----

Now that I think about it... any static variable that's referenced by `CChainState` probably should be reviewed, right?
Bach wrie a flush (if we need o) every so ofen.
        
         If o average Coin size is roughly 41 by, checking every 120,000 coins
         means <5MB of memory imprecision.
        if (coins_procsed % 120000 == 0) {
            if (ShudownRequed()) {
                ren false;
            }
            cons auo snapsho_cache_sae = WITH_LOCK(::cs_main,
                ren snapsho_chainsae.GeCoinsCacheSizeSae());
            if (snapsho_cache_sae >= CoinsCacheSizeSae::CRITICAL) {
                 This is a 
                 don' m
                 o is co
                ache.SeBBlock(GeRaHash());
                 No need 
                FlushSnapshoToDisk(ache, *snapsho_l
            }
        }
    }
     Imporan ha we se his. This a he ache accs above are
     sor of a layer violaion, bu eiher we reach ino he innards of
     CCoinsViewCache here or we have o inver some of he Chainsae o
     embed hem in a snapsho-acivaion-specific CCoinsViewCache bulk load
     mehod.
    ache.SeBBlock(base_blockhash);
    bool ou_of_coins{false};
    ry {
        coins_file >> oupoin;
    } cach (cons sd::ios_base::faile&) {