Home > Workload Solutions > SQL Server > Guides > Implementation Guide—SQL Server 2019 Best Practices on PowerStore > Virtual machine setup and configuration
To achieve a meaningful test result for a single R750xs server, we ran six virtualized databases in parallel. After several tests using HammerDB and an OLTP workload, we developed a baseline configuration. Table 5 shows the vCPU and memory allocation for each virtualized database:
Resource reservation | Baseline configuration per virtual machine | Total across six virtualized databases |
vCPU | 10 cores | 60 cores |
Memory | 112 GB | 672 GB |
A VMware reservation is a guaranteed allocation of CPU or memory for the virtual machine. In the case of vCPU, each virtual machine received a ten-core reservation. With six total virtualized databases, the total vCPU reservation was 60 cores on the server (six virtual machines each with ten cores). The PowerEdge R750xs servers are two-socket servers. In the configuration for our tests, we used two Intel® Xeon® Gold 6338 CPUs. Each Intel® CPU has 32 cores, thus there was a total of 64 physical cores. The total of 60 vCPU across the six virtual machines, resulted in a total of four unallocated physical cores which can be consumed by the hypervisor.
While the virtual machines used most of the physical cores by default, the PowerEdge R750xs servers enable logical processors. When logical processors are enabled, the hypervisor presents twice as many processor cores. In our configuration, the 64 physical processor cores are presented as 128 cores (64 x 2). Logical processors can boost performance by enabling more executions in parallel. In the case of our six virtual databases, we used nearly half of the available processor resources: 60 processor cores were reserved, and 128 cores were available.
The memory configuration per virtual machine included a reservation of 112 GB. With a total of six virtual machines, a total of 672 GB of memory was reserved. The total memory available in the server was 1 TB, meaning the virtual machines used almost three-fourths of the available physical memory in the server. The goal in allocating memory to each virtual machine was to ensure each VM fit into a physical non-uniform memory access (NUMA) node. NUMA refers to a multiprocessor configuration in which each physical CPU has a dedicated memory bank. Information can be retrieved faster from the local memory bank than having to pull the data from another memory bank. When a virtual machine’s memory spans two memory banks, wait times are incurred, causing sub-optimal performance.
To prevent a sub-optimal NUMA design, each virtual machine was allocated 112 GB of memory, thus enabling the use of only the local memory bank. The VMware ESXi hypervisor is responsible for the placement of memory on a processor and has been designed to optimize performance. By reserving memory that enables the virtual machine to use a local memory bank we optimized performance for all the virtual machines on the server.