It appears that people are (ab)using the RepositoryChecker to fix the versioning information in their repo after removing the version storage. (It would be good to understand why this happens, but anyway...)
The RepositoryChecker, as currently implemented, walks the repository, collects changes, and, when done, submits them as a single repository ChangeLog.
This will not work if the number of affected nodes is big.
Unfortunately, the checker is currently designed to do things to two steps; we could of course stop collecting changes after a threshold, then apply what we have, then re-run the checker. That would probably work, but would be slow on huge repositories.
The best alternative I see is to add a checkAndFix() method that is allowed to apply ChangeLogs to the repository on the run (and of course to use that variant from within RepositoryImpl.doVersionRecovery()).