This is a story of upgrading one of our clients from Microsoft Dynamics NAV 2013 to Microsoft Dynamics NAV 2016 (we recommended going to NAV 2017, but they didn’t want to be guinea pigs).
The upgrade itself was done on the customer’s live server, which was a brand new powerful server on VM (virtual) environment. During the upgrade, our developers complained that the performance on the live server was extremely slow. Initially, we thought it may have been the large amount of data (100 GB) that are being upgrade so we brushed it off.
When we went live, that’s when the performance on NAV got worst.
Researching on Google and the Dynamics NAV forums on performance issues with Dynamics NAV 2016 came up with nothing. Of all the researches, NAV 2016 should perform a lot faster, not slower.
We’ve tried reindexing, changing the settings on the Dynamics NAV service tier, changing the CPU cores, SQL tuning. Nothing worked.
The problem in the end was how the VM hosts were setup. It matters which host SQL Server and Dynamics NAV server were setup. The following VM configuration was how the server was setup:
The internal IT director put the Dynamics NAV server and the SQL Server on the same host on the VM and *poof*… All the performance problems went away. NAV was back running in blazing speed.
What was strange was that for NAV 2013, the SQL Server and the Dynamics NAV Server was running on different host and there were no performance issues.
When you’re in an VM environment, put the SQL Server and the Dynamics NAV server on the same host machine.
Upgrading to Dynamics NAV 2016 is nothing new for us. We’ve done quite a bit of the upgrades for companies but this issue baffled me a bit. The same structure used on NAV2013 did not work well on NAV2016.
Hopefully, if you read this, it will save you from some headaches that I’ve gone through.
15 thoughts on “Performance Problem in VM Environment for NAV 2016 and Beyond”
It looks to me really a network issue instead of NAV 2016 one.
Most likely the 2 new hosts are not connected properly, you will need to look at routing/switching level. use some bandwidth monitor tool you will be able to identify whether there is a problem easily
Thank you for sharing your experience.
However, when you investigated the problem have you checked the following points:
1-The network performance between your NAV Server and SQL Server?
2-Are the two VMs on the same host or different hosts?
3-The IO speed on disks used on the NAV Server? (disks on SQL Server seems to work perfectly as your workaround resolved the problem).
For point 1, the network performance depends on the VM solution (Hyper-V, VM Ware…)
I had read some comparisons for virtualization based on Hyper-V:
If you have a chance to go throw these areas please share your comments back.
We thought it was the network issue. But NAV 2013 was working under the same environment without performance issues. According to their IT administrator, they ran diagnostics on their network and everything checks out.
We have also had problems with virtual machines but not the problem you described but it could be the same anyway.
Jörg has described it in a blog article. I hope this could give you some more insight:
NAV/SQL is completely „stalled“ because of too many CPU Threads
Forgot to mention that we did a standard technical CU upgrade 2015, CU4 to CU23 and had to do a complete rollback after four hours.
This bad performance on two separate virtual servers occurs primarily, if the VMs are overloaded, i. e., if for example the physical machine has 16 CPU cores and each virtual server has been allocated 10 cores. The reason behind the resulting wait times is, that a VM is only working in time intervals, where all allocated CPUs are available.
CPU overcommitment is a real drama, like explained bij G. Hübner.
Having both SQL Server & NAV Server on the same host is a hughe improvement because the physical network layer is never addressed. Network traffic in such case is performed in memory.
Yes, I totaly agree with proposed suggestion. The network latency is mission critical for SQL – NAV virtual environment.
We could achieve from as low as 1000sql commands/s to approx. 5000sql commands/s from middle tier to data tier. That’s transatction response ratio of 10-times. We always test this parameter before production.
Someone knows if NAV 2017 and NAV 2018 have the same issue?
Yes, same issues applied to future versions.
Thank you for the share but I was confused on your terminology
You refer to them as separate hosts, but the vm host should be the physical server running hyper-v (or whichever virtualization software you use); that hosts all of the VMs inside of it. Did you mean that the SQL server and NAV app server were running on separate VMs and they needed to run on the same?
You can have separate physical servers running multiple VMs. I’m saying the VMs for SQL and NAV needs to be on the same host on one physical server.
Having SQL and the Service Tier on the same VM seems risky. Especially in larger shops. Can one VM server be configured to have the required memory for a 100+ GB database and 100+ user environment?
SQL and the service tier should be on different VMs! But put it on the same host is ideal.
How did this work out. Obviously likely still not on NAV 2016 any longer, right? The data datastore for the Host, what there just one datastore or multiple?