Skip to main content

I would like to start a conversation about optimizing the performance of Acumatica ERP. This is a pretty general statement, as some processes or screens may require more heavy lifting than others, so there is of course no one-size-fits-all for performance tuning. With that said, let’s define performance as “the 80/20 rule for most users most of the time”. This means that most screens will load within 1 second, and most users will not be waiting more than a couple seconds for most processes to finish.

With that rather general benchmark as our guide, what has everyone found as being important to the performance of various aspects of Acumatica ERP? I have thrown some pretty serious firepower at this system (think $6,000/month bill on AWS for virtual Windows Server + high performance RDS instance). I have noticed with this particular setup, things are pretty fast most of the time. However, I still see lag, especially if the system has not been touched in a while (right now there are only 1-2 simultaneous users at a given time). So the question of course becomes, if we can throw $6k/month at the problem, and still see lag with 1-2 users, what happens when you add 100+ simultaneous users?

So I would like this to be a freeform discussion about which aspects of server performance impact which aspects of the system the most. For example, I have noticed that using NVMe drives has a pretty significant impact on performance. This suggests that fast disk is pretty important to the operation of Acumatica. Per Acumatica’s recommendations, I spun up my server with RDS on Amazon, and per our bill I think it’s probably pretty performance. However, putting the SQL Server on a dedicated server with NVMe disks may move the needle even more? Hard to say.

With that….I’ll let anyone else comment who might have some thoughts or suggestions. Keep in mind, I am not asking for performance tuning relative to hosted Acumatica. You are free to throw whatever server, Redis cache, whatever at the system to make it go. Assume you have total control over the stack. The exercise here is not performance tuning assuming an instance hosted by Acumatica itself. Also, assume the latest version of Acumatica.

 

 

@rosenjon Is this system just a demo version or an activated licensed instance? As far as I know depending on the license the number of the cores used by Acumatica is different, so I would suggest checking that.

 

Technically when the system is not touched for a while, and you see the lag in performance that means that most likely IIS dropped the application pool and just reloading the instance.

 

You can try to increase the Idle Time-Out.

 

 


Hi Samvel-

Yeah it’s a demo instance. Thanks for the info. I’ll see what happens when I play with the Idle Timeout.

If we make the Idle Timeout infinite, do you think this will cause issues?

https://stackoverflow.com/questions/3891178/how-to-prevent-extend-idletimeout-in-iis-7

 

Thanks,

 

Jonathan


@rosenjon Hi Jonathan,

 

I would actually give a try to that configuration.

 

In production environment the system most likely will restart only after weekend, unless there was some sort of a crash or a schedule on IIS to be restarted, so I wouldn’t be concerned about this loading “delay”. And if one/two users access the system during the weekend that means that most likely it won’t even restart.

 

Another reason why the system may work slowly maybe the SQL Server Cache being overloaded. For example, on our demo servers the default limit is set to 8GB from 16GB. As soon as SQL Server caches around 7.5-7.9GB it makes the server very slow till the moment the schedules restart the SQL Server.


Currently this particular server is using SQL Server on Amazon RDS with 32GB RAM. It is massive overkill for a dev environment (and comes with the price tag to prove it).

When you say on your demo servers, the default limit is set to 8GB, are you talking about a max memory setting in SQL Server itself? Or is there a configuration option in Acumatica to only consume a maximum amount of memory on the database?


The next RDS build I spin up, I am going to use one of the SQL Server instances that has NVMe storage for tempdb.

https://aws.amazon.com/about-aws/whats-new/2021/01/amazon-rds-for-sql-server-now-supports-tempdb-on-local-instance-store-with-r5d-and-m5d-instance-types/

It will be interesting to see if this moves performance at all.


This should maybe be a separate thread, but does anyone have insight into the settings for Acumatica’s cache? Do they run some kind of Redis type cache internally? Has anyone ever played around with where this cache is stored and tweaking its settings?


 @rosenjon I was talking about max memory setting of the SQL Server itself, I don’t remember any configuration in web.config of Acumatica for SQL Server’s memory.


@rosenjon The cache is handled by so PXCache<T> objects, which are basically C# classes for storing the collections of the specific type tables in memory. These PXCache<T> are specific to each PXGraph  and session, which usually represents a specific page.

Besides PXCache<T> Acumatica also has another mechanism for caching called PXDatabaseSlot.
Slots are not specific to any graph or session. You can access them from any graph at any moment.
They are also stored in memory and are dropped after any restart.

It is developed and maintained by Acumatica. I don’t think they currently have any separate/built-in server/service like Redis for caching.


Reply