In my experience the bottle neck for any nextcloud install is typically the database.

Unlike many other projects it's surprisingly easy to get in a situation where the db is throttling due to IO issues on a single box machine. Having the db at on a seperate drive from the storage and logging really speeds things up.

That and setting up a lot of the background tasks like image preview generation, redis ect properly.