Microsoft/MS-SQL 2000

익스텐트 할당 및 빈 공간 관리

장성한군사 2007. 8. 8. 19:27

익스텐트 할당 및 빈 공간 관리

빈 공간을 추적하는 Microsoft® SQL Server™ 2000 데이터 구조는 비교적 간단합니다. 이 구조는 다음의 두 가지 이점을 제공합니다.

  • 빈 공간 정보는 빽빽하게 묶여 있으므로 이 정보를 포함하는 페이지의 수는 비교적 적습니다.

    이 구조는 할당 정보를 검색하는 데 필요한 디스크 읽기의 양을 줄임으로써 속도를 높이고, 할당 페이지가 메모리에 남아 있을 확률을 높이고 추가적인 데이터 읽기 작업을 필요 없게 합니다.

  • 대부분의 할당 정보는 함께 연결되어 있지 않으므로 할당 정보의 유지 관리가 간편합니다.

    각 페이지 할당 및 할당 취소는 빠르게 수행될 수 있으므로 페이지를 할당하거나 사용 가능하게 만드는 데 필요한 동시 작업 간의 경합을 줄일 수 있습니다.

SQL Server는 다음의 두 가지 형식의 할당 맵을 사용하여 인스텐트의 할당을 기록합니다.

  • 전역 할당 맵(GAM)

    GAM 페이지는 어떤 익스텐트가 할당되었는지 기록합니다. 각 GAM은 64,000개의 익스텐트 또는 거의 4GB의 데이터를 처리합니다. GAM은 처리 간격으로 각 익스텐트에 대해 1비트를 갖습니다. 이 비트가 1인 경우 익스텐트는 비어 있고 이 비트가 0인 경우 익스텐트는 할당된 상태입니다.

  • 공유 전역 할당 맵(SGAM)

    SGAM 페이지는 어떤 익스텐트가 현재 혼합 익스텐트로 사용되고 있는지와 적어도 하나 이상의 사용되지 않은 페이지를 가지는지 기록합니다. 각 SGAM은 64,000개의 익스텐트 또는 거의 4GB의 데이터를 처리합니다. SGAM은 데이터를 처리 간격으로 각 익스텐트에 대해 1비트를 갖습니다. 이 비트가 1인 경우 익스텐트는 혼합 익스텐트로 사용 중이고 빈 페이지를 가지며 이 비트가 0인 경우 익스텐트는 혼합 익스텐트로 사용 중이지 않거나 페이지가 모두 사용 중인 혼합 익스텐트에 해당합니다.

각 익스텐트는 현재 사용 상태에 기반하여 GAM 및 SGAM에 설정된 다음의 비트 패턴을 갖습니다.

현재 익스텐트의 사용 GAM 비트 설정 SGAM 비트 설정
비어 있음, 사용 중이지 않음 1 0
균일 익스텐트 또는 완전 혼합 익스텐트 0 0
빈 페이지가 있는 혼합 익스텐트 0 1

그 결과로 단순 익스텐트 관리 알고리즘이 생성됩니다. SQL Server는 균일 익스텐트를 할당하기 위해 1비트에 해당하는 GAM을 검색하고 이를 0으로 설정합니다. 또한 빈 페이지가 있는 혼합 익스텐트를 찾기 위해 1비트에 해당하는 SGAM을 검색합니다. SQL Server는 혼합 익스텐트를 할당하기 위해 1비트에 해당하는 GAM을 검색하고 이를 0으로 설정한 후 SGAM의 해당 비트를 1로 설정합니다. 또한 익스텐트를 사용 가능 상태로 만들기 위해 해당 GAM 비트가 1로 설정되고 SGAM 비트가 0으로 설정되어 있는지 확인합니다. 실제 SQL Server가 내부적으로 사용하는 알고리즘은 여기에서 언급된 것처럼 SQL Server가 데이터베이스에서 균일하게 데이터를 분산하는 방식보다는 좀더 복잡하지만 익스텐트 할당 정보의 체인을 관리할 필요가 없으므로 실제 알고리즘은 간단합니다.

페이지 여유 공간(PFS) 페이지는 힙이나 ntext, text 또는 image 열의 개별 페이지가 할당되었는지 여부와 각 페이지의 빈 공간 크기를 기록합니다. 각 PFS 페이지는 약 8,000페이지를 처리합니다. 각 페이지에 대해 PFS는 페이지가 비어 있는지, 1-50% 찼는지, 51-80% 찼는지, 81-95% 찼는지 또는 96-100% 찼는지를 기록하는 비트맵을 갖습니다.

익스텐트가 개체에 할당된 후에 SQL Server는 PFS 페이지를 사용하여 익스텐트의 어떤 페이지가 할당되어 있거나 사용 가능 상태인지와 얼마나 많은 빈 공간을 사용할 수 있는지를 기록합니다. 이 정보는 SQL Server가 새 페이지를 할당해야 할 때 또는 새로 삽입한 행을 보유하는 데 사용할 수 있는 빈 공간이 있는 페이지를 찾을 때 사용합니다.

PFS 페이지는 데이터 파일에서 파일 머리글 페이지 뒤의 첫째 페이지(페이지 번호 1)입니다. 그 다음에는 GAM(페이지 2)이 오고 다음에는 SGAM(페이지 3)이 옵니다. 처음 페이지 다음에 각 8,000페이지의 PFS가 있습니다. 다른 GAM은 페이지 2의 처음 GAM 다음에 GAM의 64,000개 익스텐트가 있고 페이지 3의 처음 SGAM 다음에 SGAM의 64,000개 익스텐트가 있습니다.