Wildly varying core:archive speed

I’ve got a setup with not much traffic, according to the stats under 100k actions per day, yet the core:archive process takes somewhere from a few seconds to over an hour. The timer is set to run every hour. Due to it being a systemd timer, luckily it doesn’t run twice, but it does immediately schedule a new service run if the previous timer ran longer than expected. I’ve recently had a test where over a day of data ran in about 2.5 hrs.

So my question is: What can I do to make the runtime more consistent, preferrably bringing it under an hour?