The easiest way to handle communicating a price increase in a way to avoid churn is to not have any "sticker shock" and to apologize and to simply standardize annual increases of around 3% rather than wait three years and then raise 10-15% all at once.
In the SaaS/CRM spaces I track, some organizations standardize on relatively annual and micro adjustments that retain their customers at around a 95% rate, whereas organizations that hold flat for three years and then make a big 15% increase tend to get their renewal rate to fall from 90% to 75%.
When you send out the annual notification, the biggest communication tactic to employ is to try to get the customer to focus on the absolute amount of the increase in $ per month rather than the overall %.
Some Account Managers argue that there's a $30/year increase, which, then divided by 12, is basically another $2.50/month. That's barely anything. The $2.50 increase rarely triggers the "I have to cancel, this is too expensive" mindset in the customer, whereas a bigger jump almost forces a review of the account.
Finally, if the customer complains that money is particularly tight, one of the biggest moves you can make as a concession is to allow them to change the payment terms to more frequent ones. You might have them switch from an annual upfront invoice to monthly direct debit at the new rate.
This is like giving them an interest-free loan on the service, since now they pay over time. That way, they see the increase as something small on their ledger every month, instead of hitting their funding all at once, which keeps the peace and reduces the threat of cancellation.