
When you set up a Windows Server, you might be tempted to add a bunch of roles, just in case you want to use them in the future. Don’t do it: things can get weird.
If you add the Hyper-V role to Windows Server 2012 and higher, it changes some things about how Windows behaves. Your server is now a host. And the host starts to behave in some ways like a virtual machine — it’s now the “Parent Partition”, which is a “quasi-virtual machine”.
There are limits to the number of logical processors that any virtual machine partition might see, so if you have more than 64 logical processors, this can limit what’s available in the Parent Partition / host operating system, and really confuse you.
When SQL Server starts up, it checks to see if you’re virtualized. If the Hyper-V role is enabled, it will think it’s running in a VM. This could end up in a sticky situation if you have a licensing audit and hyper-threading is enabled — you’re supposed to license all the logical processors in a virtual machine regardless of hyper threading.
But good news, this is an easy problem to solve:
- Don’t install the Hyper-V role “just in case” on a SQL Server
- If someone else sets up your SQL Servers, check the installed roles before going live
- Don’t ever design an architecture where a Hyper-V host does double-duty and is also a SQL Server
- If you log onto a Hyper-V host, look at ‘Logical processors’ to see the total count (‘Host logical processors’ may be lower)
2 Comments. Leave new
The “Parent Partition” in Hyper-V really isn’t a server at all. It is not guaranteed memory nor CPU resources!! It really is a VM itself, with no resources assigned to it.
Adding VMs to the server take real resources away from SQL and you will have a bad time trying to anything with SQL installed directly on a hypervisor. Install it in a VM to guarantee those resources.
I’d change bullet #1 to “Don’t install the Hyper-V role EVER on a SQL Server”!!!
Haha, that’s totally fair that it’s not ever a good idea (and actually what I meant).
I believe the main cause of this happening is if the team setting up the server isn’t really clear on what it’s going to be used for, which might be true in the case of some hosting providers.