Server performance issues when using webui, desktop or android app

I’ve recently noticed issues on my android phone that was months behind on sync. forcing sync generated a rather generic failure error (along the lines of ‘unexpected sync error’).
wiping the app & folders for a clean start helped the error but still very unreliable and will now just stop syncing mid-way though with no error.

i also noticed that my desktop client, that while reliable, that server performance is appauling.

my production environment is 1-2 users, running in a 2 core, 8GB VM using the community docker image (https://hub.docker.com/_/nextcloud), running on an n100 system. storage is all SSD, with the actual data store via NFS.

if no sync occurs, then the webui & server load is fine (<0.1 load).

however if i start to sync via any method; android, linux client or upload via webui then system load goes high and will settle down somewhere around 10-17 system load.

thinking i had something wrong, i’ve built a test VM with same image but using all local resources to eliminate a VM/NFS/network issue. in this scenario, the entire VM (including DB and storage) is running on enterprise SSD’s.

here’s a ‘top’ snapshot in the test VM, uploading part of my music collection as test files,198 files across 12GB total size, via the webUI. this is approximately 14MB/s average upload speed.

i see the exact same behaviour via the linux client when uploading the same set of files.

While the n100 is far from a performance orientated cpu, i’d expect this to perform much better than it actually does, without causing system load to go high and affect everything else on the host.

debug logs haven’t really shown much to investigate either other than some “server performance low” messages, and I’ve not found anything useful with searches; propfind doesnt seem excessive, mariadb my.cnf has had a few tweaks without any improvement and the physical host runs fine for other tasks and is not overloaded.

question is, why is mariaDB so heavily loaded on SSD storage, with 1 client uploading reasonable sized files? i’d expect db load with many clients or lots of tiny files but this just seems wrong…

it’s hard to say without further troubleshooting. first guess would be - review performance optimization like redis and high-performance backend (notify_push) - especially the the first one is supposed to highly reduce DB load.

check out more advanced examples like the following if this work better than yours…