We used the following design principles and best practices to create the database VMs for the SQL Server databases.
We recommend using multiple SCSI controllers of type VMware Paravirtual to optimize and balance the I/O for the different SQL Server database hard disks, as described in this section.
The following table shows the recommended SCSI controller design for the OLTP and snapshot database VMs. The DATA and LOG disks are distributed across separate dedicated SCSI controllers because in a SQL Server OLTP workload both types of disks generate a high level of I/O to the storage. On the other hand, the TEMP database disks generate relatively little I/O and can, therefore, exist together with the operating system volume on a separate dedicated SCSI controller.
Table 37. SCSI controller properties in the OLTP and snapshot database VMs
Controller |
Purpose |
SCSI bus sharing |
Type |
SCSI 0 |
Guest operating system disk, tempdb data and log disks |
None
|
VMware Paravirtual
|
SCSI 1 |
SQL DATA disk 1 |
||
SCSI 2 |
SQL DATA disk 2 |
||
SCSI 3 |
SQL log disk |
The following table shows the recommended SCSI controller design for the DSS database VM. DSS workloads generate mostly read I/O to the DATA disks, with little I/O to the log disks. Also, tempdb usage increases significantly during DSS workload and can generate a significant amount of I/O. Because of this, as shown in the following table, the DATA disks and tempdb volumes are distributed across the three dedicated SCSI controllers for load balance, while the operating system, tempdb log, and DSS database log disks are located together on the first SCSI controller.
Table 38. SCSI controller properties in the DSS VMs
Controller |
Purpose |
SCSI bus sharing |
Type |
SCSI 0 |
Guest operating system disk, DSS database log, tempdb log disk |
None
|
VMware Paravirtual
|
SCSI 1 |
SQL data disks 1 |
||
SCSI 2 |
SQL data disks 2 |
||
SCSI 3 |
Tempdb data disks |
All virtual hard disks for the VMs were created as VMFS6 datastores. Each datastore was then assigned to its respective VMs.
We left all the vCPU and vMem properties in all the SQL Server database VMs at their default values except for Memory Reservation. We allocated different quantities of vCPUs, vMems, and memory reservations to the different types of database VMs. For details about the values that we allocated during the testing of each of the use cases, see Table 2 and Table 7.
We added two virtual network adapters to each of the database VMs: one for in-band VM management and one for SQL Server public traffic. We configured the two adapters with the recommended type setting of VMXNet 3. For details about the configuration of virtual switches and physical adapters, see Compute and network design in Appendix B.
For each VM, under VM Options advanced settings, we added the disk.enableUUID configuration parameter and set its value to TRUE. This setting ensures that the VMDK always presents a consistent disk UUID to the VM.
To install and configure the Red Hat Enterprise Linux 7.6 guest operating systems, see the VMware document Installing and Configuring Linux Guest Operating Systems.
While configuring the Red Hat Enterprise Linux 7.6 guest operating system for SQL Server, we performed the following tasks:
To install and configure the SQL Server 2017 standalone database, see the following instructions from Microsoft: Quickstart: Install SQL Server and create a database on Red Hat.
After we installed SQL Server 2017 on Red Hat Enterprise Linux 7.6, we performed these configuration changes: