Platzieren Sie tempdb in einem Instanzspeicher - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Platzieren Sie tempdb in einem Instanzspeicher

Wenn Sie einen Amazon EC2-Instance-Speicher verwenden, verwenden Sie das Instance-Store-Volume für tempdb. Ein Instance-Speicher stellt temporären (kurzlebigen) Speicher auf Blockebene für Ihre Instance bereit. Wir empfehlen aus zwei Gründen, tempdb auf einem Instance-Speichervolume zu platzieren: Geschwindigkeit und Kosten. Tempdb ist in der Regel die am häufigsten genutzte Datenbank und profitiert daher vom schnellsten verfügbaren Laufwerk. Ein weiterer Vorteil der Platzierung von tempdb in einem Instance-Speicher sind die Kosteneinsparungen, da Ihnen die I/O nicht separat vom Instance-Speicher in Rechnung gestellt wird.

Tempdb wird bei jedem Neustart von SQL Server neu erstellt, sodass das Stoppen oder Beenden einer Instanz nicht zu Datenverlust führt. Ein Instance-Speichervolume geht jedoch verloren, wenn die virtuelle Maschine auf einem anderen Host gestartet wird, da die temporäre Festplatte lokal an die Maschine angeschlossen ist. Planen Sie daher sorgfältig.

Wenn Sie ein Instance-Store-Volume verwenden:

  • Initialisieren Sie das Volume, bevor der SQL Server-Dienst gestartet wird. Andernfalls schlägt die SQL Server-Startprozedur fehl.

  • Gewähren Sie dem SQL Server-Startkonto explizit Berechtigungen (volle Kontrolle) für das Instanzspeicher-Volume.

Tempdb in einen Instanzspeicher verschieben

Um tempdb auf ein Instance-Store-Volume zu verschieben:
  1. Führen Sie unter Windows ausdiskmgmt.mscals Administrator, um das Systemdienstprogramm zur Datenträgerverwaltung zu öffnen.

  2. Initialisieren Sie eine neue Festplatte.

  3. Klicken Sie mit der rechten Maustaste auf die Festplatte, und wählen Sie dannNeues einfaches Volumen.

  4. Füllen Sie die Eingabeaufforderungen aus und verwenden Sie die folgenden Einstellungen, um das Volumen zu formatieren:

    • Dateisystem: NTFS

    • Größe der Zuweisungseinheit: 64K

    • Bandbezeichnung: tempdb

    Weitere Informationen finden Sie auf derDokumentation zur Festplattenverwaltungauf der Microsoft-Website.

  5. Stellen Sie eine Verbindung mit der SQL Server-Instanz her und führen Sie den folgenden Befehl aus, um den logischen und physischen Dateinamen der tempdb-Datenbank zu notieren:

    $ sp_helpdb 'tempdb'

    Der folgende Screenshot zeigt den Befehl und seine Ausgabe.

    Finding the logical and physical file name of the tempdb database

  6. Verschieben Sie die tempdb-Datei an den neuen Speicherort. Denken Sie daran, alle tempdb-Datenbankdateien auf dieselbe Anfangsgröße zu setzen. Das folgende Beispiel-SQL-Serverskript verschiebt die tempdb-Dateien auf Laufwerk T und setzt die Datendateien auf dieselbe Größe.

    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. Gewähren Sie dem SQL Server-Startkonto Berechtigungen für den neuen Speicherort der tempdb-Datenbank, damit es die tempdb-Dateien erstellen kann, wie im folgenden Screenshot gezeigt.

    Granting permissions to the new location of the tempdb database

  8. Starten Sie SQL Server neu, um den neuen Speicherort für tempdb zu verwenden.

    Sie werden die am neuen Speicherort erstellten tempdb-Dateien sehen, wie im folgenden Screenshot gezeigt.

    The new location of the tempdb database

  9. Löschen Sie die tempdb-Dateien vom alten Speicherort.

Um sicherzustellen, dass das Instanzspeicher-Volume vor dem Start von SQL Server initialisiert wird, falls die Instanz neu gestartet oder gestartet/gestoppt wird, gehen Sie wie im nächsten Abschnitt beschrieben vor. Andernfalls schlägt der Start von SQL Server fehl, weil tempdb nicht initialisiert wurde.

Initialisierung des Instanzspeichers

Um den Datenspeicher zu initialisieren:
  1. Öffnen Sie den Windows Services Manager (services.msc) und stellen Sie den SQL Server und seine abhängigen Dienste (z. B. den SQL Server-Agent) so ein, dass er manuell gestartet wird. (Sie verwenden ein Skript, um es zu starten, wenn das Instance-Store-Volume bereit ist.)

  2. Erstelle einePowerShellSkript, das als Benutzerdaten an die Amazon EC2-Instance übergeben wird. Dieses Skript führt folgende Aktionen aus:

    • Erkennt temporären Speicher und erstellt dafür ein Tempdb-Laufwerk (Laufwerk T im Beispiel).

    • Aktualisiert die temporäre Festplatte, wenn die EC2-Instance angehalten und neu gestartet wird.

    • Gewährt dem SQL Server-Startkonto die volle Kontrolle über das neu initialisierte tempdb-Volume. Das Beispiel geht von einer Standardinstanz aus, also verwendet esNT SERVICE\MSSQLSERVER. Für eine benannte Instanz ist dies in der RegelNT SERVICE\MSSQL$<InstanceName>standardmäßig.

    • Speichert das Skript auf einem lokalen Volume (c:\scriptsim Beispiel) und weist ihm einen Dateinamen zu (InstanceStoreMapping.ps1).

    • Erstellt eine geplante Aufgabe mithilfe des Windows Taskplaners. Diese Aufgabe führt denPowerShellSkript beim Start.

    • Startet SQL Server und SQL Server Agent nach den vorherigen Aktionen.

    Das folgende Skript stammt aus dem zweiten Labor desWorkshop zur MS-SQL-Verfügbarkeitsgruppemit einigen Änderungen. Kopieren Sie das Skript in dieNutzerDatenfeld, wenn Sie die EC2-Instance starten, und passen Sie es nach Bedarf an.

<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>

Verwendung der Pufferpool-Erweiterung

Wenn Sie planen, die Pufferpool-Erweiterung zu verwenden, können Sie auch erwägen, sie auf einem kurzlebigen Volumen zu platzieren. Wir empfehlen jedoch dringend, es vor der Implementierung gründlich zu testen. Vermeiden Sie es, dasselbe Volume für die Bufferpool-Erweiterung und tempdb zu verwenden.

Anmerkung

Obwohl die Pufferpool-Erweiterung in einigen Fällen nützlich sein kann, ist sie kein Ersatz für RAM. Bevor Sie sich entscheiden, es zu verwenden, lesen Sie dieauf der Microsoft-Website bereitgestellte Details.