EDIT: before trying the solution below, first try disabling battery optimization for Calendar.
Note that the following is only my experience and opinion based on limited observations.
History of events
I've seen this happen after upgrading to a new 5.8.x release. The last (mostly) reliable version I'm aware of is
5.8.38-200532405-release. After I noticed the missed notifications on the upgraded version, I downgraded (using my backed up apk).
I didn't upgrade for a while, and during that time, at least one new version was released; I decided to give it another chance. This upgrade took me to 6.0.x. It sort of worked ok for a while - notifications were sometimes late by a minute or two, but that was acceptable to me.
Then a couple days later, I was doing some intensive work on my phone, with a lot of apps open at the same time. Calendar was starting to get flaky and not trigger notifications, or only trigger sporadically.
Newer app releases are possibly taking more memory than before - or not as robust at restarting the background service when the OS kills it due to low memory conditions. The more memory in use by apps, the more likely any particular service will be killed (not necessarily Calendar's, but a memory-bloated service or app will make the problem worse).
I'm not at all familiar with Android development, but ideally Calendar would keep a list of the recent notifications (maybe in the last hour?) that have successfully triggered. Then if the service is killed and gets restarted, it should compare recent notifications that should've triggered with its list of those that actually did trigger. It should then trigger the ones that were missed and add them to the already-triggered list. I have a feeling the app is not doing this.
Avoid having too many apps running. Swipe away those you're not using.
Failing that, try downgrading Calendar. You can try APK Mirror (use at your own risk!). Out of curiosity, I downloaded
5.8.38-200532405-release onto my desktop and compared it to my own backup. The
apk file wasn't the same (because it's a zip file with possibly different compression ratio & file modification times, etc), but the unzipped contents were identical (compared using
diff -r). The sha256 of the APK Mirror apk is
The last reliable version (mentioned above) for my device and usage patterns may not be the same one that works for you. I said "mostly" reliable because once in a long while I still miss notifications. Keeping the list of running apps small seems to help.
I used information from answers here to backup my device's