This was also kind of part of the whole switch from by default enabled to by default disabled (for custom products) discussion (if you have the time, it’s a long one):
Before the switch you could make sure the host only sees what it needs / should see by adding subscriptions, since the switch you have to use content-views for the same result.
So to have the least trouble, I don’t know how often your sync-plan(s) run, but if it’s daily, create several CVs and then a (or many) cronjob which run when you expect the syncs to have finished.
In my case that resulted in 7 sync-plans for 228 repos, with 8 CVs and 4 cronjobs per CV (publish, promote-1, promote-2, cleanup of old versions)
Looks like this for example:
0 3 * * * root hammer content-view publish --organization ORG --name "EL8" --async 2>&1 | /usr/bin/logger -t cron-katello-cv-publish-el8
0 5 * * * root hammer content-view version promote --organization ORG --content-view "EL8" --from-lifecycle-environment Library --to-lifecycle-environment DEV --async 2>&1 | /usr/bin/logger -t cron-katello-cv-promote-el8
0 7 * * * root hammer content-view version promote --organization ORG --content-view "EL8" --from-lifecycle-environment DEV --to-lifecycle-environment PROD --async 2>&1 | /usr/bin/logger -t cron-katello-cv-promote-el8
0 10 * * * root if [ $(hammer --no-headers --csv content-view version list --organization ORG --content-view "EL8" | wc -l) -ge 10 ]; then for i in $(hammer --no-headers --csv content-view version list --organization ORG --content-view "EL8" | awk -F, {'print $1'} | tail -n3); do hammer content-view version delete --organization ORG --id ${i} --async; done; fi 2>&1 | /usr/bin/logger -t cron-katello-cv-cleanup-el8
Tbh with this solution it currently runs pretty smoothly.
There was also a beginning to look into extending the “Restrict to architecture/OS version” (currently only for RHEL), which could also help in this case, but this hasn’t had that much progress up to now (somewhere at the end of the mentioned thread)