Hi, this is becoming a very common discussed topic, especially now that customers are starting to receive capacity-overage notifications.
The first priority should be keeping production as clean and efficient as possible by using Microsoft’s official cleanup routines, especially for batch history, database logs, Data Management staging data and other log tables. Microsoft provides a complete overview here: Cleanup routines in Dynamics 365 Finance and Supply Chain Management.
For non-production environments, a recent full copy of production can be useful for UAT and debugging, but DEV environments rarely need the complete transaction history. Transaction-less copies should therefore be considered to reduce storage consumption. A date-based copy that retains only a defined period of transactions would be ideal and is often discussed, but not yet implemented i know, although the standard transaction-less copy currently removes transactions based on table groups rather than a date range.
Historical production data should also be evaluated for archiving through Dataverse long-term retention, which provides a more cost-efficient location for inactive data: Archive Finance and Operations data with Dataverse.
Only after applying cleanup, archiving and a purpose-based environment strategy would I consider purchasing additional capacity. Adding licenses solely to obtain storage may appear cheaper, but the actual entitlement and licensing conditions should first be verified with Microsoft or your licensing partner.