It is not recommended [1] to perform a full balance or even a metadata balance unless you are converting the profile (e.g., single > RAID 1, etc.).
As of today, on Fedora with a recent kernel, there is a feature that can be enabled via SYSFS, which performs automatic balancing only when necessary. I would recommend enabling that feature.
example: echo 1 | sudo tee /sys/fs/btrfs/UUID/allocation/data/dynamic_reclaim
[1] ENOSPC - No available disk space | Forza's Ramblings
Preventing ENOSPC - Btrfs Balanceeditedit source
What btrfs balance does is to send things back through the allocator, which results in space usage in the chunks being compacted. For example, if you have two data chunks that are both 40% full, a balance will result in them becoming one chunk that’s 80% full. By compacting chunks, the balance operation is able to convert the empty chucks into unallocated space that can be used for new applications.
It is important to run a btrfs balance before you run out of unallocated space. A common way is to set up a scheduled maintenance task that regularly runs a limited balance.
NOTE! Only balance DATA chunks, never METADATA chunks
[1] Balance — BTRFS documentation
Warning
Running balance without filters will take a lot of time as it basically move data/metadata from the whole filesystem and needs to update all block pointers.