Placer tempdb dans un magasin d'instances - AWS Directives prescriptives

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Placer tempdb dans un magasin d'instances

Lorsque vous utilisez un magasin d'instance Amazon EC2, utilisez le volume de stockage d'instance pour tempdb. Un stockage d'instance fournit un stockage temporaire (éphémère) au niveau des blocs pour votre instance. Nous vous recommandons de placer tempdb sur un volume de stockage d'instance pour deux raisons : rapidité et coût. Tempdb est généralement la base de données la plus utilisée. Elle bénéficie donc du lecteur le plus rapide disponible. Le fait de placer tempdb dans un magasin d'instances présente également l'avantage de réaliser des économies, car les E/S ne vous sont pas facturées séparément par rapport au stockage d'instance.

Tempdb est recréé chaque fois que vous redémarrez SQL Server, de sorte que l'arrêt ou la résiliation d'une instance n'entraîne pas de perte de données. Toutefois, un volume de stockage d'instance est perdu lorsque la machine virtuelle est démarrée sur un autre hôte, car le disque éphémère est connecté localement à la machine. Planifiez donc avec soin.

Lorsque vous utilisez un volume de stockage d'instance :

  • Initialisez le volume avant le démarrage du service SQL Server. Dans le cas contraire, la procédure de démarrage de SQL Server échouera.

  • Accordez des autorisations (contrôle total) sur le volume de stockage de l'instance de manière explicite au compte de démarrage de SQL Server.

Déplacer tempdb vers un magasin d'instances

Pour déplacer tempdb vers un volume de stockage d'instance :
  1. À partir de Windows, exécutezdiskmgmt.mscen tant qu'administrateur pour ouvrir l'utilitaire système de gestion des disques.

  2. Initialisez un nouveau disque.

  3. Cliquez avec le bouton droit sur le disque, puis choisissezNouveau volume simple.

  4. Complétez les instructions à l'aide des paramètres suivants pour formater le volume :

    • Système de fichiers : NTFS

    • Taille de l'unité d'allocation : 64 Ko

    • Libellé du volume : tempdb

    Pour plus d'informations, consultez leDocumentation sur la gestion des disquessur le site Web de Microsoft.

  5. Connectez-vous à l'instance SQL Server et exécutez la commande suivante pour noter le nom de fichier logique et physique de la base de données tempdb :

    $ sp_helpdb 'tempdb'

    La capture d'écran suivante montre la commande et sa sortie.

    Finding the logical and physical file name of the tempdb database

  6. Déplacez le fichier tempdb vers son nouvel emplacement. N'oubliez pas de définir la même taille initiale pour tous les fichiers de base de données tempdb. L'exemple de script SQL Server suivant déplace les fichiers tempdb vers le lecteur T et définit la même taille pour les fichiers de données.

    USE master GO ALTER DATABASE TempDB MODIFY FILE (NAME = tempdev, FILENAME = 'T:\tempdb.mdf',SIZE = 524288KB) GO ALTER DATABASE TempDB MODIFY FILE (NAME = temp2, FILENAME = 'T:\tempdb_mssql_2.ndf',SIZE = 524288KB) GO ALTER DATABASE TempDB MODIFY FILE (NAME = temp3, FILENAME = 'T:\tempdb_mssql_3.ndf',SIZE = 524288KB) GO ALTER DATABASE TempDB MODIFY FILE (NAME = temp4, FILENAME = 'T:\tempdb_mssql_4.ndf',SIZE = 524288KB) GO ALTER DATABASE TempDB MODIFY FILE (NAME = templog, FILENAME = 'T:\templog.ldf') GO
  7. Accordez au compte de démarrage de SQL Server les autorisations d'accéder au nouvel emplacement de la base de données tempdb, afin qu'il puisse créer les fichiers tempdb, comme illustré dans la capture d'écran suivante.

    Granting permissions to the new location of the tempdb database

  8. Redémarrez SQL Server pour utiliser le nouvel emplacement de tempdb.

    Vous verrez les fichiers tempdb créés au nouvel emplacement, comme indiqué dans la capture d'écran suivante.

    The new location of the tempdb database

  9. Supprimez les fichiers tempdb de l'ancien emplacement.

Pour vous assurer que le volume de stockage d'instance est initialisé avant le démarrage de SQL Server en cas de redémarrage ou d'arrêt de l'instance, suivez les étapes décrites dans la section suivante. Sinon, le démarrage de SQL Server échouera car tempdb n'a pas été initialisé.

Initialisation du magasin d'instances

Pour initialiser le magasin de données :
  1. Ouvrez le gestionnaire de services Windows (services.msc) et configurez SQL Server et ses services dépendants (par exemple, SQL Server Agent) pour qu'ils démarrent manuellement. (Vous utiliserez un script pour le démarrer lorsque le volume de stockage de l'instance sera prêt.)

  2. Créez unPowerShellscript à transmettre à l'instance Amazon EC2 en tant que données utilisateur. Ce script permet d'effectuer les opérations suivantes :

    • Détecte le stockage éphémère et crée un lecteur tempdb pour celui-ci (lecteur T dans l'exemple).

    • Actualise le disque éphémère si l'instance EC2 s'arrête et redémarre.

    • Accorde au compte de démarrage de SQL Server le contrôle total du volume tempdb récemment initialisé. L'exemple suppose qu'il s'agit d'une instance par défaut, il utilise doncNT SERVICE\MSSQLSERVER. Pour une instance nommée, ce sera généralementNT SERVICE\MSSQL$<InstanceName>par défaut.

    • Enregistre le script sur un volume local (c:\scriptsdans l'exemple) et lui attribue un nom de fichier (InstanceStoreMapping.ps1).

    • Crée une tâche planifiée à l'aide du Planificateur de tâches Windows. Cette tâche exécutePowerShellscript au démarrage.

    • Démarre SQL Server et l'agent SQL Server après les actions précédentes.

    Le script suivant provient du deuxième laboratoire duAtelier du groupe de disponibilité MS-SQLavec quelques modifications. Copiez le script dansUtilisateurchamp de données lorsque vous lancez l'instance EC2 et que vous la personnalisez si nécessaire.

<powershell> # Create pool and virtual disk for TempDB using the local NVMe, ReFS 64K, T: Drive $NVMe = Get-PhysicalDisk | ? { $_.CanPool -eq $True -and $_.FriendlyName -eq "NVMe Amazon EC2 NVMe"} New-StoragePool -FriendlyName TempDBPool -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $NVMe New-VirtualDisk -StoragePoolFriendlyName TempDBPool -FriendlyName TempDBDisk -ResiliencySettingName simple -ProvisioningType Fixed -UseMaximumSize Get-VirtualDisk -FriendlyName TempDBDisk | Get-Disk | Initialize-Disk -Passthru | New-Partition -DriveLetter T -UseMaximumSize | Format-Volume -FileSystem ReFS -AllocationUnitSize 65536 -NewFileSystemLabel TempDBfiles -Confirm:$false # Script to handle NVMe refresh on start/stop instance $InstanceStoreMapping = { if (!(Get-Volume -DriveLetter T)) { #Create pool and virtual disk for TempDB using mirroring with NVMe $NVMe = Get-PhysicalDisk | ? { $_.CanPool -eq $True -and $_.FriendlyName -eq "NVMe Amazon EC2 NVMe"} New-StoragePool -FriendlyName TempDBPool -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $NVMe New-VirtualDisk -StoragePoolFriendlyName TempDBPool -FriendlyName TempDBDisk -ResiliencySettingName simple -ProvisioningType Fixed -UseMaximumSize Get-VirtualDisk -FriendlyName TempDBDisk | Get-Disk | Initialize-Disk -Passthru | New-Partition -DriveLetter T -UseMaximumSize | Format-Volume -FileSystem ReFS -AllocationUnitSize 65536 -NewFileSystemLabel TempDBfiles -Confirm:$false #grant SQL Server Startup account full access to the new drive $item = gi -literalpath "T:\" $acl = $item.GetAccessControl() $permission="NT SERVICE\MSSQLSERVER","FullControl","Allow" $rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission $acl.SetAccessRule($rule) $item.SetAccessControl($acl) #Restart SQL so it can create tempdb on new drive Stop-Service SQLSERVERAGENT Stop-Service MSSQLSERVER Start-Service MSSQLSERVER Start-Service SQLSERVERAGENT } } New-Item -ItemType Directory -Path c:\Scripts $InstanceStoreMapping | set-content c:\Scripts\InstanceStoreMapping.ps1 # Create a scheduled task on startup to run script if required (if T: is lost) $action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument 'c:\scripts\InstanceStoreMapping.ps1' $trigger = New-ScheduledTaskTrigger -AtStartup Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "Rebuild TempDBPool" -Description "Rebuild TempDBPool if required" -RunLevel Highest -User System </powershell>

Utilisation de l'extension du pool de mémoire tampon

Si vous envisagez d'utiliser l'extension du pool de mémoire tampon, vous pouvez également envisager de la placer sur un volume éphémère. Cependant, nous vous recommandons vivement de le tester minutieusement avant de le mettre en œuvre. Évitez d'utiliser le même volume pour l'extension du pool de mémoire tampon et pour tempdb.

Note

Bien que l'extension du pool de mémoire tampon puisse être utile dans certains cas, elle ne remplace pas la RAM. Avant de décider de l'utiliser, consultez ledétails fournis sur le site Web de Microsoft.