I've been going crazy for 2 days now and I'm asking for help.
I have a program developed in delphi (early 2000s about) that accesses a firebird v3 database, currently installed on the same machine (windows server 2016 x64 - db and program are x86).
The machine is a VM configured on vmware esxi, I come to the point: if I configure the VM with only 1 vCPU the program runs very well, if I also configure it with 2 vCPUs (1 socket and 2 cores) or more, the performance is halved.
The problem is that by leaving only one vCPU, the cpu is perpetually at 100% even just for windows server jobs (eg search for updates and other stuff).
Do you have any advice?
PS: I can't switch to firebird x64 because many libraries are x86.
PPS: The OS on the VM is Windows Server 2016 Standard ed
Leave the guest at one CPU. And document the reason in some notes about this guest in inventory.
Focus more on meeting application performance metrics, and less on misleading basic metrics like CPU utilization. Are interactive applications responsive? Do batch queries complete in an acceptable amount of time? If so, don't worry about CPU.
Edit: "Lock up" levels of poor performance was not in your original question, that is important context. Fixing that problem might be worth some extra effort:
If you fix the process affinity to a single core the other core will stay free for other processes. Depending on the actual scheduling problem, it might be necessary to fix the Firebird server to the same or the other core as well.
However, since ESXi virtualizes CPU cores as well it'll keep moving the vCPU cores across your physical cores. You might need to fix the VMs affinity to specific cores as well.
You should be aware that this kind of tuning is caused by badly coded or severely outdated software. You should seriously look into updating the code.
This is a know problem of FireBird.
I did manage some customers which are on FireBird for various software, and multhreading stat are hard to configure with the .conf, but first you must install Firebird with the settings you need for multicpu's use, classic server.
Don't forget the client app need the multithreadin safe library too if you want to be sure.
Thread-safe Client Library