인스턴스 스토어에서 tempdb 배치 - AWS 규범적 지침

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

인스턴스 스토어에서 tempdb 배치

Amazon EC2 인스턴스 스토어를 사용하는 경우 tempdb에 인스턴스 스토어 볼륨을 사용합니다. 인스턴스 스토어는 인스턴스에 블록 수준의 임시(단기간) 스토리지를 제공합니다. 속도와 비용이라는 두 가지 이유로 인스턴스 스토어 볼륨에 tempdb를 배치하는 것이 좋습니다. tempdb는 일반적으로 가장 많이 사용되는 데이터베이스이므로 사용 가능한 가장 빠른 드라이브를 활용할 수 있습니다. tempdb를 인스턴스 스토어에 배치할 때 얻을 수 있는 또 다른 이점은 인스턴스 스토어에 대한 I/O 요금이 별도로 청구되지 않기 때문에 비용이 절감된다는 것입니다.

SQL 서버를 다시 시작할 때마다 Tempdb가 다시 생성되므로 인스턴스를 중지하거나 종료해도 데이터가 손실되지 않습니다. 하지만 임시 디스크가 시스템에 로컬로 연결되어 있기 때문에 다른 호스트에서 가상 시스템을 시작하면 인스턴스 스토어 볼륨이 손실되므로 신중하게 계획하십시오.

인스턴스 스토어 볼륨을 사용하는 경우:

  • SQL 서버 서비스가 시작되기 전에 볼륨을 초기화합니다. 그렇지 않으면 SQL 서버 시작 절차가 실패합니다.

  • 인스턴스 스토어 볼륨에 대한 권한(전체 제어)을 SQL 서버 시작 계정에 명시적으로 부여합니다.

tempdb를 인스턴스 스토어로 이동

tempdb를 인스턴스 스토어 볼륨으로 이동하려면:
  1. Windows에서 관리자 권한으로 diskmgmt.msc를 실행하여 디스크 관리 시스템 유틸리티를 엽니다.

  2. 새 디스크를 초기화합니다.

  3. 디스크를 마우스 오른쪽 버튼으로 클릭한 다음 새 단순 볼륨을 선택합니다.

  4. 다음 설정을 사용하여 프롬프트를 완료하여 볼륨을 포맷합니다.

    • 파일 시스템: NTFS

    • 할당 단위 크기: 64K

    • 볼륨 레이블: tempdb

    자세한 설명은 Microsoft 웹사이트에서 디스크 관리 설명서를 참조하십시오.

  5. SQL 서버 인스턴스에 연결하고 다음 명령을 실행하여 tempdb 데이터베이스의 논리적 및 물리적 파일 이름을 기록합니다.

    $ sp_helpdb 'tempdb'

    다음 스크린샷은 명령과 그 출력을 보여줍니다.

    Finding the logical and physical file name of the tempdb database

  6. tempdb 파일을 새 위치로 이동합니다. 모든 tempdb 데이터베이스 파일을 동일한 초기 크기로 설정해야 한다는 점을 기억하십시오. 다음 샘플 SQL 서버 스크립트는 tempdb 파일을 T 드라이브로 이동하고 데이터 파일을 동일한 크기로 설정합니다.

    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. 다음 스크린샷과 같이 tempdb 파일을 생성할 수 있도록 tempdb 데이터베이스의 새 위치에 SQL 서버 시작 계정 권한을 부여합니다.

    Granting permissions to the new location of the tempdb database

  8. SQL 서버를 다시 시작하여 tempdb의 새 위치를 사용합니다.

    다음 스크린샷과 같이 새 위치에 작성된 tempdb 파일을 볼 수 있습니다.

    The new location of the tempdb database

  9. 이전 위치에서 tempdb 파일을 삭제합니다.

인스턴스 재부팅 또는 시작/중지 시 SQL 서버 시작 전에 인스턴스 스토어 볼륨이 초기화되었는지 확인하려면 다음 섹션의 단계를 따릅니다. 그렇지 않으면 tempdb가 초기화되지 않았기 때문에 SQL 서버 시작이 실패합니다.

인스턴스 스토어 초기화

데이터 스토어를 초기화하려면:
  1. Windows Services Manager(services.msc)를 열고 SQL 서버와 해당 종속 서비스(예: SQL Server Agent)를 수동으로 시작하도록 설정합니다. (인스턴스 스토어 볼륨이 준비되면 스크립트를 사용하여 시작합니다.)

  2. 사용자 데이터로 Amazon EC2 인스턴스에 전달할 PowerShell 스크립트를 생성합니다. 이 스크립트는 다음을 수행합니다.

    • 임시 스토리지를 탐지하고 이를 위한 tempdb 드라이브(이 예에서는 T 드라이브)를 생성합니다.

    • EC2 인스턴스가 중지했다가 다시 시작되면 임시 디스크를 새로 고칩니다.

    • SQL 서버 시작 계정에 새로 초기화된 tempdb 볼륨에 대한 전체 제어 권한을 부여합니다. 이 예에서는 기본 인스턴스를 가정하므로 NT SERVICE\MSSQLSERVER를 사용합니다. 명명된 인스턴스의 경우, 이 값은 기본적으로 NT SERVICE\MSSQL$<InstanceName>입니다.

    • 스크립트를 로컬 볼륨(예의 c:\scripts)에 저장하고 파일 이름(InstanceStoreMapping.ps1)을 할당합니다.

    • Windows 작업 스케줄러를 사용하여 예약된 작업을 만듭니다. 이 작업은 시작 시 PowerShell 스크립트를 실행합니다.

    • 이전 작업 후 SQL 서버 및 SQL 서버 에이전트를 시작합니다.

    다음 스크립트는 몇 가지 변경 사항이 있는 MS-SQL Availability Group Workshop의 두 번째 랩에서 가져온 것입니다. EC2 인스턴스를 시작할 때 스크립트를 사용자 데이터 필드에 복사하고 필요에 따라 사용자 지정합니다.

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

버퍼 풀 확장 사용

버퍼 풀 확장을 사용할 계획이라면 임시 볼륨에 배치하는 것도 고려해 볼 수 있습니다. 하지만 구현하기 전에 철저하게 테스트하는 것이 좋습니다. 버퍼 풀 확장과 tempdb에 같은 볼륨을 사용하지 마십시오.

참고

버퍼 풀 확장은 경우에 따라 유용할 수 있지만를 대체하지는 않습니다RAM. 사용을 결정하기 전에 Microsoft 웹사이트에 제공된 세부 정보를 참조하십시오.