<<

Microsoft SQL Server 2012 Reference Architecture Rob \barkz\ Barker, Solutions Architect Version 1.0 Version 1.0

Table of Contents 3 Executive summary 3 Goals and objectives 3 Audience 3 Summary of findings 4 Pure Storage Introduction 6 Reference Architecture Design Principles 7 Configuration Overview 14 Host Management 17 Disk Management 27 Microsoft SQL Server Installation 38 Configuring TempDb 39 Backup & Recovery 43 Conclusion

© Pure Storage 2011 | 2 Executive Summary

This document provides a reference architecture for deploying Microsoft SQL Server 2012 on the Pure Storage FlashArray. This document includes planning recommendations, configuration best practices as well as performance findings. This reference architecture has been validated against:

Server 2012 R2, Data Center Edition (64-bit)

 Microsoft SQL Server 2012 Enterprise (64-bit), Service Pack 1

 Pure Storage FlashArray 420 (FA-420)

 Purity Operating Environment 4.0.0

Although this reference architecture has been validated against Microsoft SQL Server 2012, previous versions such as SQL Server 2008 and SQL Server 2008 R2 Service Pack 1 are supported. Goals and Objectives

A key tenet with Pure Storage FlashArray is the simplicity of management and this document is intended to demonstrate how easily Microsoft SQL Server 2012 can be deployed and managed on a Pure Storage FlashArray. We will cover all the details from volume layout, storage provisioning, host connectivity, Microsoft SQL Server deployment to backup and recovery using snapshots and Volume Shadow Service (VSS).

In addition to management simplicity we will show the gains in performance for database workloads, data reduction savings and application protection using our core technologies of FlashProtect, FlashReduce and FlashRecover respectively. Audience

This document is intended for Database Administrators (DBAs), Storage Administrators, System Administrators and anybody who wants to deploy a Microsoft SQL Server solution on a Pure Storage FlashArray. This is a technical document that assumes a working knowledge of Windows Server, Microsoft SQL Server setup and configuration, administration of Windows Server, basic knowledge of Windows PowerShell and familiarity with storage provisioning and networking. These are not prerequisites to reviewing this document. Summary of Findings

This reference architecture can be treated as a building block on how to deploy a physical instance of Microsoft SQL Server 2012. Even though this reference architecture focuses on an Online Transaction Processing (OLTP) workload other database workloads can be considered to leverage the same results. You can add additional server or infrastructure components to expand this architecture to support additional physical SQL Server instances.

 As part of the configuration for this paper a 2TB OLTP database was deployed and tested to

© Pure Storage 2011 | 3 simulate a real-world trading application running on a Pure Storage FA-420 FlashArray. Throughout the testing the FlashArray delivered consistently >100,000 IOPs, latency of 0.60 ms and provided consistent bandwidth of 811 MB/s.

 Data reduction for the test OLTP dataset was 5 to 1. This data reduction average was calculated using three volumes; one system database volume (5.4 to 1), one temp database volume (4.7 to 1) and the user database volume (4.8 to 1). These data reduction averages will vary based on the dataset.

 Taking snapshots is quick and easy through the Pure Storage Web Management GUI or via the REST API and PowerShell to support Dev/Test scenarios or create copies of database for nightly reporting processes.

 Ensure application consistent protection using the Pure Storage Volume Service (VSS) Provider. Pure Storage Introduction

Pure Storage is the leading all-flash enterprise array vendor, committed to enabling companies of all sizes to transform their businesses with flash.

Built on 100% MLC flash, Pure Storage FlashArray delivers all-flash enterprise storage that is 10X faster, space and power efficient, more reliable, and infinitely simpler, and yet typically cost less than traditional performance disk arrays.

FA-405 FA-420 FA-450

Pure Storage FlashArray FA-400 Series is ideal for: Accelerating Databases and Applications

Speed transactions by 10x with consistent low latency, enable online data analytics across wide datasets, and mix production, analytics, dev/test, and backup workloads without fear. Virtualizing and Consolidating Workloads

Easily accommodate the most IO-hungry Tier 1 workloads, increase consolidation rates (thereby reducing servers), simplify VI administration, and accelerate common administrative tasks.

© Pure Storage 2011 | 4 Delivering the Ultimate Virtual Desktop Experience

Support demanding users with better performance than physical desktops, scale without disruption from pilot to >1000’s of users, and experience all-flash performance for under $100/desktop. Protecting and Recovering Vital Data Assets

Provide an always-on protection for business-critical data, maintain performance even under failure conditions, and instantly with FlashRecover.

Pure Storage FlashArray sets the benchmark for all-flash enterprise storage arrays. It delivers: Consistent Performance

FlashArray delivers consistent <1ms average latency. Performance is optimized for the real-world applications workloads that are dominated by IO sizes of 32K or larger vs. 4K/8K hero performance benchmarks. Full performance is maintained even under failures/updates. Less Cost than Disk

Inline de-duplication and compression deliver 5 – 10x space savings across broad set of IO workloads including Databases, Virtual Machines and Virtual Desktop Infrastructure. Mission-critical Resiliency

FlashArray delivers >99.999% proven availability, as measured across the Pure Storage installed base and does so with non-disruptive everything without performance impact. Disaster Recovery Built-In

FlashArray offers native, fully integrated, data reduction-optimized backup and disaster recovery no additional cost. Setup disaster recovery with policy-based automation within minutes. And, recover instantly from local, space-efficient snapshots or remote replicas. Simplicity Built-In

FlashArray offers game-changing management simplicity that makes storage installation, configuration, provisioning and migration a snap. No more managing performance, RAID, tiers or caching. Achieve optimal application performance without any tuning at any layer. Manage the FlashArray the way you like it: Web-based GUI, CLI, VMware vCenter, Rest API, or OpenStack.

Pure Storage FlashArray FA-400 Series includes FA-405, FA-420, and FA-450. A FlashArray is available for any application and any budget!

© Pure Storage 2011 | 5 Table 1. Pure Storage FlashArray 400 Series Specifications. Small and Grow Online

FlashArray scales from smaller workloads to data center-wide consolidation. And because upgrading performance and capacity on the FlashArray is always non-disruptive, you can start small and grow without impacting mission-critical applications. Coupled with Forever Flash, a new business model for storage acquisition and lifecycles, FlashArray provides a simple and economical approach to evolutionary storage that extends the useful life of an array and does away with the incumbent storage vendor practices of forklift upgrades and maintenance extortion. Reference Architecture Design Principles

One of the biggest issues when deploying Microsoft SQL Server 2012 on any SAN storage is the complexities involved in setting up the fabric, provisioning the storage, connecting the newly provisioned LUNs to the host(s) and then setting up or migrating databases. The emphasis of this document is to illustrate the simplicity of using Pure Storage to host Microsoft SQL Server workloads.

With the above said, this reference architecture has the following goals: Simplicity. The environment is built on standard components with a minimum of non-default settings and configuration overhead. Resilience. The environment can tolerate a fault in any component without any service disruption. Performance. We are able to sustain throughput and transaction rates that meet the needs of your most demanding workloads. Low Cost. The environment is built with commodity hardware sized to the minimal requirements to meet performance and availability goals. We also provision storage as efficiently as possible. Manageability. Administrative tasks such as storage provisioning should be as simple as possible.

© Pure Storage 2011 | 6 Flexibility. Adjustments to the environment, such as adding or removing servers, are seamless. Configuration Overview

The following section describes the different components and configurations for the test environment. The diagram below illustrates the hardware configuration.

Figure 1. Component connectivity. Pure Storage FlashArray FA-420 configuration

The FlashArray FA-420 configuration comprised of two active/active controllers and two shelves of 5.5TB of raw flash memory for a total of 11TB of raw storage. Four Fibre Channel ports per controller were connected to one Cisco MDS 9148 8Gb SAN switches in a highly redundant configuration as shown in Figure 1. Table A below describes the specifications of the FlashArray FA-420.

© Pure Storage 2011 | 7 Component Description

Controllers Two active/active controllers which provided highly redundant SAS connectivity (24Gb) to two shelves and were interconnected for HA via two redundant InfiniBand connections (56Gb)

Shelves Two flash memory shelves with 22 SSD drives, 22 X 256 GB or a total raw capacity of 11TB (10.3 TiB).

External Four 8Gb Fibre Channel ports per controller, total of eight ports for two controllers. As Connectivity shown in Figure 1.

Management Two redundant 1 Gb Ethernet management ports per controller. Three management IP Ports addresses are required to configure the array, one for each controller management port and a third one for virtual port IP address for seamless management access.

Power Dual power supply rated at 450W per controller and 200W per storage shelf or approximately 9 Amps of power

Space The entire FA-420 system was hosted on eight rack unit (8 RU) space (2 RU for each controller and 2 RU for each shelf).

Table 2. Pure Storage FlashArray FA-420 specifications

There was no special configuration or tuning done on the FlashArray; we do not recommend any special tunable variables as the system is designed to perform out of the box. Server Configuration

Two Dell PowerEdge R720xd servers were deployed for hosting Microsoft Windows Server 2012 and Microsoft SQL Server 2012. The server’s dual HBA ports were connected to two Cisco MDS 9148 switches for upstream connectivity to access the Pure Storage FlashArray LUNs. The server configuration is described in the Table B below.

Component Description

Processor 2 Intel® Xeon® CPU E5-2697 v2 @ 2.70GHz, 2700 Mhz, 12 Core(s), 24 Logical

© Pure Storage 2011 | 8 Memory 256GB

HBA 2 QLogic (QLE2562) 8 Gbps Fibre Channel HBA’s (2 ports each)

NIC Intel(R) Gigabit 4P X520/I350 rNDC

BIOS Dell Inc. 2.1.3, 11/20/2013; SMBIOS 2.7

OS Microsoft Windows Server 2012 R2 Datacenter, Version 6.3.9600 Build 9600 (x64)

Table 3. Dell R720xd host configuration Server Configuration Best Practice

The Dell PowerEdge R720xd should be setup for maximum performance using the System BIOS. To check this setting enter the BIOS and select the System Profile Settings and ensure that the System Profile is set to Performance (see Figure 2). Once the system profile has been enabled for Performance the Dell Controlled Turbo can be enabled in the Processor Settings page (see Figure 3).

While you are in the System Setup of the Dell R720xd it is highly encouraged to configure the Integrated Dell Remote Access Controller (iDRAC) for remote management.

For this paper Dell servers are used but regardless of the server platform you choose be sure to check with the server manufacturer to ensure you are getting the best performance possible and the specific BIOS settings that need to be modified.

© Pure Storage 2011 | 9 Figure 2. Dell R720xd BIOS System Profile.

Figure 3. Dell R720xd BIOS Processor Settings.

© Pure Storage 2011 | 10 Host OS Configuration

Microsoft Windows Server 2012 R2 Datacenter was deployed as the host . For this reference architecture the Multipath I/O feature is required and updating the settings for the Host Bus Adapter are recommended. The following sections provide quick steps using Windows PowerShell for adding and configuring these components, for a more detailed walkthrough of configuring a Windows Server host please download the Microsoft Windows Server Best Practice Guide for Pure Storage from http://www.purestorage.com/resources/datasheets-whitepapers.html Microsoft Multipath I/O (MPIO)

Pure Storage FlashArray works with MPIO device specific module (DSM) provided as part of the Microsoft Windows Server 2012 R2 operating system. Using MPIO is only required in this case as the implementation is on physical hardware, this section can be skipped if the deployment is virtualized.

Install MPIO

If MPIO is not already installed open up an elevated Windows PowerShell session with Run as an Administrator and run the following command to install the Multipath I/O feature.

Add-WindowsFeature -Name "Multipath-IO"

Add MPIO Device Hardware

Ensure that the Windows host is configured on the switch for connectivity between the host and the Pure Storage FlashArray. Next step is to add the Pure FlashArray to the MPIO. 1. Open up an elevated Windows PowerShell session with Run as an Administrator. 2. Run Get-MSDSMSupportedHW to list out the existing VendorId and ProductId details. 3. Run New-MSDSMSupportedHW -ProductId FlashArray -VendorId PURE to add the PURE FlashArray to the list of MPIO Devices. 4. Run Restart-Computer to reboot the Windows host. 5. After Windows restarts open up an elevated Windows PowerShell session and run the command from Step 2 above to ensure the PURE FlashArray is now listed.

Configure MPIO Settings

Configure the Pure Storage recommended settings using the below Windows PowerShell. Get-MPIOSetting Set-MPIOSetting -NewPathRecoveryInterval 20 Set-MPIOSetting -CustomPathRecovery Enabled Set-MPIOSetting -NewPDORemovePeriod 30 Set-MPIOSetting -NewDiskTimeout 30

© Pure Storage 2011 | 11

Setting Notes Default Recommended

PathRecoveryInterval Provides a lower period for 60 seconds 20 seconds recovery attempts.

UseCustomPathRecoveryInterval Enabled to allow for the use of 0 = Disabled 1 = Enabled the PathRecoveryInterval setting.

PDORemovePeriod This setting controls the amount 20 seconds 30 seconds of time (in seconds) that the multipath pseudo-LUN will continue to remain in system memory, even after losing all paths to the device. Increasing this value allows adequate time in case of controller issues.

TimeoutValue 60 seconds 30 seconds

Table 4. MPIO Settings.

Changing these setting will show a WARNING: Settings changed, reboot required. Run Restart- Computer to reboot the Windows host. Host Bus Adapter (HBA)

The Dell R720xd uses QLogic Corporation (QLE2562) Fibre Channel Adapters. The QLE2562 defaults the queue depth to 32. The maximum queue depth value of the Microsoft Stor Miniport driver is 254. This is one of the only settings in this reference architecture configuration that can we adjusted to see differences in performance. For all of the tests performed in this paper a qd=254 was used.

Best Practice

“Don’t open the floodgates just because you can.” (Yes you can quote me on that) There really is not a best practice around setting Queue Depth because there are many factors involved based on your environment. I would recommend starting with 64 and evaluating performance accordingly. To check the QLogic adapter settings run the following Windows PowerShell: $RegPath = "Registry::HKLM\SYSTEM\CurrentControlSet\Services\ql2300i\Parameters\Device"

© Pure Storage 2011 | 12 Get-ItemProperty -Path $RegPath

Figure 4. QLogic QLE2562 Device Parameters.

Notice that there is no “qd” value set, QLogic defaults to an internal value so in order to control this setting the DriverParameter needs to be updated with a qd value. Using the same $RegPath as above run the below Windows PowerShell to update with a qd=254. The same procedure can be used to modify this parameter to other values to be tested. Set-ItemProperty -Path $RegPath -Name DriverParameter -Value "qd=254" Be aware that QLogic recommends that the Windows Server host be restarted after changing this value. If you want to check for any other HBA properties refer to Appendix V. Host OS Best Practice

Hand-in-hand with the previous Server Best Practice, from a Host OS standpoint Windows Server 2012 R2 is set with a default power scheme of Balanced. This power scheme should be changed to High Performance. To check the configuration perform the following actions:

 Open an elevated Command Prompt.

 Enter powercfg /LIST to see all of the Power Schemes. If this is a new Windows Server 2012 R2 deployment the return results will show (Balanced) * (see Figure 5). The asterisk notes the active Power Scheme.

Figure 5. Windows Server 2012 R2 Power Schemes.

© Pure Storage 2011 | 13  To set the active Power Scheme to High Performance, copy (mark) the GUID for the High Performance, then enter powercfg /SETACTIVE 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c (see Figure 6). Re-query using powercfg /LIST to ensure High Performance is active.

Figure 6. Power Scheme set to High Performance.

Host Management

The server has been configured and can now be added to the Pure Storage Web Management GUI so we can begin creating volumes and connecting them to the newly created server (host). Once the server has been connected to the switch where the Pure Storage FlashArray is connected and zoned, the Purity Operating Environment will detect the Fibre Channel ports and present them through the Web Management GUI for configuration.

© Pure Storage 2011 | 14 Step 1. Create Host

Enter the name of the host to create, for this paper WOLVERINE is the name of the host that will be used. Once entered click Create.

Figure 7. Create Host.

Step 2. Configure Host Connectivity

Click the gear icon on the right to access configuring Fibre Channel WWNs or ISCSI IQNs.

© Pure Storage 2011 | 15 Figure 8. Configure Fibre Channel WWNs.

Step 3. Select WWNs

The servers WWNs are auto discovered and can be easily added to the newly created host by clicking the +. Once all of the WWNs have been selected click Confirm.

Figure 9. Select WWNs.

© Pure Storage 2011 | 16 After confirming all of the connected ports will show up in the Host Ports tab. In Figure 10 there are six ports connected.

Figure 10. Connected Host Ports.

Now there is a new Host configured and connected to the Pure Storage FlashArray. Pretty easy! The next section discusses disk management and steps through creating the volumes for Microsoft SQL Server. Disk Management

Before jumping into the procedures for creating volumes, connecting them to the Windows Server host and setting up SQL Server, a very important change in the way of thinking needs to be understood when deploying Microsoft SQL Server. Traditionally SQL Server has been deployed to mechanical disks and many SQL Server DBAs know that per best practices from Microsoft and other experts it is recommended to separate PRIMARY files from Log files to ensure that a maximum number of IOPS and bandwidth can be achieved. This understanding and best practice no longer applies to Pure Storage’s implementation of flash technology. As part of the design simplicity and overall performance benefits of flash technology all database filegroups can be hosted on the same volume without the performance penalties of the past and the overly complicated volume design and maintenance tasks that needed to be performed.

One of the most important databases to SQL Server is TempDb which is used by the SQL Server engine to process T-SQL tasks such as queries, triggers, DBCC CHECK, cursors, temporary tables, index creation and more. There are many different best practices available for getting the most performance using mechanical disks but with flash technology once again TempDb and all of its filegroup elements can reside on a single volume on a Pure Storage FlashArray.

© Pure Storage 2011 | 17 As a general best practice it is good to separate databases onto their own volumes because of the following reasons: 1. Easy analysis – Using the Pure Storage Web Management GUI analysis can be done using the Analysis tab on a per volume basis. Having each user database encapsulated into one volume provides the ability to view that individual database easily. When the word “database” is used here that means the primary file (MDF), secondary files (NDF) and log file (LDF). The same principle applies to TemdDb. 2. Replication – With Purity Operating Environment 4.0 we introduced replication and having each individual database on its own volume allows for easier replication management. 3. Business continuity – No two databases are alike or have the same performance, backup and recovery requirements. Having all databases on a single volume assumes that all those databases are of each importance and when a restore from a snapshot operation is performed all of those databases will be part of the volume snapshot when they may not be necessary. 4. General organization and management – Sometimes it is hard to break old habits and with how database deployment have been done with mechanical disks over the years familiarity is a good thing. Flash technology is turning application deployment and performance capabilities on their heads but that does mean we need to make all the changes at once. If separating out databases onto separate volumes helps with general organization for a teams or individuals DBAs then by all means go ahead and do it. The Pure Storage FlashArray provides all the performance and ease of management for you to make those decisions easily without having to redesign RAID, aggregates and the like.

The next several sections describe the different volumes and the configuration details for those volumes that were used in tests performed as part of this paper.

Best Practice

Create three separate volumes to host the different SQL Server data files for system databases, TempDb and the user databases. Doing this logically groups the different databases and can allow for individual volume analysis from the Pure Storage Web management GUI.

Table 5 details the configuration recommendations for hosting Microsoft SQL Server on Pure Storage FlashArrays.

Volume Name Description

SQL-SYS Hosts Microsoft SQL Server 2012 system database files (MDFs and LDFs) for master, model and msdb.

SQL-TEMP Hosts Microsoft SQL Server 2012 TempDb databases files (MDFs, NDFs and LDFs) for TempDb.

© Pure Storage 2011 | 18 SQL-USER Hosts the SQL Server user database files (MDFs), log files (LDFs) and secondary files (NDFs).

Table 5. SQL Server Volume Definition.

Volume: SQL-SYS

Setting the size and properties for the master, model and msdb databases depends on individual SQL Server implementations. The default settings from SQL Server were used for these databases. When deploying SQL Server in your environment be sure to plan accordingly and ensure that the individual sizes for the database fit the needs of your workload.

Logical Name Filegroup Size Autogrowth Maxsize

master PRIMARY 5MB 10% Unlimited

mastlog Log 2MB 10% Unlimited

modeldev PRIMARY 5MB 1MB Unlimited

modellog Log 1MB 10% Unlimited

MSDBData PRIMARY 17MB 10% Unlimited

MSDBLog Log 20MB 10% Limit 2TB

Table 6. Volume: SQL-SYS

Volume: SQL-TEMP

Setting the size and properties for the TempDb depends heavily on your server configuration, workload and storage capacity.

Best Practice

Create one data file per physical or virtual CPU core for TempDb up to 8 cores.

For the OLTP workload test performed a total of seven PRIMARY files were used.

© Pure Storage 2011 | 19 Logical Name Filegroup Size Autogrowth Maxsize

tempdev PRIMARY 1000MB 100MB Unlimited

tempdev1 PRIMARY 1000MB 100MB Unlimited

tempdev2 PRIMARY 1000MB 100MB Unlimited

tempdev3 PRIMARY 1000MB 100MB Unlimited

tempdev4 PRIMARY 1000MB 100MB Unlimited

tempdev5 PRIMARY 1000MB 100MB Unlimited

tempdev6 PRIMARY 1000MB 100MB Unlimited

templog Log 1000MB 100MB Unlimited

Table 7. Volume: SQL-TEMP

Volume: SQL-USER

The SQL-USER volume will be the volume with the highest level of variability based on the size requirements of the user database(s). As an example below is the configuration of the user database filegroups used as part of this paper testing, the below volume was 4TB.

Logical Name Filegroup Size Autogrowth Maxsize

MSSQL_tpce_root PRIMARY 8MB None None

Fixed_1 Fixed_fg 5MB 10MB Unlimited

Growing_1 Growing_fg 671GB 10MB Unlimited

© Pure Storage 2011 | 20 Growing_2 Growing_fg 671GB 10MB Unlimited

Growing_3 Growing_fg 671GB 10MB Unlimited

Scaling_1 Scaling_fg 20GB 10MB Unlimited

Scaling_2 Scaling_fg 20GB 10MB Unlimited

Scaling_3 Scaling_fg 20GB 10MB Unlimited

MSSQL_tpce_log Log 195GB 10MB 1024MB Limited 391GB

Table 8: Volume: SQL-USER

Configuring Volumes

With the understanding of the different volumes recommended for Microsoft SQL Server we can now create the following volumes to install SQL Server data files in the next section. Each of the below volume sizes is not a hard and fast rule but rather being used here to illustrate the basic configuration and installation.

 SQL-SYS = 1GB

 SQL-TEMP = 1TB

 SQL-USER = 2TB

Using the Pure Storage Web Management GUI the volumes can be created and connected to the hosts. One of the primary focuses of the Pure Storage FlashArray is simplicity as discussed before. Creating volumes is very much like creating the host that we did in the previous section.

© Pure Storage 2011 | 21 Step 1: Create Volumes

Figure 11 illustrates the only step to create the individual SQL-SYS, SQL-TEMP and SQL-USER volumes.

Figure 11. Pure Storage Web Managment GUI creating SQL-SYS volume.

Once all of the volumes have been created you should see what is illustrated in Figure 12.

Figure 12. All SQL volumes created.

© Pure Storage 2011 | 22 Step 2: Connect Volumes

Final step is to connect these newly created volumes to the host; the host in this case is named WOLVERINE. Select the host, WOLVERINE, to see the Connected Volumes (0) tab. Click the gear icon on the right to show the action menu to Connect Volumes.

Figure 13. Connect Volumes Step 3: Selected Volumes

Add the SQL-SYS, SQL-TEMP and SQL-USER volumes by using the +, once added click Confirm.

Figure 14. Selected Volumes.

© Pure Storage 2011 | 23 Once added Figure 15 illustrates that all three volumes are now connected to the WOLVERINE host.

Figure 15. Connected Volumes (3). Configure Windows Server Host

These newly created and connected volumes need to be exposed to the Windows Server host. Step 1: Disk Discovery

From a Command Prompt or Run dialog enter diskmgmt.msc to start the Windows Server Disk Management tool then select Action > Rescan Disks or open up Windows PowerShell and "rescan" | . Both operations effectively perform the same task to rescan the bus for new disks.

After the new disks have been discovered they will be displayed as illustrated in Figure 16. This can also be done with Windows PowerShell using:

© Pure Storage 2011 | 24 Get-Disk | Where-Object FriendlyName -like "PURE*"

Figure 16. Disk Management.

The next step is to online the disks and prepare them for use so Microsoft SQL Server can be installed. Step 2: Online Disks

Using either the Disk Management tool or Windows PowerShell online the disks. With the management tool simply right-click the Disk # and choose Online. Using Windows PowerShell enter the following: Initialize-Disk -Number 1 -PartitionStyle GPT Initialize-Disk -Number 2 -PartitionStyle GPT Initialize-Disk -Number 3 -PartitionStyle GPT

As shown in Figure 16 each of the new disk numbers are 1, 2 and 3.

© Pure Storage 2011 | 25 Step 3: Create Partitions

After initializing the disks, create new partitions (volumes) using the New Simple Volume Wizard from the Disk Management tool. Right-click the partition and select New Simple Volume… or using Windows PowerShell enter the below commands. Note: the DiskNumbers may be different if you have any additional volumes on your system already. Use the Get-Disk cmdlet to check the DiskNumber.

New-Partition -DiskNumber 1 –UseMaximumSize –AssignDriveLetter New-Partition -DiskNumber 2 –UseMaximumSize –AssignDriveLetter New-Partition -DiskNumber 3 –UseMaximumSize –AssignDriveLetter

The above cmdlets will auto create new Drive Letters from the available pool. If you want to use Mount Points instead use Add-PartitionAccessPath to configure Mount Point locations. Mount Points can also be configured using the New Simple Volume Wizard. Step 4: Volumes

With the newly created partitions the final step is to format the volumes. Using the Disk Management tool right-click the volume and select Format… and provide the proper details. To accomplish this task using Windows PowerShell get the appropriate DriveLetters using Get-Volume then run: Format-Volume -DriveLetter D -FileSystem NTFS -AllocationUnitSize 65536 Format-Volume -DriveLetter E -FileSystem NTFS -AllocationUnitSize 65536 Format-Volume -DriveLetter F -FileSystem NTFS -AllocationUnitSize 65536

If you want to check the blocksize of the newly formatted volumes use: Get-WmiObject -Class Win32_Volume | Select BlockSize, Name | Format-Table -AutoSize

This will show the results as below:

BlockSize Name ------4096 \\?\Volume{97f2adf5-135d-11e4-80b1-806e6f6e6963}\ 65536 F:\ 65536 D:\ 65536 E:\ 4096 C:\

Best Practice

When formatting new volume for use with Microsoft SQL Server it is recommended to use a 64KB (65536 bytes) Allocation Unit Size for data, logs and TempDb. When using 64KB allocation unit size NTFS compression cannot be used.

Now all the new volumes are available for use from the Windows Server. Before continuing on to the Microsoft SQL Server installation let us recap what we have accomplished so far:

 Optimized the server for performance.

 Installed and configure the Windows Server 2012 R2 with MPIO and HBA settings.

© Pure Storage 2011 | 26  Created hosts and volumes on the Pure Storage FlashArray and connected them together.

 Initialized the newly created and connected volumes to the Windows Server host. Microsoft SQL Server Installation

For this reference architecture Microsoft SQL Server 2012 Enterprise Edition with Service Pack 1 (x64) was downloaded from the Microsoft Developer Network Subscription (MSDN) and installed. After starting the SQL Server Installation Center, the Installation section was chosen and a New SQL Server stand-alone installation or add features to an existing installation was selected, Figure X.

Figure 17. SQL Server Installation Center.

After selecting the New SQL Server stand-alone installation option the SQL Server 2012 Setup program begins. Each of the following screenshots is a step-by-step flow of setting SQL Server up on the Pure Storage FlashArray.

© Pure Storage 2011 | 27 Figure 18. Setup Support Rules.

Figure 19. Product Key.

© Pure Storage 2011 | 28 Figure 20. License Terms.

Figure 21. SQL Server Setup Support Rules.

© Pure Storage 2011 | 29

Figure 22. Setup Role.

Figure 23. Feature Selection.

© Pure Storage 2011 | 30

Figure 24. Installation Rules.

Figure 25. Installation Configuration.

The Instance Configuration step is important as there needs to be a decision made to host a single Default Instance of SQL Server or if you want to host multiple SQL Server instances, Named Instance,

© Pure Storage 2011 | 31 on this one server. There are no hard and fast rules or best practices associated with the configuration. The decision is more based on limitations defined in the Maximum Capacity Specifications for SQL Server, http://msdn.microsoft.com/en-us/library/ms143432.aspx.

Figure 26. Disk Space Requirements.

© Pure Storage 2011 | 32

Figure 27. Server Configuration.

Figure 28. Database Engine Configuration – Server Configuration.

© Pure Storage 2011 | 33

Figure 29. Database Engine Configuration - Data Directories.

The Database Engine Configuration step, specifically regarding Data Directories is a critical step during installation to avoid having to manually migrate databases over to Pure Storage FlashArray volumes. As seen in Figure 29 there are several different options to set the system database, user database and Temp Db directories. Per the previous steps in this paper we want to use the newly created volumes on the Windows Server host to install these databases.

© Pure Storage 2011 | 34

Figure 30. Error Reporting.

Don’t be alarmed with Figure 31 and the FAT32 File System as Passed. This is checking to make sure that the underlying file system is not FAT32.

© Pure Storage 2011 | 35

Figure 31. Installation Configuration Rules.

Figure 32. Ready to Install.

© Pure Storage 2011 | 36

Figure 33. Complete, Ready to use!

Microsoft SQL Server 2012 is now configured and ready for use! Let us verify the location of the database files using the SQL Server 2012 Management Studio. Start Management Studio, log in to the instance of SQL Server and open a New Query window. Tip: You don’t have to go to the Application icon every time to start Management Studio. If you still have a PowerShell window open type ssms and studio will open.

Once the New Query window is open type the following T-SQL statement and hit F5 or click Execute.

SELECT Name, physical_name AS 'File Locations' FROM .master_files

If the installation was successful as it showed then the files for master, model, msdb and TempDb will be located on Pure Storage FlashArray volumes.

Name File Locations ------master F:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\DATA\master.mdf mastlog F:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\DATA\mastlog.ldf tempdev D:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\Data\tempdb.mdf templog D:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\Data\templog.ldf modeldev F:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\DATA\model.mdf modellog F:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\DATA\modellog.ldf MSDBData F:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\DATA\MSDBData.mdf MSDBLog F:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\DATA\MSDBLog.ldf

Let’s summarize what we accomplished in this section:

© Pure Storage 2011 | 37  Installed Microsoft SQL Server 2012 as a stand-alone server

 Set the Data Directories to install System, TempDb and User database on Pure Storage FlashArray volumes.

 Verified the location of the physical files. Configuring TempDb

Now that SQL Server 2012 has successfully installed and is started, the final step is to add the additional TempDb files for optimal performance before adding any user databases to the system. As seen in the query results for the file locations the tempdev and templog files are located on D:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\Data\. This next operation will add six new tempdb files.

Best Practices

 When creating additional TempDb files ensure that all existing and new files are of the same size for optimal performance.

 Create one data file per physical or virtual CPU core for TempDb. In the example below 6 TempDb files are created since there are 12 cores in the server.

 Preallocate space for all TempDb files by setting the file size to accommodate the workload in the environment. This prevents TempDb from expanding too frequently, which can affect performance.

 Set TempDb to automatically grow. Preallocation should cover operational needs but setting to auto grow is a safeguard for unplanned exceptions. In the below example each TempDb file is set to grow by 100MB.

 Monitor TempDb file sizes. In the below example the MAXSIZE of each TempDb file is set to UNRESTRICTED which means keep growing until all volume capacity is used. Using this setting requires that the SQL Server be monitored but any good DBA has alerts and the like setup to warn of impending issues.

 The T-SQL query to run using SQL Management Studio is as follows:

USE [master] GO ALTER DATABASE [tempdb] MODIFY FILE (NAME=N'tempdev', SIZE=1000MB, MAXSIZE=UNRESTRICTED, FILEGROWTH=100) GO ALTER DATABASE [tempdb] MODIFY FILE (NAME=N'templog', SIZE=1000MB, MAXSIZE=UNRESTRICTED, FILEGROWTH=100) GO

© Pure Storage 2011 | 38 ALTER DATABASE [tempdb] ADD FILE (NAME=N'tempdev1', FILENAME=N'D:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\Data\tempdev1.ndf', SIZE=1000MB, MAXSIZE=UNRESTRICTED, FILEGROWTH=100) GO ALTER DATABASE [tempdb] ADD FILE (NAME=N'tempdev2', FILENAME=N'D:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\Data\tempdev2.ndf', SIZE=1000MB, MAXSIZE=UNRESTRICTED, FILEGROWTH=100) GO ALTER DATABASE [tempdb] ADD FILE (NAME=N'tempdev3', FILENAME=N'D:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\Data\tempdev3.ndf', SIZE=1000MB, MAXSIZE=UNRESTRICTED, FILEGROWTH=100) GO ALTER DATABASE [tempdb] ADD FILE (NAME=N'tempdev4', FILENAME=N'D:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\Data\tempdev4.ndf', SIZE=1000MB, MAXSIZE=UNRESTRICTED, FILEGROWTH=100) GO ALTER DATABASE [tempdb] ADD FILE (NAME=N'tempdev5', FILENAME=N'D:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\Data\tempdev5.ndf', SIZE=1000MB, MAXSIZE=UNRESTRICTED, FILEGROWTH=100) GO ALTER DATABASE [tempdb] ADD FILE (NAME=N'tempdev6', FILENAME=N'D:\MSSQL\Data\MSSQL11.MSSQLSERVER\MSSQL\Data\tempdev6.ndf', SIZE=1000MB, MAXSIZE=UNRESTRICTED, FILEGROWTH=100) GO

This query will create all the new files and result in Command(s) completed successfully.

That’s it! The system is fully configured to run a Microsoft SQL Server 2012 OLTP database. Backup & Recovery

Backup and recoverability are paramount for any database application. With the release of the Purity Operating Environment 4.0 we provide the Pure Storage Volume Shadow Copy Service Provider (Pure VSS Provider). The Pure VSS Provider is a new plugin to download and install that takes application consistent snapshots for Microsoft applications such as SQL Server.

It is important to set a foundation on the different types of backups before delving into the inner workings of the Pure VSS Provider.

Inconsistent Backup

This is probably the oldest type of backup. The process is simple, backup software starts at the beginning of a file structure and copies all of the data until it reaches the end, resulting in a backup. What can make this backup inconsistent is that if any user added/modified after a backup but before it completed that would result in an inconsistent backup; the files in the backup are not consistent. For databases these types of backups do not provide adequate protection because they only capture what is on disk. Example, with SQL Server there are a several different files, primary (MDF), log (LDF) and secondary (NDF) files and there could be I/O (transactions) that are still in memory. The inconsistent backup method only captures what is on disk and in the case of a database there may be transactions still in memory.

Crash-Consistent Backup

© Pure Storage 2011 | 39

A crash-consistent backup is where all data is captured at the same point in time. For all things not database related this method of backup should suffice for most recovery situations. A crash-consistent backup, as with an inconsistent backup, does not capture any data that is in memory or any pending I/O transactions. The term “crash” is used because if the data is recovered using this method it would be equivalent to restoring to the exact moment that the server had crashed. Crash-consistent backups can be used but it is important to perform the correct operational tasks to ensure you are restoring properly. For example with SQL Server you may need to replay transaction logs to get the database back to a consistent transactional state.

Any snapshot that is taken from the Pure Storage Web Management GUI, the Purity CLI or from Windows PowerShell creates a crash-consistent snapshot. The Windows PowerShell and REST API script has been included in Appendix I. Once a snapshot has been taken it can be created as a new volume and connected to any host in the same method as illustrated previously in the Host Management section.

Application-Consistent Backup

Application-consistent backups provide the highest level of protection and consistency, it captures what is on disk and memory. For Microsoft Windows this is achieved using the Volume Shadow Copy Service (VSS) which freezes I/O, flushes everything to disk and takes a block-level snapshot of the volume. VSS is provided as a framework in the Windows operating system that performs these operations by coordinating between Requester, Writer and Provider. When a VSS request is initiated a VSS Writer (Eg. SqlServerWriter) will flush all I/O to ensure that the database is in a consistent state. Then the VSS (Hardware) Provider will take a block-level snapshot of the volume. Once this is completed the Provider notifies the Writer to resume operations.

Without the Pure Storage VSS Provider any snapshot that is taken is a crash consistent snapshot, with the Pure VSS Provider we can now provide Application-Consistent Backups. When a Pure Storage VSS snapshot is created it is marked with a .VSS# in order to distinguish between the two different types of snapshots that can be taken. See Figure 34 for an example.

© Pure Storage 2011 | 40 Figure 34. VSS snapshot notation.

The Pure VSS Provider uses Diskshadow.exe as our out-of-box VSS Requester. Other requesters can be used as long as they adhere to the implementation guidelines of the Volume Shadow Copy Service Software Development kit (VSS SDK).

The process by which the Volume Shadow Copy Service works is illustrated below:

Steps in a VSS workflow are as follows:

1. The requester asks the Volume Shadow Copy Service to enumerate the writers, gather the writer metadata, and prepare for shadow copy creation. 2. Each writer creates an XML description of the components and data stores that need to be backed up and provides it to the Volume Shadow Copy Service. The writer also defines a restore method, which is used for all components. The Volume Shadow Copy Service provides the writer’s description to the requester, which selects the components that will be backed up. 3. The Volume Shadow Copy Service notifies all the writers to prepare their data for making a shadow copy. 4. Each writer prepares the data as appropriate, such as completing all open transactions, rolling transaction logs, and flushing caches. When the data is ready to be shadow-copied, the writer notifies the Volume Shadow Copy Service. 5. The Volume Shadow Copy Service tells the writers to temporarily freeze application write I/O requests (read I/O requests are still possible) for the few seconds that are required to create the shadow copy of the volume or volumes. The application freeze is not allowed to take longer than 60 seconds. The Volume Shadow Copy Service flushes the file system buffers and then freezes the file system, which ensures that the file system metadata is recorded correctly and the data to be shadow-copied is written in a consistent order. 6. The Volume Shadow Copy Service tells the provider to create the shadow copy. The shadow copy creation period lasts no more than 10 seconds, during which all write I/O requests to the file system remain frozen.

© Pure Storage 2011 | 41 7. The Volume Shadow Copy Service releases file system write I/O requests. 8. VSS tells the writers to thaw application write I/O requests. At this point applications are free to resume writing data to the disk that is being shadow-copied. 9. The requester can retry the process (go back to step 1) or notify the administrator to retry at a later time. 10. If the shadow copy is successfully created, the Volume Shadow Copy Service returns the location information for the shadow copy to the requester.

The new Pure VSS Provider can be installed from the Web Management GUI > System > Plugins > VSS. Simply download the 1.0.0 package and install on the individual Microsoft Window Server hosts. It is also possible to use other software deployment tools to install on a large volume of systems.

Figure 35. Pure Storage Web Management GUI Plugins.

Once the Pure VSS Provider has been installed use Diskshadow.exe from an elevated Administrator prompt to ensure the provider is visible.

© Pure Storage 2011 | 42 DISKSHADOW > list providers

Figure 36. DISKSHADOW> list providers

All of the commands can be run directly from Diskshadow or via Windows PowerShell. All of the scripts to perform Volume Shadow Copy Service snapshots are provided in Appendix IV and V. Conclusion

This paper demonstrates the ease of configuring a Pure Storage FlashArray with Microsoft SQL Server 2012 for high availability and performance. A number of best practices were provided as guidelines when deploying SQL Server in your environment. This paper explained:

 Configuring server and hosts for optimal performance.

 Configuring a host with Multipath I/O and a Host Bus Adapter.

 Creating and connecting hosts via the Pure Storage Web Management GUI.

 Creating specific volumes via the Pure Storage Web Management GUI for Microsoft SQL Server.

 Installing Microsoft SQL Server 2012 as a stand-alone server.

 Modifying the configuration of SQL Server’s TempDb for optimal performance.

© Pure Storage 2011 | 43 With the Pure Storage FlashArray you can experience consistent sub-millisecond latency, I/O and bandwidth for the most demanding SQL Server workloads. The OLTP tests that were performed as part of this papers research would have required over 570 15,000 RPM SAS mechanical disks along with the configuration and management of RAID setup, aggregate design, volume design and management. A Microsoft SQL Server solution running on a Pure Storage FlashArray provides the ability to deploy databases without the need to worry about sizing for performance again. Our overall ease of array management, host connectivity and volume management gives productivity back to storage administrators and DBAs where they need to spend the time; working with their customers.

© Pure Storage 2011 | 44 Appendix I: Snapshot Test Script

The following Windows PowerShell and Purity 3.4.3/REST API 1.1 was used to test taking snapshots of the volume which contained the 2TB SQL Server database file. Each new snapshot gets assigned a suffix with a Global Unique Identifier (GUID).

Note: Please update the script for $FlashArrayName, password and username with the appropriate information. [System..ServicePointManager]::ServerCertificateValidationCallback = { $true } $FlashArrayName = “” $AuthAction = @{ password = "" username = "" } Write-Host $AuthAction.Values $ApiToken = Invoke-RestMethod -Method Post -Uri "https://${FlashArrayName}/api/1.1/auth/apitoken" -Body $AuthAction

$SessionAction = @{ api_token = $ApiToken.api_token } Invoke-RestMethod -Method Post -Uri "https://${FlashArrayName}/api/1.1/auth/session" -Body $SessionAction -SessionVariable Session

"Start: {0::mm:ss}" -f (Get-Date) $SnapCount = 0 Do { $Snapshot = $null $Suffix = "REST-" + [Guid]::NewGuid() $Snapshot = [ordered]@{ snap = "true" source = [Object[]]"MEMPHIS-TPCE" suffix = $Suffix } | ConvertTo-Json Invoke-RestMethod -Method Post -Uri "https://${FlashArrayName}/api/1.1/volume" -Body $Snapshot -WebSession $Session -ContentType "application/json" $SnapCount++ } While ($SnapCount -le 1) "End: {0::mm:ss}" -f (Get-Date)

Appendix II: FlashArray Management Scripts

The following Windows PowerShell and Purity 3.4.3 REST/API 1.1 script can be customized to create the basic volumes for deploying Microsoft SQL Server 2012. This script will create 3 new volumes, SQL- SYSDBS (1GB), SQL-USERDBS (2TB), SQL-TEMPDB (1TB).

Note: Please update the script for $FlashArrayName, password and username with the appropriate information. cls [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } $FlashArrayName = “” $AuthAction = @{ password = "" username = "" } Write-Host $AuthAction.Values

© Pure Storage 2011 | 45 $ApiToken = Invoke-RestMethod -Method Post -Uri "https://${FlashArrayName}/api/1.1/auth/apitoken" -Body $AuthAction

$SessionAction = @{ api_token = $ApiToken.api_token } Invoke-RestMethod -Method Post -Uri "https://${FlashArrayName}/api/1.1/auth/session" -Body $SessionAction -SessionVariable Session Invoke-RestMethod -Method Get -Uri "https://${FlashArrayName}/api/1.1/array" -WebSession $Session | Format-Table -AutoSize

$Size = $null $SQLsys = "SQL-SYSDBS" $SQLuser = "SQL-USERDBS" $SQLtemp = "SQL-TEMPDB"

$SizeSQLsys = [ordered]@{ size = "1G" } | ConvertTo-Json

$SizeSQLuser = [ordered]@{ size = "2T" } | ConvertTo-Json

$SizeSQLtemp = [ordered]@{ size = "1T" } | ConvertTo-Json

Invoke-RestMethod -Method Post -Uri "https://${FlashArrayName}/api/1.1/volume/$SQLsys" - Body $SizeSQLsys -WebSession $Session -ContentType "application/json" Invoke-RestMethod -Method Post -Uri "https://${FlashArrayName}/api/1.1/volume/$SQLuser" - Body $SizeSQLuser -WebSession $Session -ContentType "application/json" Invoke-RestMethod -Method Post -Uri "https://${FlashArrayName}/api/1.1/volume/$SQLtemp" - Body $SizeSQLtemp -WebSession $Session -ContentType "application/json"

Invoke-RestMethod -Method Delete -Uri "https://${FlashArrayName}/api/1.1/auth/session" - WebSession $Session

Appendix III: Get Host Bus Adapter (HBA) Details

The following Windows PowerShell will retrieve all details about HBAs connected to a server. By changing the –ComputerName parameter any server can be queried. Function Get-HBAInfo { [CmdletBinding()] Param ( [Parameter(Mandatory=$false, ValueFromPipeline=$true, Position=0)] $ComputerName )

Begin { $Namespace = "root\WMI" } Process { $port = Get-WmiObject -Class MSFC_FibrePortHBAAttributes -Namespace $Namespace @PSBoundParameters $hbas = Get-WmiObject -Class MSFC_FCAdapterHBAAttributes -Namespace $Namespace @PSBoundParameters $hbaProp = $hbas | Get-Member -MemberType Property, AliasProperty | Select - ExpandProperty name | ? {$_ -notlike "__*"} $hbas = $hbas | Select $hbaProp $hbas | %{ $_.NodeWWN = ((($_.NodeWWN) | % {"{0:x2}" -f $_}) -join ":").ToUpper() }

ForEach($hba in $hbas) {

© Pure Storage 2011 | 46 Add-Member -MemberType NoteProperty -InputObject $hba -Name FabricName -Value ( ($port |? { $_.instancename -eq $hba.instancename}).attributes | ` Select ` @{Name='Fabric Name';Expression={(($_.fabricname | % {"{0:x2}" -f $_}) -join ":").ToUpper()}}, ` @{Name='Port WWN';Expression={(($_.PortWWN | % {"{0:x2}" -f $_}) - join ":").ToUpper()}} ) -passThru } } }

Get-HBAInfo -ComputerName $env:COMPUTERNAME

Appendix IV: New-PfaVolShadowCopy.ps1

[CmdletBinding()] Param( [Parameter(Mandatory=$True)][string]$Volume, [Parameter(Mandatory=$True)][string]$ScriptName, [Parameter(Mandatory=$True)][string]$MetadataFile, [Parameter(Mandatory=$True)][string]$ShadowCopyAlias, [Parameter(Mandatory=$True)][string]$VerboseMode = "ON" )

$dsh = "./$ScriptName.dsh" "RESET", "SET CONTEXT PERSISTENT", "SET OPTION TRANSPORTABLE", "SET METADATA $MetadataFile", "SET VERBOSE $VerboseMode", "BEGIN BACKUP", "ADD VOLUME $Volume ALIAS $ShadowCopyAlias PROVIDER {781c006a-5829-4a25-81e3- d5e43bd005ab}", "CREATE", "END BACKUP" | Set-Content $dsh DISKSHADOW /s $dsh Remove-Item $dsh

Appendix V: Get-PfaVolShadowCopy.ps1

[CmdletBinding()] Param( [Parameter(Mandatory=$True)][string]$MetadataFile, [Parameter(Mandatory=$True)][string]$ShadowCopyAlias, [Parameter(Mandatory=$True)][string]$ExposeAs )

$dsh = "./$ScriptName.dsh" "RESET", "LOAD METADATA $MetadataFile", "IMPORT", "EXPOSE %$ShadowCopyAlias% $ExposeAs", "" | Set-Content $dsh DISKSHADOW /s $dsh Remove-Item $dsh

© Pure Storage 2011 | 47 References

The following references where used as part of the development of this document.

1. SQLIO Disk Subsystem Benchmark Tool, http://www.microsoft.com/en- us/download/details.aspx?id=20163.

2. Microsoft Windows Server Best Practice Guide for Pure Storage, http://info.purestorage.com/WP-MicrosoftWindowsServerBestPracticeGuide_Request.html.

3. Multipath I/O Overview, http://technet.microsoft.com/en-us/library/cc725907.aspx.

4. Understanding MPIO Features and Components, http://technet.microsoft.com/en- us/library/ee619734(v=WS.10).aspx.

5. Microsoft Multipath I/O (MPIO) Users Guide for Windows Server 2012, http://www.microsoft.com/en-us/download/details.aspx?id=30450.

6. Volume Shadow Copy Service, http://msdn.microsoft.com/en- us/library/ee923636(v=WS.10).aspx.

7. Diskshadow, http://technet.microsoft.com/en-us/library/cc772172.aspx.

8. Windows Performance Monitor Disk Counters Explained, http://blogs.technet.com/b/askcore/archive/2012/03/16/windows-performance-monitor-disk- counters-explained.aspx

9. sp_configure (Transact-SQL), http://msdn.microsoft.com/en-us/library/ms188787(v=sql.110).aspx.

10. RECONFIGURE, http://msdn.microsoft.com/en-us/library/ms176069(v=sql.110).aspx.

11. QLogic Fibre Channel Adapter Stor Miniport Driver, http://filedownloads.qlogic.com/files/driver/42560/Readme_FC_StorPort_9-1-2-16.htm

12. Application Consistency with Pure Storage VSS Provider, http://www.themicrosoftdude.com/?p=2131

13. Pure Storage PowerShell Toolkit 1.0, http://www.purestorage.com/blog/pure-storage- -toolkit-1-0/.

© Pure Storage 2011 | 48

Pure Storage, Inc. Twitter: @purestorage

650 Castro Street, Suite #400 Mountain View, CA 94041

T: 650-290-6088 F: 650-625-9667

Sales: [email protected] Support: [email protected] Media: [email protected] General: [email protected] © Pure Storage 2011 | 49