데이터베이스 스토리지 최적화

완료됨

데이터베이스 스토리지를 최적화하려면 비례 채우기 및 tempdb 구성을 고려해야 합니다.

비례 채우기란?

두 개의 데이터 파일이 있는 SQL Server 데이터베이스에 1GB의 데이터를 삽입하는 경우 각 데이터 파일의 크기가 약 512MB씩 증가할 것으로 예상됩니다. 그러나 SQL Server는 데이터 파일의 크기에 따라 다른 볼륨의 데이터 파일에 데이터를 삽입하기 때문에 반드시 같은 양이 증가하는 것은 아닙니다. 위의 예에서 데이터 파일의 크기가 2GB인 경우에도 데이터가 균등하게 배포될 것이라고 예상할 것입니다. 그러나 데이터 파일 중 하나는 10GB이고 다른 하나는 1GB인 경우 약 900MB는 파일 크기가 10GB인 파일로 이동하고 100MB는 파일 크기가 1GB인 파일로 이동합니다. 해당 동작은 tempdb의 쓰기 집약적 특성을 가진 모든 데이터베이스에서 발생하지만, 쓰기 패턴이 일정하지 않으면 더 많은 쓰기가 발생하기 때문에 가장 큰 파일에 병목 상태가 발생할 수 있습니다.

SQL Server에서 tempdb 구성

SQL Server 2016은 설치 시 사용 가능한 CPU 수를 검색하고 적절한 수의 파일을 최대 8개까지 구성하고 데이터 파일 크기를 균등하게 조정하여 해당 동작을 변경했습니다. 또한 추적 플래그 1117 및 1118의 동작이 데이터베이스 엔진에 기본 제공되지만 tempdb에 대해서만 제공됩니다. tempdb 사용량이 많은 워크로드의 경우 tempdb 파일 수를 8개보다 많은 컴퓨터의 CPU 수로 늘릴 수 있습니다.

SQL Server는 사용자 정의 임시 테이블을 저장하는 것보다 훨씬 더 많은 용도로 tempdb를 사용합니다. 중간 쿼리 결과를 저장하는 데 사용되는 작업 테이블, 정렬 작업, 행 버전 관리에 대한 버전 저장은 tempdb의 몇 가지 용도에 불과합니다. tempdb는 다양한 용도로 사용되기 때문에 tempdb를 가장 대기 시간이 짧은 스토리지에 배치하고 해당 데이터 파일을 제대로 구성하는 것이 중요합니다.

SQL Server 2016 이전의 경우, tempdb에 기본적으로 하나의 데이터 파일만 있도록 설정되어 있습니다. 단일 파일을 사용하기 때문에 tempdb 데이터베이스의 시스템 페이지에 액세스하려고 하는 여러 프로세스에 경합이 있을 수 있습니다. 이 경합 문제에 대한 일반적인 해결책은 익스텐트가 할당된 방식을 변경하는 추적 플래그 1118을 사용하도록 설정하는 것이었습니다. 또 다른 일반적인 모범 권장 사례는 여러 tempdb 데이터 파일을 만드는 것이었습니다. SQL Server는 여러 데이터 파일이 있는 데이터베이스에 대해 비례 채우기 알고리즘을 사용하기 때문에 해당 파일이 동일한 크기이며 동일한 속도로 증가하고 있는지 확인하는 것도 중요했습니다. 이를 지원하기 위해 다양한 DBA에서 추적 플래그 1117을 사용하여 여러 데이터 파일이 있는 모든 데이터베이스를 동일한 속도로 확장하도록 했습니다.