Hi Rheinhard,
so I understood that the performance issues are mainly for users using the task list? In this case, I think the authorization checks might cause stress on the DB. We have a fix prepared for Operaton 2.2, released later this year, maybe this can already help a bit, we sped up some queries regarding task authorizations.
I think your installation is quite big, although I have seen and worked with Camunda / Operaton instances that were 4-5 times the size. So I’d say a 4 out of 5. Not trivial anymore, but I’d not expect a big performance degradation, yet – especially, when relying on many external tasks and few jobs. (P.S: You are running a quite large system, if you are happy with Operaton and if your migration from Camunda was smooth, we are always happy about a short writeup, LinkedIn or Blog Post or if the project could name you as a reference!)
You are right, the job executor handles everything that is asynchronous in your process instance, maybe timer intermediate events and manually “Asynchronous Before” and “Asynchronous After” transactions. So from your description I don’t think this could be an issue.
The history time to live seems healthy to me, but if I do a rough estimate, this means that every process instance has ~1,5MB of data. Do you by any chance store BLOB data in the process a lot, serialized classes or serialized JSON? Does not point to an issue, but if your process instances are more lightweight, maybe this means vacuum in Postgres is not aggressive enough and rows which are already deleted in your database are still in the storage until the vacuum job gets to them.
I also understand that 32GB database instances in a shared Kubernetes cluster can hurt and cause discussions, especially in a replicated setup, I would check, which default settings are still applied in postgres and if there is something that can be optimized. I once worked for a client who had 128GB RAM for their PostGres and it didn’t perform, on site we realized that the shared_buffers were still set to the default 128MB(!), so every index scan went to the disk instead of keeping the indexes in memory. Other candidates I’d check are effective_cache_size, work_mem, maintenance_work_mem. For vacuuming, the property autovacuum_vacuum_scale_factor is interesting, default is 0.2, meaning that a 100.000.000 rows table will only be vacuumed if 20.000.000 dead tuples are in it. That can bloat your DB. Not to be misunderstood, I’m not claiming that you misconfigured Postgres and that’s the reason for the slow engine performance, but I usually check these Postgres settings first, before trying to optimize anything on the engine-side.
Additionally I’d try to analyte the queries which were flagged by Solarwinds manually with EXPLAIN PLAN on the prod instance. If from the explain plan you can see that additional indexes could be helpful, this was always allowed, even by Camunda support (after checking back). If you see that indexes should be available, but Postgres opts to a full table scan or other mechanisms instead of using the indexes, there might be a misconfiguration in the database preventing the db from storing the indexes in the memory, properly.
Unfortunately, I think that’s all I can recommend from remote-debugging in a public forum with that information. If you have any additional questions, feel free to follow up, but verfiying database performance is not that easy. If you feel that you need additional eyes on the system, check if one of the partners on operaton.org is available for that.
I’d also be open to performance improvements on the engine. If you can create a ticket in our GitHub issues with a specific UI Operation that takes a long time and specific runtimes for the DB queries of that Operation, we can try and replicate and maybe improve the performance here.