블로그 이미지
redkite

카테고리

분류 전체보기 (291)
00.SI프로젝트 산출물 (0)
00.센터 운영 문서 (0)
01.DBMS ============.. (0)
01.오라클 (117)
01.MS-SQL (15)
01.MySQL (30)
01.PostgreSql (0)
01.DB튜닝 (28)
====================.. (0)
02.SERVER ==========.. (0)
02.서버-공통 (11)
02.서버-Linux (58)
02.서버-Unix (12)
02.서버-Windows (2)
====================.. (0)
03.APPLICATION =====.. (11)
====================.. (0)
04.ETC =============.. (0)
04.보안 (5)
====================.. (0)
05.개인자료 (1)
06.캠핑관련 (0)
07.OA관련 (1)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

exec sp_help usertbl  -- 테이블 분석

 




## 제약조건(Constraint)

create Table uTbl

(userID nchar(8) Not Null 

Constraint PK_userTbl_userID Primary Key,

 name nvarchar(10) Not Null

Constraint UQ_userTbl_name Unique,

 birthYear int Not Null --> 올해와 이후 100년 사이

Constraint CK_userTbl_BY 

check(birthyear>=year(getdate())

and birthyear<year(dateadd(yy,100,GETDATE()))),

 addr nchar(4) Not Null  --> 기본값 (서울)

Constraint DF_userTbl_addr default('서울'),

 mobile1 nchar(3) --> 010,011,016,017,018,019

Constraint CK_userTbl_mob1

check(mobile1 in ('010','011','016','017','018','019')),

 mobile2 nchar(8),

 height smallint --> 0 ~ 250

Constraint CK_userTbl_height

check (height > 0 and height <= 250)

)

go


select GETDATE()

select YEAR(getdate())

select year(dateadd(yy,100,GETDATE()))

 

 

 

 

SQL Server의 기본 데이터 저장 단위는 페이지입니다. 데이터베이스에서 데이터 파일(.mdf 또는 .ndf)에 할당되는 디스크 공간은 논리적인 페이지로 나뉘어지며 0에서 n 사이의 숫자가 연속으로 페이지에 매겨집니다. 디스크 I/O 작업은 페이지 수준에서 수행됩니다. 즉 SQL Server는 전체 데이터 페이지를 읽거나 씁니다.

익스텐트는 실제로 연속하는 8페이지를 모은 것으로 페이지를 효율적으로 관리하는 데 사용됩니다. 모든 페이지는 익스텐트로 저장됩니다.

SQL Server에서 페이지의 크기는 8KB입니다. 이 사실은 SQL Server 데이터베이스에 메가바이트당 128페이지가 있음을 의미합니다. 각 페이지는 96바이트 머리글로 시작하는데 이 머리글은 페이지에 대한 시스템 정보를 저장하는 데 사용됩니다. 페이지 번호, 페이지 유형, 해당 페이지의 사용 가능한 공간 크기 그리고 해당 페이지를 소유하고 있는 개체의 할당 단위 ID와 같은 정보를 저장합니다.

다음 표에서는 SQL Server 데이터베이스의 데이터 파일에서 사용되는 페이지 유형을 보여 줍니다.

페이지 유형

내용

데이터

text in row가 ON으로 설정된 경우에 text, ntext, image, nvarchar(max), varchar(max), varbinary(max)xml 데이터를 제외한 모든 데이터가 있는 데이터 행

인덱스

인덱스 항목

텍스트/이미지

큰 개체 데이터 형식:

  • text, ntext, image, nvarchar(max), varchar(max), varbinary(max)xml 데이터

데이터 행이 8KB를 초과하는 경우 가변 길이 열:

  • varchar, nvarchar, varbinarysql_variant

전역 할당 맵, 공유 전역 할당 맵

익스텐트가 할당되었는지 여부에 대한 정보

페이지의 사용 가능한 공간

페이지 할당 및 페이지의 사용 가능한 공간에 대한 정보

인덱스 할당 맵

테이블 또는 인덱스에서 할당 단위당 사용하는 익스텐트에 대한 정보

대량 변경 맵

마지막 BACKUP LOG 문 이후에 할당 단위당 대량 작업에 의해 수정된 익스텐트에 대한 정보

차등 변경 맵

마지막 BACKUP DATABASE 문 이후에 할당 단위당 변경된 익스텐트에 대한 정보

참고참고

로그 파일은 페이지는 포함하지 않으며 일련의 로그 레코드를 포함합니다.

데이터 행은 머리글 바로 다음부터 시작하여 페이지에 차례로 나옵니다. 행 오프셋 테이블은 페이지 끝에서 시작하는데 각 행 오프셋 테이블에는 해당 페이지에 있는 각 행에 대한 항목이 하나씩 있습니다. 각 항목은 해당 행의 첫째 바이트가 페이지 시작 지점에서 얼마나 떨어져 있는지를 기록합니다. 행 오프셋 테이블의 항목 순서는 페이지의 행 순서의 역순입니다.

행 오프셋이 있는 SQL Server 데이터 페이지

대용량 행 지원

행들이 여러 페이지에 걸쳐 있을 수 없지만 그러한 행 부분들이 해당 행의 페이지를 벗어나서 해당 행이 실제로는 아주 커질 수 있습니다. 한 페이지의 단일 행에 데이터와 오버헤드가 최대 8,060바이트(8KB)까지 저장됩니다. 그러나 텍스트/이미지 페이지 유형에 저장되는 데이터는 여기에 포함되지 않습니다. varchar, nvarchar, varbinary 또는 sql_variant 열이 있는 테이블의 경우 이러한 제한이 완화됩니다. 테이블에 있는 모든 고정 및 변수 열의 전체 행 크기가 8,060바이트 한계를 초과하면 SQL Server는 하나 이상의 가변 길이 열을 가장 너비가 넓은 열부터 시작하여 ROW_OVERFLOW_DATA 할당 단위에 있는 페이지로 동적으로 옮깁니다. 삽입 또는 업데이트 작업으로 행의 전체 크기가 8060바이트 한계를 초과하면 이러한 작업이 수행됩니다. 열이 ROW_OVERFLOW_DATA 할당 단위의 페이지로 이동하면 IN_ROW_DATA 할당 단위에 있는 원래 페이지의 24바이트 포인터가 그대로 유지됩니다. 후속 작업으로 행 크기가 줄면 SQL Server가 동적으로 열을 다시 원래 데이터 페이지로 이동합니다. 자세한 내용은 8KB를 초과하는 행 오버플로 데이터를 참조하십시오.

익스텐트는 공간 관리의 기본 단위입니다. 하나의 익스텐트는 실제로 연속하는 8페이지 또는 64KB입니다. 이 사실은 SQL Server 데이터베이스에 메가바이트당 익스텐트가 16개 있음을 의미합니다.

SQL Server은 효율적인 공간 할당을 위해 적은 양의 데이터를 포함하는 테이블에 전체 익스텐트를 할당하지 않습니다. SQL Server에는 다음 두 가지 유형의 익스텐트가 있습니다.

  • 균일 익스텐트는 단일 개체가 소유합니다. 또한 익스텐트의 전체 8페이지는 소유하는 개체만 사용할 수 있습니다.

  • 혼합 익스텐트는 최대 8개의 개체가 공유할 수 있습니다. 익스텐트의 8페이지를 각각 다른 개체가 소유할 수 있습니다.

일반적으로 새 테이블이나 인덱스에는 혼합 익스텐트의 페이지가 할당됩니다. 테이블이나 인덱스의 페이지가 8페이지로 증가하면 후속 할당을 위해 균일 익스텐트를 사용하도록 전환됩니다. 인덱스에 8개의 페이지를 생성하는 데 충분한 행을 가진 기존 테이블에서 인덱스를 만드는 경우 인덱스에 대한 모든 할당 항목은 균일 익스텐트에 있습니다.

혼합 및 단일 익스텐트


 

 

### SHRINK 테스트

@@@ shrink database @@@

use master
create database shrinkDB
on Primary
(name = shrinkDB,
 Filename = N'C:\database\sDB\shrinkDb.mdf',
 size=3MB)
Log on
(name = shrinkDB_Log,
 Filename= N'C:\database\sDB\shrinkDb_log.ldf',
 size=3MB)

-- 1 (insert A) --

use shrinkDB
create Table test (txt varchar(1024))
go

Declare @i int
set @i = 0
while @i < 1024*10
Begin
 insert into test values (replicate ('A', 1024)) 
 set @i = @i+1
end

-- 2 (insert B,C) --

Declare @i int
set @i = 0
while @i < 1024*10
Begin
 insert into test values (replicate ('B', 1024)) 
 set @i = @i+1
end

set @i = 0
while @i < 1024*10
Begin
 insert into test values (replicate ('C', 1024)) 
 set @i = @i+1
end

-- 3 (shrink database [SSMS])

-- 4 (view Size)

-- 5 (delete B)
delete test where substring(txt,1,1) = 'B'

-- 6 (shrink database [SSMS])

-- 7 (view Size)



### File Group


 - Database Object에 대한 저장

 - Data File의 묶음

 - Raid 0 구성 (I/O를 향상) 

   -> 물리적 드라이브가 실제 분리되어 있어야 효과

 - 주 Data File(.mdf)은 기본적으로

   -> Primary File Group 소속되어져 있음

 - Primary File Group은 읽기 전용 그룹이 될 수 없음


 - 나머지 File Group은 읽기 전용 그룹이 될 수 있음


 - 백업/복원의 대상이 됨


 - 증분복원: 단계적 복원이 가능


 

Posted by redkite
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함