Sage running slow over network - A FIX

Posted by LiterallyPizzaSauce@reddit | sysadmin | View on Reddit | 32 comments

The fix:

The way that your hypervisor presents CPU's to the VM running Sage is important. You want to present them with as few sockets as possible. VMware ESXi with 8 CPU's allocated, change the VM CPU option to 8 CPU's per socket. Wa-la!

The situation:

I don't fully understand the "why" but someone here who is smarter than I am can probably explain.

I work at a small MSP and was recently transferred a client that has had an issue with Sage 100 Contractor for the past 6 months. They added Sage Paperless to the equation and ever since then, running Sage from anything other than the hosting server ran like absolute dog shit. They could RDP to the Sage server and get good performance but there were other issues with that which made it annoying to use. The previous admin, our engineer, and others were never able to get it back up to pre-Paperless speeds.

Paperless got moved off the base Sage server to its own VM in an effort to restore performance but that didn't help. I don't know what other troubleshooting had been done but I just know none of it worked. I decided to treat the Paperless integration as a red herring and explore other options.

I asked the client to run some reports while I watched task manager on the server to see if anything obvious came up. Whenever the client ran a report CPU0 would just get fuckin slammed and the other 7 cores were just chillin. I checked the CPU affinity for the process and they were all allowed. I took away CPU0 and then CPU1 just gets fuckin slammed like his friend did while the other 6 just went on break. Okay so Sage is only using a single core to run reports, no wonder it's not working well. I contacted Sage support and you know how that goes so I start digging more. I watched resource monitor and noticed that sqlserver.exe was the chonker of a process while running reports. So why didn't sqlserver.exe use the rest of the cores?

I start looking around on Google for reason why SQL servers would only use a single core. I find a thread from some developers, probably making something fuckin sweet, talking about how they allocated 16 cores to their SQL process but the config showed that only 4 were online. A comment on that thread mentioned that Microsoft SQL server license tiers limit how many CPU's can be used. So I go check Sage and see that it includes SQL Server 2019 Standard, which allows for like 2 CPU's (although it really seemed to be using only one). I go look at Vsphere and see that Sage is set up with 8 CPU's in 8 separate sockets. No shit. So I tell the user I need to shut down the server for a sec. I changed the 8 CPUs on 8 sockets to 8 CPUs on 1 socket because the fucker was only using one "socket" as it was. Booted back up and told the client to run something real quick. The message I got back was in caps lock.

This information doesn't exist online in this context yet the issue exists because I saw it unsolved over and over again. Hopefully someone who needs this information finds it and becomes a hero. Go forth and condense your CPU's into fewer sockets.