데이터베이스 공간 관리

黄舟
풀어 주다: 2016-12-15 15:54:23
원래의
1010명이 탐색했습니다.

데이터베이스 공간 관리 연구 노트

SQL Server의 데이터 저장 기본 단위는 페이지입니다. 디스크 I/O 작업은 페이지 수준에서 수행됩니다.

SQL Server가 데이터를 읽거나 쓸 수 있는 최소 단위는 8KB 단위의 페이지입니다.


각 페이지의 시작 부분은 페이지에 대한 시스템 정보를 저장하는 데 사용되는 96 B 헤더입니다. 페이지 번호, 페이지 유형, 페이지에서 사용 가능한 공간 및 페이지를 소유한 개체의 할당 단위 ID

가 포함됩니다. 다양한 유형의 데이터가 다양한 유형의 페이지에 저장됩니다.

일반 데이터 페이지에서는 데이터 행이 페이지 헤더 바로 다음에 순차적으로 배치됩니다. 페이지 끝에는 페이지의 각 행에 대해 하나의 항목이 포함된 행 오프셋 테이블이 있습니다.

각 항목은 해당 줄의 첫 번째 바이트와 페이지 상단 사이의 거리를 기록합니다. 행 오프셋 테이블의 항목은 페이지에 있는 행의 역순으로 되어 있습니다.

------여기에 송다선의 메모를 넣어주세요------ --- --

페이지 헤더가 차지하는 공간과 행 오프셋 행렬이 차지하는 공간을 제외하고 중앙의 나머지 공간은 데이터 행에 사용됩니다. 데이터 행에는 데이터 행을 나타내는 데 사용되는 다른 정보도 있습니다. 구체적인 구조는 다음과 같습니다. 상태 비트 A 1바이트 상태 비트 B 1바이트 고정 길이 데이터 유형 길이 2바이트 고정 길이 데이터 내용 특정 숫자 고정 길이 데이터 바이트 열 수 2바이트 NULL 비트맵 열 수/8바이트 가변 길이 열 수 2바이트 가변 길이 열의 오프셋 행렬 가변 길이 열 수 * 2바이트 가변 길이 열 특정 가변 길이 데이터 데이터 바이트는 최소 1+1+2+2+1=7

을 차지합니다.------------ --- ------------------

지정된 페이지를 출력하려면 다음을 사용할 수 있습니다. DBCC PAGE(, , , )

Db_id는 sp_helpdb의 결과에서 얻을 수 있습니다.

File_id는 sp_helpfile의 결과에서 얻을 수 있습니다.

Format_id는 지정한 출력 형식입니다.

DBCC PAGE를 실행하기 전에 추적 플래그 3604도 설정해야 합니다.


SQL Server에서 행은 페이지에 걸쳐 있을 수 없으며 동일한 행에 속할 수 없습니다. 모든 필드 데이터는 동일한 페이지에 배치되어야 합니다. 페이지의 최대 데이터 크기는 8,060B(8KB)입니다.

따라서 일반 데이터 유형 필드로 구성된 행의 최대 총 길이는 8KB를 초과할 수 없습니다.

그러나 이 제한에는 텍스트/이미지 데이터 유형 필드의 데이터는 포함되지 않습니다.

이러한 유형의 필드 데이터는 LOB(LargeObject) 페이지에 별도로 저장됩니다.


SQL Server 2005 이상 버전에서는 varchar(max), nvarchar(max), varbinary(max) 등의 데이터 형식이 제공됩니다.

이러한 유형의 데이터 필드를 포함하는 행의 총 길이가 8KB를 초과하지 않는 경우에도 데이터는 일반 데이터 페이지에 함께 저장됩니다.

총 길이가 8KB를 초과하는 경우 SQL Server는 이러한 필드의 데이터를 분리하여 Row-Overflow라는 페이지에 별도로 저장합니다.


Extent는 페이지를 효과적으로 관리하는 데 사용되는 물리적으로 연속된 8개의 페이지 모음입니다. 모든 페이지는 익스텐트에 저장됩니다.

• 단일 개체가 소유하는 통합된 영역입니다. 영역의 8개 페이지는 모두 하나의 개체에서만 사용할 수 있습니다.

• 최대 8개의 개체가 공유하는 혼합 영역. 영역의 8개 페이지 각각은 다른 개체가 소유할 수 있습니다. 그러나 페이지는 항상 하나의 개체에만 속할 수 있습니다.

페이지는 일반적으로 혼합 범위의 새 테이블이나 인덱스에 할당됩니다. 테이블이나 인덱스가 8페이지로 늘어나면 후속 할당에 균일한 범위를 사용하도록 변경됩니다.


DBCC SHOWFILESTATS

이 명령은 GAM, SGAM 등 시스템 할당 페이지에서 영역 할당 정보를 직접 읽어 파일 개수를 직접 계산할 수 있습니다. 데이터베이스에 영역이 할당되었습니다. sys.dm_db_partition_stats


데이터베이스 공간 크기를 페이지 단위로 분석하고 확인할 수 있습니다.

로그 파일은 페이지/섹션별로 정리되지 않습니다.

데이터베이스 엔진은 내부적으로 각 물리적 로그 파일을 여러 개의 가상 로그 단위로 나눕니다. 가상 로그 단위는 고정된 크기가 없으며

물리 로그 파일에 포함된 가상 로그 단위의 개수도 고정되어 있지 않습니다.


로그 파일이 자동으로 커질 때마다 가상 로그 단위가 하나 이상 추가됩니다.

로그 파일이 여러 번 작은 자동 증가를 경험한 경우 해당 파일의 가상 로그 단위 수가 일반 로그 파일보다 훨씬 커집니다.

이러한 상황은 로그 파일 관리의 효율성에 영향을 미치고 데이터베이스 시작에 오랜 시간이 걸릴 수도 있습니다.

트랜잭션 로그는 래퍼 파일입니다. 데이터베이스가 생성되면 논리적 로그 파일은 물리적 로그 파일의 시작 부분에서 시작됩니다.

새 로그 기록은 논리적 로그 끝에 추가된 후 물리적 로그 끝으로 확장됩니다.

논리 로그의 끝이 물리 로그 파일의 끝에 도달하면 새 로그 기록이 물리 로그 파일의 시작 부분으로 돌아가서 계속해서 거꾸로 기록됩니다.


DBCC SQLPERF(LOGSPACE)는 로그 파일의 사용량을 확인할 수 있습니다.

Tempdb 시스템 데이터베이스는 SQL Server 인스턴스에 연결된 모든 사용자가 사용할 수 있는 전역 리소스입니다. SQL Server2005에서는 다음 항목을 저장하는 데 사용됩니다.

사용자 개체

• 사용자 정의 테이블 및 인덱스.

• 시스템 테이블 및 인덱스.

• 전역 임시 테이블 및 인덱스.

• 로컬 임시 테이블 및 인덱스.

• 테이블 변수.

• 테이블 반환 함수에서 테이블이 반환되었습니다.


내부 개체

• 커서 또는 스풀 작업과 임시 LOB(대형 개체) 저장소에 사용되는 작업 테이블입니다.

• 해시 조인 또는 해시 집계 작업을 위한 작업 파일.

• 인덱스 생성 또는 재구축과 같은 작업에 대한 중간 정렬 결과(SORT_IN_TEMPDB가 지정된 경우),

또는 특정 GROUP BY, ORDER BY 또는 UNION 쿼리에 대한 중간 정렬 결과.

각 내부 개체는 최소 9페이지(IAM 페이지 1개, 8페이지 익스텐트 1개)를 사용합니다.


버전 저장소

• 스냅샷 격리 수준 또는 읽기 커밋 격리 수준(행 버전 관리 기반) 행 버전을 사용하여 데이터베이스의 트랜잭션을 수정하는 데이터에 의해 생성됩니다.

• 온라인 인덱스 작업, MARS(다중 활성 결과 집합) 및 AFTER 트리거와 같은 기능에 대한 데이터 수정 트랜잭션으로 생성된 행 버전.


Tempdb 공간 활용의 가장 큰 특징은 사용자가 생성한 임시 테이블, 테이블 변수 등 일부 개체만 존재한다는 점입니다.

당신 sys.allocation_units 및 sys.partitions와 같은 관리 뷰를 사용할 수 있습니다.

sp_spaceused로는 tempdb의 공간 사용량을 추적할 수 없습니다. (정확하지 않음)


sys.dm_db_file_space_usage 이 보기는 여러 주요 범주에서 tempdb의 공간 사용량 분포를 반영할 수 있습니다.

사용자 개체(user_object_reserved_page_count)인지, 시스템 개체(internal_object_reserved_page_count)

인지, 버전 저장소(version_store_reserved_page_count)인지.

위 내용은 데이터베이스 공간관리 내용입니다. 더 많은 관련 글은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿