Skip to main content

AMD-Based SQL Server Day One Best Practices

Oct 6, 2026
AMD-Based SQL Server Day One Best Practices

Performance Best Practices

VMware ESXi: Round Robin Path Policy

Round Robin path policy defines how to balance I/O load across active storage paths. In this best practice, we changed the Round Robin path policy to optimize performance. 

Category

PowerMax Storage

Product

VMware ESXi

Type of best practice

Performance Optimization

Day and value

Day 1, Highly Recommended

Overview

At the hypervisor layer, ESXi controls the flow of data to and from the server. There are several configuration choices, including Most Recently Used (MRU), Fixed, and Round Robin. In this best practice, we made changes to the Round Robin path policy to optimize data path usage between the PowerEdge servers and the PowerMax storage. 

Round Robin automatically rotates through all available paths to distribute the data flow. As PowerMax has all active paths to storage, Round Robin rotates data across those pathways. By default, Round Robin sends 1,000 I/O operations across one path before using the next path. In this best practice, we change the default of 1,000 to 1. With a Round Robin IOPS limit of 1, the paths to storage are rotated more frequently, thus providing a positive impact upon storage performance. 

Recommendation

Changing the Round Robin Path Policy to 1 showed a significant improvement in these performance metrics:

  • New Orders per Minute (NOPM) 
  • Transactions per Minute (TPM) 
  • Server CPU utilization
  • PowerMax IOPS 
  • PowerMax Average Read Response Time
  • PowerMax Average Write Response Time
  • SQL Server Total Reads
  • SQL Server Total Writes
  • Batch Request per Second

NOPM and TPM significantly increased compared to the prior test, indicating that the change to the Round Robin path policy improved performance. 

An increase in PowerMax IOPS indicates more efficient use of I/O paths to storage. Optimal path usage benefits the database as the response times for reads and writes decrease. 

Server processor utilization can be impacted by default settings that are not optimized. In this case, the default Round Robin setting of 1,000 I/Os before moving to the next path was impacting performance. Changing the Round Robin setting to 1 I/O before moving to the next path resulted in a more frequent path switch rate, thus improving performance. An increase in server CPU utilization indicates less storage wait time and more efficient processor utilization.   

PowerMax IOPS significantly increased, indicating that optimizing Round Robin multipathing enabled storage to process more I/Os per second. Both the PowerMax average read and write response times decreased. The combined increase in IOPS and the decreases in response times means that databases can process greater volumes of data at a faster rate. 

SQL Server total reads and writes both increased, indicating that the change to the multi-path policy enables greater I/O. Batch Requests per Second also saw a significant increase in T-SQL command batches completing.  

Overall, the best practice of changing the Round Robin path policy from 1,000 I/Os to 1 is highly recommended and should be considered as a Day 1 practice as part of initial data provisioning. 

Implementation Steps

To configure Round Robin I/O operations from 1,000 to 1, login into the ESXi console and run the following command:

for i in `esxcfg-scsidevs -c |awk '{print $1}' | grep naa.xxxx`; do esxcli storage nmp psp roundrobin deviceconfig set --type=iops --iops=1 --device=$i; done

Verify the change with the following command:

esxcli storage nmp device list

Additional Resources

This best practice was referenced from VMware Multipathing policies in ESXi/ESX and Adjusting Round Robin IOPS limit from 1000 to 1. 

PowerMax: Adding Storage Groups

How storage is configured can directly influence database performance. This best practice validates the number of storage groups required to optimize database performance. 

Category

PowerMax Storage

Product

PowerMax

Type of best practice

Performance Optimization

Day and value

Day 1, Highly recommended

Overview

To determine if a best practice provides value, we tested it against a baseline configuration of the database to validate performance. All database files for the first of four databases were located under the parent storage group ParsleyDB1.  The name of the best practice program was Parsley so the same name was used for the databases. By incrementing the number in the parent group name, ParsleyDB<#>, the Database Administrator (DBA) team created three additional copies of the first database for load tests. This storage configuration minimizes the number of PowerMax storage groups, which eases management but is not an optimized configuration. The following table shows the baseline storage group configuration:

Table 1: Baseline storage group configuration

 

Parent storage group

Child storage group

Number of LUNs

VMware volumes

Volume size (GB)

Notes

ParsleyDB1

 

1

Parsley_DB1

750

All database files

ParsleyDB2

 

1

Parsley_DB2

750

All database files

ParsleyDB3

 

1

Parsley_DB3

750

All database files

ParsleyDB4

 

1

Parsley_DB4

750

All database files

Using multiple storage groups for the most active portion of an SQL Server database has many benefits. The primary benefit of using multiple storage groups is that the operating system creates an I/O queue path per storage group. The following table shows the optimized PowerMax storage configuration for the SQL Server database: 

Table 2: Optimized PowerMax storage configuration

Parent storage group

Child storage group

Number of Volumes

VMware volumes

Volume size (GB)

Notes

ParsleyDataDB1

Data

4

DB1_Data1

300

Data files

DB1_Data2

300

 

DB1_Data3

300

 

DB1_Data4

300

 

Log

1

DB1_Log1

300

 

ParsleyTempDB

 

Data

4

TempDB1_Data

300

 

TempDB2_Data

300

 

TempDB3_Data

300

 

TempDB4_Data

300

 

Log

4

TempDB1_Log

250

 

TempDB2_Log

250

 

TempDB3_Log

250

 

TempDB4_Log

250

 

 

The goal of the optimized configuration was to expand the number of child storage groups to create more I/O paths, thereby optimizing storage performance. In terms of the naming convention, two large storage groups were created: ParsleyDataDB1 and ParsleyTempDB. 

  • Under the parent group ParsleyDataDB1 there were two child groups. 
    • On the Data volumes four VMFS volumes were created
    • On the Log  volumes there was one VMFS volume created
  • Under the parent group ParsleyTempDB there were two child groups
    • In the Data  volumes four VMFS volumes were created
      • The naming convention uses was TempDB<n>_Data
        • The <n> indicate the database.
    • In the Log volumes four VMFS volumes were created
      • The naming convention uses was TempDB<n>_Log
        • The <n> indicate the database.

Compared to the baseline storage group configuration, the optimized storage configuration has one more parent group and four more child storage groups. The optimized storage configuration improves the number of I/O paths and also benefits actions like performance monitoring, storage snapshots, and replication. In terms of monitoring storage, the enterprise will have the ability to view metrics for each part of the database with the optimized configuration. This provides the capability to continually scale capacity and performance as the database grows.

Not all parts of the SQL Server database are needed for snapshots. Using this optimized configuration, the DBA can granularly select what to snapshot, which saves storage capacity. The same is true with storage replication, as the DBA can select the parts of the database that require protection. By replicating only part of the database, the enterprise benefits from using less network bandwidth. 

Recommendation

Results from validating the best practice of adding additional storage groups showed a significant performance improvement. The following metrics showed significant performance gains:

  • New Orders per Minute (NOPM) 
  • Transactions per Minute (TPM) 
  • PowerMax IOPS 
  • SQL Server Total Reads 
  • SQL Server Batch Requests per Second (BRPS) 

The following metrics showed minor performance gains:

  • SQL Server Total Writes
  • PowerMax Average Read Response Time
  • PowerMax Average Write Response Time
  • Server CPU utilization

Test findings showed that the PowerMax storage array served substantially more IOPS with the optimized storage configuration. The SQL Server total read and write performance metrics are related to total IOPS. As this OLTP workload is weighted heavily on reads, the expectation is to see a healthy increase in the SQL Server total reads. Results show total reads substantially increased, which aligns with the increase in total IOPS. 

The average read response times increased as the volume of reads increased. Generally, an increase in read response times indicates a potential performance issue. However, in this case the number of reads per second is a better indicator of overall performance. The PowerMax array was able to support more reads per second with the optimized storage configuration, indicating that performance increased. 

SQL Server total writes showed a minor performance increase. This is because the OLTP workload did not generate enough writes to show a marked improvement. As there were significantly fewer writes, the PowerMax response time for writes increased very slightly.  

The overall IOPS and read performance increases accelerated TPM and NOPM. Both TPM and NOPM saw substantial performance improvements with the optimized storage configuration. 

Batch Requests per Second (BRPS) is a counter that records the number of T-SQL command batches received by the database engine. In testing the optimized storage configuration, the results showed that the number of BRPS that the database engine received increased. The increase in BRPS was similar to the increases in Transactions per Second and New Orders per Second. 

Finally, the test results showed a minor increase in CPU utilization. This was likely due to the increase in storage performance and may indicate that the processors are more effectively utilized. 

Implementation Steps

Perform the following steps to create volumes on PowerMax:

  • Navigate to the Storage group sub-section within the Storage section of Unisphere. Click “Create”.
  • On the screen that appears – describe the number of Volumes and Child groups within this new Storage Group with the “+ “toggle as visible in the screen shot below:

  • Click “NEXT”. 
  • Select the hosts to map to as seen in the screen shot below:
  • Click “NEXT” to select the Port Group(s) for the target Host.

  • Click “NEXT” and subsequently “FINISH” to complete creation of storage groups and volumes as required. 
  • Repeat these steps as required for each storage group.


Creating A VMFS Datastore:

Once storage groups and volumes are created on the PowerMax, create respective VMFS datastores on the vSphere client by following steps mentioned here.  

When the disks are attached and visible on the OS, run the following script to mount all the disks onto the system.

cat post_mssql.sh

#!/bin/bash -e

#

#

# Post install script for RHEL Server 7.6

# created by Mahesh Reddy

 

##################################

# Start RHEL_DISK Configuration script #

##################################

 

#Current Partition list

echo current parttion list....

cat /proc/partitions

 

#Make partition and create ext4 filesystem using parted

echo creating parttion using parted....

for disk in /dev/sd{b,c,d,e,f} ; do

echo $disk

 parted   $disk mklabel gpt

 parted   $disk mkpart primary 2048s 100%

 partprobe $disk

 mkfs.xfs ${disk}1

done

 

#Create directories

echo creating all required directories....

rm -rf /opt/db/*

sudo mkdir -p /opt/db/{data1,log,backup,tempdata,templog}

 

#Get the UUID number for each device

echo getting the all UUID numbers....

for disk in /dev/sd{b,c,d,e,f} ; do

if [[ "${disk: -1}" == "b" ]];then

   mntp='/opt/db/data1'

elif [[ "${disk: -1}" == "c" ]];then

   mntp='/opt/db/log'

elif [[ "${disk: -1}" == "d" ]];then

   mntp='/opt/db/backup'

elif [[ "${disk: -1}" == "e" ]];then

   mntp='/opt/db/tempdata'

elif [[ "${disk: -1}" == "f" ]];then

   mntp='/opt/db/templog'

else

   echo "wrong disk"

   exit

fi

UUID=`blkid ${disk}1 |awk '{print $2}'|sed 's/"//g'`

sed -i "/$UUID/d" /etc/fstab

echo "${UUID}       $mntp  xfs auto,user,rw 0 0" >>/etc/fstab

done

 

#change ownership to below directories

echo changing ownership to below directories as   msssql...

chown mssql:mssql /opt/db/{data1,log,backup,tempdata,templog}

 

#Mount the all directories

echo mounting all directories....

mount -a

export PATH=/opt/mssql/bin:/opt/mssql-tools/bin:$PATH

 

Additional Resources

This best practice was referenced from the Deployment Best Practices for SQL Server Database with Dell EMC PowerMax. 


 


 



PowerMax: Storage Directors Ports and Interface Emulations

The two validation tests for the PowerMax Storage Directors were combined into one best practice. The first test involved configuring the PowerMax Director to use only those interfaces used by the business. The second test involved increasing the number of front-end connections to improve bandwidth between the PowerMax storage and PowerEdge servers. These best practices were combined as they both apply to configuring the PowerMax Directors. 

Category

PowerMax Storage

Product

PowerMax front-end connections 

Type of best practice

Performance Optimization

Day and value

Day 1, Highly recommended

Overview of Optimizing Director Interfaces

PowerMax storage arrays use bricks that enable customers to add power, performance, and capacity to an existing array. Each PowerMax brick has two engine directors. These directors support multiple functions including front-end I/O modules. The front-end I/O modules provide connectivity to the array using various interfaces including Fibre Channel SCSI, Fibre Channel NVMe, iSCSI, and others. In the best practice validation tests, we used only the Fibre Channel interface, thus providing the ability to disable unused interfaces such as Fibre Channel NVMe and iSCSI. 

Unused interfaces on the directors consume processor resources even if running in an idle state. By disabling interfaces, the business can direct more processing power to the interfaces that are heavily used. The goal is to optimize the director interfaces to support only those used by the business, thus optimizing performance. 

The origin of this best practice is from Dell EMC support. We highly recommend working with support to validate whether this director interface optimization will work for your business.

Overview of Adding Director Front-end I/O Modules

There are four front-end I/O modules per director. In the baseline configuration, we used one of the total four front-end I/O modules/director. The following table shows; each port 1 of the four directors was used. The two other front-end modules on director 4 were reserved for replication. Each front-end module was a 32 Gbps Fibre Channel connection and the baseline connection consisted of six modules. 

Table 1: Directors and front-end I/O modules used

Director number 

Port number

Connected

HBA number and port

1

1

Connected

HBA 1, Port 1

2

 

 

3

 

 

4

 

 

2

1

Connected

 HBA 1, Port 2

2

 

 

3

 

 

4

 

 

3

1

Connected

HBA 2, Port 3

2

 

 

3

 

 

4

 

 

4

1

Connected

HBA 2, Port41

2

 

 

3

Reserved for replication

 

4

Reserved for replication

 

For this best practice, we added one front end I/O port (2) on each director for a total of eight connections to the server. The following table shows the ports that were added (marked in light gray): 

Table 2: Directors and ports added

Director number 

Port number

Connected

HBA number and port

1

1

Connected

HBA 1, Port 1

2

Connected

HBA 2, Port 3

3

 

 

4

 

 

2

1

Connected

HBA 1, Port 2

2

Connected

HBA 2, Port 4

3

 

 

4

 

 

3

1

Connected

HBA 1, Port 1

2

Connected

HBA 2, Port 3

3

 

 

4

 

 

4

1

Connected

HBA 1, Port 2

2

Connected

HBA 2, Port 4

3

Reserved for replication

 

4

Reserved for replication

 

The additional front-end ports used in this best practice showed the greatest improvement of all the storage recommendations. Doubling the connections to the database server provided substantial improvements. 

Recommendation

The combination of the PowerMax Directors in two tests, removing unused interfaces, and connecting additional front-end I/O modules provided a substantial performance boost. Performance improvements were shown in the following metrics: 

  • New Orders per Minute (NOPM) 
  • Transactions per Minute (TPM) 
  • Server CPU utilization
  • PowerMax IOPS 
  • PowerMax Average Read Response Time
  • PowerMax Average Write Response Time

Both TPC-C metrics (NOPM and TPM) showed a substantial improvement: the number of orders completed and transactions processed increased significantly. Correspondingly, array IOPS also increased significantly. The PowerMax average read and write times dropped significantly, indicating faster responses from storage. 

Server CPU utilization increased, which is a positive indication of more efficient use of the cores in the server. Until this best practice was implemented, processors were likely waiting on read and write I/Os from the storage array. Now that the average read and write response times are faster, the processors are processing more data and so are being more efficiently used. 

Overall, the best practice of adding PowerMax directors and front-end I/O modules and disabling unused interfaces in the director can significantly improve performance. We recommend implementing this best practice as a Day 1 activity, as it is a highly recommended configuration that optimizes database performance.   

Implementation Steps

  • To remove unused partitions, login to the Unisphere console with appropriate credentials:

  • Select the storage and navigate to the System panel and navigate to Hardware
  • Click on the Manage Emulation button:

  • Click Remove Director Emulation, click “NEXT”. Select the emulation to be removed on the next pane. Review your changes and click “FINISH”. 
  • If there are no conflicts, the change should go through. If you encounter any errors in need of rectification, please contact PowerMax support.   
  • To add front-end FC I/O ports to directors, firstly make the required FC connections from the storage ports to the switches and zone them appropriately, that is, make sure the updated zoning maps the new ports to the host (server) ports. Please contact DellEMC Connectrix support for any issues for the same. 
  • Once zoned, navigate to the Hosts pane in the Unisphere and select the sub-option for Port Groups.
  • Select your port group and click the Modify button. Select the ports to add to the port group and click on the arrow button next to “ADD TO JOB LIST” and click Run Now:

Additional Resources

This best practice was referenced from the Deployment Best Practices for SQL Server Database with Dell EMC PowerMax.