The following sections describe multiple technical solution designs within a unified framework for SQL Server databases using Everpure solutions. They address distinct business needs through specialized architectures in the following areas:
-
Provisioning storage for SQL Server
-
Provisioning storage for user databases in public cloud virtual machine infrastructure using Everpure Cloud Dedicated
-
SQL Server native T-SQL backup and recovery workflows with FlashBlade file or object storage
-
SQL Server native T-SQL backup and recovery workflows with FlashArray file storage
-
SQL Server PolyBase data virtualization with FlashBlade object storage
Provisioning Storage for SQL Server
This solution is a high-level overview of how Everpure provisions storage for SQL Server databases. It is divided into separate technical layers that include compute, networking, storage, and instance optimization.
Compute Layer
This solution uses at least one host in its design of the compute layer. The required servers are commodity x86-64 architectures with a recommended minimum configuration for this reference architecture, as follows:
-
Four cores
-
4GB of RAM
-
Network cards/Ethernet adapters with at least 2 x 10Gb Ethernet ports for application traffic
-
Network cards/Ethernet adapters with at least 2 x 25Gb Ethernet ports for storage traffic (if using iSCSI, NVM Express over TCP, or Server Message Block/Network File System file storage)
-
Fibre Channel adapter with at least 2 x 16Gb Ethernet ports for storage traffic using Fibre Channel Protocol
Network and Fabric Layer
Network ports on the hosts should be bonded in any one of the following configurations:
-
Highest availability/lowest performance—active/passive (Mode 1)
-
Highest performance with no switch-side configuration—active load balancing (Mode 6)
-
Highest performance and highest availability—802.3ad/LACP (Mode 4)
It is strongly recommended that dual switches are used and configured with an interconnect between them for availability and performance. For high-performance use cases, the servers and storage should be connected to the same switches or have dedicated storage networking with no routing or hops between them.
FlashArray Fibre Channel Protocol recommendations include:
-
If host limits allow it, use all available Fibre Channel Protocol ports on FlashArray.
-
Use single-initiator, multi-target zoning, where one SQL Server instance acts as the initiator and targets multiple FlashArray devices. This will create multiple paths to a single volume.
-
Use consistent port speeds across the fabric for the best experience.
-
Verify that all network paths are clean; address any cyclic redundancy checks or other errors.
FlashArray iSCSI/NVM Express over TCP recommendations include:
-
Ensure that the maximum transmission unit is set consistently end-to-end.
-
Disable network adapter power management.
-
Verify all network paths are clean; address any cyclic redundancy checks or other errors.
FlashArray file services recommendations include:
-
FlashArray file services are built using physical Ethernet interfaces mapped to a virtual interface. Use a virtual interface to combine one or more physical ports on both controllers into a group for managing the storage network.
-
The FlashArray file services support page contains comprehensive details on how to configure and manage virtual interfaces.
FlashBlade networking considerations include:
-
FlashBlade network fabrics are built using link aggregation groups, subnets, and virtual network interfaces.
-
Link aggregation groups are aggregated physical uplinks that are used to optimize availability and load balancing.
-
A subnet is a virtual representation of a network range and its associated configurations, and it is bonded to a link aggregation group. Subnet settings include options for VLANs and maximum transmission units.
-
A virtual network interface is an interface that connects clients to specific storage protocols and is bonded to a subnet. A virtual network interface usually uses a dedicated static IP address, and it includes options for VLANs and maximum transmission units.
-
To avoid network bottlenecks, the best practice recommendation is to implement a link aggregation group capable of the same speed as the number of hosts times the speed of one network port on each. For example, if the servers have 2 x 25Gb Ethernet ports, then the FlashBlade link aggregation group needs to be capable of 100Gb/s minimum. All subnets and virtual interfaces should have the same maximum transmission unit configuration.
Storage Layer
SQL Server supports shared storage using block- or file-based storage. File-based storage on Windows Server uses the Server Message Block file protocol. Block-based storage can use Fibre Channel Protocol or iSCSI Ethernet protocols. Supported deployments of SQL Server on Linux operating systems can use NVM Express over Fabrics storage protocols and Network File System for shared storage and backup targets.
FlashArray
FlashArray block storage is ideal for SQL Server workloads that demand a unified storage solution along with high performance and low latency, such as transactional databases, data warehousing and analytics or mixed workloads.
The following best practice recommendations help ensure FlashArray is configured for optimal performance and reliability in SQL Server environments:
-
Place SQL Server data files (.mdf and .ndf) and log files (.ldf) on separate volumes to manage input/output more effectively.
-
Distribute data files across multiple volumes to balance the input/output load.
-
Align the file system and block size to avoid misaligned input/output, which can degrade performance.
-
Use a 64KB allocation unit size for NTFS volumes hosting SQL Server data and log files
Everpure Cloud Dedicated
When used for primary storage in SQL Server environments, Everpure Cloud Dedicated provides consistent performance and seamless data mobility across on premises, hybrid, and cloud environments.
The following best practice recommendations help ensure Everpure Cloud Dedicated is configured for optimal performance and reliability in SQL Server environments:
-
Place SQL Server data files (.mdf and .ndf) and log files (.ldf) on separate volumes to manage input/output more effectively.
-
Distribute data files across multiple volumes to balance the input/output load.
-
As TempDB is heavily utilized by SQL Server, make sure to provision low-latency volumes for these files.
-
Utilize space-efficient, easily captured volume snapshots for data protection, backups, and restores.
-
Use ActiveDR for asynchronous replication to a secondary site for disaster recovery that will not affect the performance of the primary site.
-
Use ActiveCluster to provide high availability for SQL Server, using zero and near-zero recovery point objective capabilities.
-
Use data encryption and access controls to secure data at rest. Regularly review permissions to ensure data security.
The figure below illustrates a high-level SQL Server architecture showing how Everpure Cloud Dedicated supports high-performance storage across diverse environments.
FlashBlade
FlashBlade overcomes many of the challenges posed by traditional data backup and recovery in SQL Server. FlashBlade offers high-frequency backups and rapid data recovery, making it ideal for scenarios involving high transaction volumes, critical data changes, and iterative dev/test environments.
The following best practice recommendations help ensure FlashBlade is configured for optimal performance and reliability in SQL Server environments:
-
Configure parallel backup and restore to enable high-frequency backups and minimize downtime during data recovery.
-
Use snapshots to create point-in-time database copies that can be used for fast data recovery without impacting performance.
-
Use high-speed network connectivity between SQL Server and FlashBlade and configure multiple network paths to facilitate storage redundancy and load balancing.
-
Format and organize data to enhance query performance. Use parquet or optimized row columnar file formats and configure volume partitioning to optimize data access.
-
Use the T-SQL query language to directly access FlashBlade, along with PolyBase to query external tables or the OPENROWSET function, enabling database integration and efficient processing.
-
Use PolyBase for fast access to large datasets stored as objects in S3 buckets.
The figure below illustrates a high-level SQL Server architecture using FlashBlade as a backup target.
Operating System Layer
Windows Server
The following recommendations should be followed for SQL Server using Windows Server:
Folder structure: Both virtual and physical disks can use either drive letters or mount points.
Make sure to provision specific locations for each database file function in alignment with the following examples:
-
SQL Server binaries: Install SQL Server on the operating system drive.
-
Data files: Do not place database and backup files on the same disk where the operating system and binaries exist. Do not put SQL Server data and log files on the root of a drive or a mount point. Do not create data files on the root of a file system in Windows Server. Use naming conventions for drive letters or mount points that make sense for that environment. The following are two examples of naming conventions:
-
Use a folder on the D drive, such as D:\DATA, or a mount point under the operating system drive, such as C:\SQL\DATA. All the data files can be in a single virtual disk, or each database can have a virtual disk provisioned for it (recommended) and then mounted under this structure.
-
The data files in "UserDB" would be placed in a virtual disk mounted at C:\SQL\DATA\UserDB or D:\DATA\UserDB.
-
-
Transaction log files: All transaction log files can be located on a single virtual disk, or each database can have a virtual disk provisioned for it (recommended) and then mounted under this structure. The following is an example of a naming convention:
-
Create a folder named LOGS on the L drive, L:\LOGS, or a mount point under the operating system drive, such as C:\SQL\LOGS.
-
The log files in "UserDB" would be placed in a virtual disk mounted at C:\SQL\LOGS\UserDB or L:\LOGS\UserDB.
-
-
TempDB files: Provision a single virtual disk to contain the data and log files for TempDB. Either T:\TempDB or a mount point under the operating system drive, such as C:\SQL\TempDB.
-
Spread database files across multiple volumes: If leveraging the FlashArray SQL Server Management Studio extension, the best practice structure for multiple databases uses a consistent deployment of data and transaction log files. Either place all the data and log files for multiple databases into a single volume/folder or use a dedicated volume for storing the data and log files of a single database. Avoid a multiple database structure that dedicates data files for each database to a separate volume/folder while placing transaction log files for multiple databases on a single volume/folder.
File system and disk formatting: Format all SQL Server volumes with the NTFS file system and a minimum of 64KB allocation units before placing any data on the disks.
Block alignment: Check if the block alignment is configured properly. See the "Windows Server File Systems FAQ for FlashArray" knowledge article for more information.
Antivirus and threat-detection systems: The minimum recommendation is to configure antivirus and threat detection so they exclude files with .mdf, .ndf, .ldf, and .bak extensions. Other folders and files might need to be excluded as well. For more information, see "Configure antivirus software to work with SQL Server".
Power plan: Set the power plan to high performance.
Instant file initialization: Enable instant file initialization as per "Database instant file initialization".
Page file size: Configure SQL Server with sufficient memory to avoid saving page files to disk. For more information, see "How to determine the appropriate page file size for 64-bit versions of Windows".
Linux
Linux is only supported as a platform from SQL Server 2017 onward. The following are best practice recommendations for SQL Server on Linux:
Folder structure: The default folder for all SQL Server data files is /var/opt/mssql. Default folders for data, transaction log, and TempDB files are created during installation:
-
Data: /var/opt/mssql/data
-
Log: /var/opt/mssql/log
-
TempDB: /var/opt/mssql/tempdb
TempDB files should be migrated to a separate virtual or physical disk to achieve the best performance. The virtual or physical disk can be mounted at the default TempDB location after the files have been migrated to it. Create separate folders for data and transaction log files for any additional user databases.
File system, volume formatting, and mount options: Format virtual disks with the XFS or EXT4 file systems and mount them with the "rw,attr2,noatime" attributes.
Open file limitations: Set a soft limit of 16,000 and a hard limit of 32,727.
Forced unit access input/output subsystem capability: For Linux operating systems that support this capability, configure forced unit access using the commands control.writethrough = 1 and control.alternewritethrough = 0.
Disk settings:
-
Input/output scheduler: Use the None scheduler for all virtual disks that contain SQL Server data files. For more information, see the "How to use the Noop or None IO Schedulers" solution page.
-
Disk readahead: Set the readahead setting to 4,096.
-
vm.swappiness: Set vm.swappiness to 1 for high-performance systems.
-
vm.dirty_*: Set vm.dirty_ratio to 80 and vm.dirty_background_ratio to 3.
-
kernel.sched_*: Set kernel.sched_min_granularity_ns to 15,000,000 and kernel.sched_wakeup_granularity_ns to 2,000,000.
More recommendations for Linux operating systems can be found on the "Linux Recommended Settings" page.
SQL Server Instance
A SQL Server instance is an installation of the database engine, which along with its associated services, is running in an operating system. A SQL Server instance is responsible for managing one or more user databases and several system databases. System databases are not shared between multiple SQL Server instances.
SQL Server databases consist of at least two file types:
-
Data files contain data and objects such as tables, indexes, stored procedures, and views. Data files can be either primary (with the .mdf extension), containing database startup information, or secondary (with the .ndf extension), containing optional user-defined data. Data files can be grouped together into filegroups for allocation and administration purposes.
-
Transaction log files (with the .ldf extension) contain the information required to recover all transactions in a database.
SQL Server parameters and configurations can be configured using:
-
SQL Server Management Studio: Use the graphical user interface to configure server and database settings.
-
PowerShell: Use command-line interface, scripting language, and cmdlets to configure server and database settings.
-
mssql extension: Use this command-line interface for T-SQL commands to set various parameters.
The following recommendations should be followed for configuring the SQL Server instance.
Service Accounts
Because most environments using SQL Server use Active Directory Domain Services, the SQL Server service accounts should use a domain-based service account. A Group Managed Service Account is recommended because the password is managed by Active Directory Domain Services. This means it is more secure. Ensure that this Group Managed Service Account user is the same one who has the correct permissions to the mount points or drive letters being used for the various SQL Server data, transaction log, and backup folders and files.
TempDB
For an initial configuration, create one TempDB data file per vCPU, up to eight cores. Ensure the files are evenly sized and grow capacity at the same rate. Know your usage of SQL Server to create the right TempDB configuration.
Optimizations
The following are best practice recommendations for optimizing SQL Server performance:
-
Set Max Memory to recommend 75% of server memory. There is no need to set the minimum value. Microsoft recently released recommendations on memory settings, and you can find more information about it in this guidance.
Note: There are always exceptions based on workload and features in use. -
Set Max Degree of Parallelism (MAXDOP) to less than or equal to the number of cores in a NUMA node of less than or equal to eight. This is an advanced setting. It is recommended that you read the Microsoft documentation before changing this setting.
-
The Cost Threshold for parallelism should be optimized while a workload is running, but start at a value of fifty.
-
Lock pages in memory, when set, can prevent external pressure to deallocate SQL Server memory processes.
-
Turn on accelerated database recovery (SQL Server 2019 and newer) to improve database availability, especially in the presence of long-running transactions.
-
Enable query store (SQL Server 2016 and newer) to collect and store information about query processing and runtimes. While query store should be enabled for most cases, test with your workloads to confirm optimal performance. Query store does not work in some scenarios, such as Always On Availability Group readable replicas.
-
Turn on ad-hoc workload optimization, which limits an execution plan from being cached until it is executed a second time. The first execution plan is saved only as a stub, which prevents memory bloat from too many execution plans being cached. Additional information can be found at the "optimize for ad hoc workloads (server configuration option)" page.
-
Turn on auto-update statistics asynchronously, which allows queries to continue executing during the update of index statistics.