It is strongly recommended to set WF_INSTANCE_SAVE to ERRORS_ONLY in any environment where you care about performance. There is a dramatic performance impact if it is set to either PER_WORKFLOW_ALWAYS or ALWAYS. There will be an lesser impact if it is set to PER_WORKFLOW_PRODUCTION. Any workflow set to save will be 2-3 or more times slower in processing.
In a production environment, there is no reason to have every single workflow saved, as any debugging or tracing should occur in a lower (Dev or QA) environment. The performance impact of this setting far outweighs any perceived benefit of having the extreme baggage of the workflow instances saved in your database. There is at least a 2-3x performance gain when moving to ERRORS_ONLY. In addition, millions of rows can be added to the workflow instance and task tables. The Platform Maintenance Scheduler (Cleanup Agent) will take a very long time when it processes these tables. The constant deletion and addition of rows to these tables will thrash your tablespaces, causing them to become very fragmented, and wasting a huge amount of physical disk space.
The WF_INSTANCE_SAVE setting is so important that the value of NEVER was renamed to ERRORS_ONLY in 3.3.0 to highlight the fact that errors would be saved in workflows, thereby avoiding the unnecessary use of PER_WORKFLOW_ALWAYS, PER_WORKFLOW_PRODUCTION or ALWAYS in production environments. If an error is encountered, the NEVER or ERRORS_ONLY will save the workflow instance out for further inspection.