Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.


I am working on a virtual machine that runs SQL Server Express (as part of Sage Line 50 Manufacturing). The details are as follows:

Physical Server (host machine)
- Intel Xeon Quad Core 2.1GHz
- 4GB RAM
- VMDK image stored on RAID-5 500GB SATA drives (7200RPM)
- Running Ubuntu 10.04 Server 64 bit
- VMware Server 2

Virtual Machine
- Windows Small Business Server 2003
- Allocated 2 vCPU's and 2GB RAM
- Using 100GB pre-allocated flat VMDK file

The problem I have is that there is process that runs in SQL Server that is CPU intensive. On the old physical server that we migrated to the virtual machine from, this would utilise both CPU cores so the sqlserver.exe process would be running 100% on each of the CPU cores. On the virtual machine, it only seems to use one of the two CPU cores, meaning that the process is much slower to run.

Question
Is there a way to force SQL Server (sqlserver.exe process) to use both of the CPU cores, and distribute it's load between them? Is this a VMware setting that needs changing to allow processes to use both cores?

share|improve this question
add comment

2 Answers

up vote 5 down vote accepted

I dont have much experience with the MS SQL Express Databases on virtual machines but I think you just ran into the hardware restrictions of the MS SQL Express Edition.

I assume that your physical server had 1 cpu with 2 cores. The MS SQL Express 2008 (and I think 2005 also) do support only ONE phyisical cpu but mulitple cores.

A VM recognizes each vCPU's as a single CPU and not as an additional core. So the sqlserver.exe process is limited to 1 vCPU.

share|improve this answer
1  
Yes I agree, I am pretty sure this right here is the exact issue. –  Charles Jun 9 '10 at 13:35
1  
The problem is definitely the Express edition. As of SQL Server 2008 R2, Express may only use 1 CPU, 1GB of memory, and a database size of 10GB (4 GB for 2005 and 2008 express). microsoft.com/sqlserver/2008/en/us/editions.aspx –  Evan M. Jun 9 '10 at 13:50
1  
Yep, you've hit the nail on the head. The old CPU was a single CPU dual core. Are there any methods to make VMware see the CPU's as cores instead of physical CPU's? If not, can the SQL Express edition be hacked in any way to remove the restriction? –  fistameeny Jun 9 '10 at 14:42
    
....Or, do any other virtualisation softwares (e.g. VirtualBox) treat CPU cores as CPU cores, not physical CPU's? –  fistameeny Jun 9 '10 at 14:49
    
I don't think you'll have much success with the attempt to get MS SQL Express working with mutliple cpu's. These limitation will be hard to break if not impossible Maybe you're lucky with virtualbox in the user manual (chapter 3.4.2) they're talking about multiple virtual cpu cores and not cpu's itself: On the “Processor” tab, you can set how many virtual CPU cores the guest operating systems should see. Starting with version 3.0, VirtualBox supports symmetrical multiprocessing (SMP) and can present up to 32 virtual CPU cores to each virtual machine. –  grub Jun 9 '10 at 15:11
show 4 more comments

In vSphere (and this may not be applicable to VMware server but might be useful to people who stumble across this answer) you can change the number of "cores per socket" presented to a VM to accurately reflect multi-core (or hyper-threading) CPUs.

See this article: http://www.virtualizationbuster.com/?p=132

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.