Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Coloque tempdb en un almacén de instancias
Cuando utilice un almacén de instancias Amazon EC2, utilice el volumen del almacén de instancias para tempdb. El almacén de instancias ofrece un almacenamiento de nivel de bloques temporal (efímero) para la instancia. Recomendamos que coloque tempdb en un volumen de almacén de instancias por dos motivos: velocidad y costo. Tempdb suele ser la base de datos más utilizada, por lo que se beneficia de la unidad más rápida disponible. Otra ventaja de colocar tempdb en un almacén de instancias es el ahorro de costos, ya que no se cobra por separado la E/S del almacén de instancias.
Tempdb se vuelve a crear cada vez que reinicia el servidor de SQL, por lo que detener o terminar una instancia no provocará la pérdida de datos. Sin embargo, se pierde un volumen de almacén de instancias cuando se inicia la máquina virtual en otro host, ya que el disco efímero está conectado localmente a la máquina, por lo que debe planificarse con cuidado.
Cuando se usa un volumen de almacén de instancias:
-
Inicialice el volumen antes de que se inicie el servicio del servidor de SQL. De lo contrario, se producirá un error en el procedimiento de inicio del servidor de SQL.
-
Conceda permisos (control total) sobre el volumen del almacén de instancias de forma explícita a la cuenta de inicio del servidor de SQL.
Mover tempdb a un almacén de instancias
Para mover tempdb a un volumen de almacén de instancias:
-
Desde Windows, ejecute
diskmgmt.msc
como administrador para abrir la utilidad del sistema de administración de discos. -
Inicialice un disco nuevo.
-
Haga clic con el botón derecho en el disco y elija Nuevo volumen simple.
-
Complete las instrucciones con la configuración para formatear el volumen:
-
Sistema de archivos: NTFS
-
Tamaño de la unidad de asignación: 64 K
-
Etiqueta de volumen: tempdb
Para obtener más información, consulte la Documentación de Disk Management
en el sitio web de Microsoft. -
-
Conéctese a la instancia del servidor de SQL y ejecute el siguiente comando para anotar el nombre de archivo lógico y físico de la base de datos tempdb:
$ sp_helpdb 'tempdb'
En la siguiente captura de pantalla se muestra el comando y el resultado.
-
Mueva el archivo tempdb a la nueva ubicación. Recuerde configurar todos los archivos de la base de datos tempdb con el mismo tamaño inicial. El siguiente ejemplo de script de servidor SQL mueve los archivos tempdb a la unidad T y establece los archivos de datos con el mismo tamaño.
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
-
Conceda a la cuenta de inicio del servidor de SQL permisos para acceder a la nueva ubicación de la base de datos tempdb para que pueda crear los archivos tempdb, como se muestra en la siguiente captura de pantalla.
-
Reinicie el servidor de SQL para usar la nueva ubicación de tempdb.
Verá los archivos tempdb creados en la nueva ubicación, tal y como se muestra en la siguiente captura de pantalla.
-
Elimine los archivos tempdb de la ubicación anterior.
Para asegurarse de que el volumen del almacén de instancias se inicialice antes de que se inicie el servidor de SQL en caso de que la instancia se reinicie o se detenga, siga los pasos de la siguiente sección. De lo contrario, se producirá un error al iniciar el servidor de SQL porque tempdb no se inicializó.
Inicialización del almacén de instancias
Para inicializar el almacén de datos:
-
Abra el Administrador de servicios de Windows (
services.msc
) y configure el el servidor de SQL y sus servicios dependientes (por ejemplo, el agente del servidor de SQL) para que se inicien manualmente. (Utilizará un script para iniciarlo cuando el volumen del almacén de instancias esté listo). -
Cree un script de PowerShell para pasarlo a la instancia de Amazon EC2 como datos de usuario. Este script hace lo siguiente:
-
Detecta el almacenamiento efímero y crea una unidad tempdb para él (en el ejemplo, la unidad T).
-
Actualiza el disco efímero si la instancia EC2 se detiene y se reinicia.
-
Otorga a la cuenta de inicio del servidor de SQL el control total del volumen tempdb recién inicializado. En el ejemplo se presupone una instancia predeterminada, por lo que se utiliza
NT SERVICE\MSSQLSERVER
. En el caso de una instancia con nombre, normalmente será de formaNT SERVICE\MSSQL$
de forma predeterminada.<InstanceName>
-
Guarda el script en un volumen local (
c:\scripts
en el ejemplo) y le asigna un nombre de archivo (InstanceStoreMapping.ps1
). -
Crea una tarea programada con el Programador de tareas de Windows. Esta tarea ejecuta el script de PowerShell al iniciarse.
-
Inicia el servidor de SQL y el agente el servidor de SQL después de las acciones anteriores.
El siguiente script pertenece al segundo laboratorio del taller del grupo de disponibilidad de MS-SQL
y contiene algunos cambios. Copie el script en el campo de datos de Usuario al lanzar la instancia EC2 y personalícelo según sea necesario. -
<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>
Uso de la extensión de grupo de búferes
Si planea usar la extensión del grupo de búferes, también podría considerar colocarla en un volumen efímero. Sin embargo, le recomendamos encarecidamente que la pruebe minuciosamente antes de implementarla. Evite usar el mismo volumen para la extensión del grupo de búferes y para la tempdb.
nota
Si bien la extensión del grupo de búferes puede resultar útil en algunos casos, no sustituye a la RAM. Antes de decidirse a usarlo, consulte la información que se proporciona en el sitio web de Microsoft