Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
해당되는 게시물 20건
  SQL Server Memory 
작성일시 : 2009.04.22 11:34 | 분류 : SQL Server/Kernel

메모리 영역의 구성
1. Buffer pool : SQL Server의 기본 데이터 저장소
2. MemToLeave : BPool에서 사용하지 않는 SQL Server의 유저 영역 메모리
3. AWE memory : AWE를 활성화 할 경우 사용할 수 있는 BPool의 확장 및 데이터와 인덱스의 케싱을 위해 사용되는 데이터 공간

MemToLeave
기본적으로 MemToLeave 영역은 384MB의 크기를 갖는다. 이중 128MB는 Worker thread stacks 을 위해 예약 되며, (max worker threads = 255 * 0.5M) 나머지 256MB 는 BPool 외의 공간을 위해 예약된다. 예를 들어 MemToLeave는 OLE DB Provider (Linked Server를 이용하는 경우)및 in process COM object 및 8Kb 이상의 크기를 갖는 서버 코드 등이 사용하게 됩니다. (켄 핸더슨 2003년)

특히 2005 버전 부터는 CTE나 CLR 등이 해당 메모리를 사용하게 됩니다.

MemToLeave Size 조절 : 시작 옵션에서  –g 옵션을 주고 사이즈를 기입 (Ex –g 1024)

[Memtoleave 확인]
(출처 : http://sqlblogcasts.com/blogs/christian/archive/2008/01/07/sql-server-memtoleave-vas-and-64-bit.aspx)

With VASummary(Size,Reserved,Free) AS
(SELECT
    Size = VaDump.Size,
    Reserved =  SUM(CASE(CONVERT(INT, VaDump.Base)^0)
    WHEN 0 THEN 0 ELSE 1 END),
    Free = SUM(CASE(CONVERT(INT, VaDump.Base)^0)
    WHEN 0 THEN 1 ELSE 0 END)
FROM
(
    SELECT  CONVERT(VARBINARY, SUM(region_size_in_bytes))
    AS Size, region_allocation_base_address AS Base
    FROM sys.dm_os_virtual_address_dump 
    WHERE region_allocation_base_address <> 0x0
    GROUP BY region_allocation_base_address 
UNION  
    SELECT CONVERT(VARBINARY, region_size_in_bytes), region_allocation_base_address
    FROM sys.dm_os_virtual_address_dump
    WHERE region_allocation_base_address  = 0x0
)
AS VaDump
GROUP BY Size)

SELECT SUM(CONVERT(BIGINT,Size)*Free)/1024 AS [총 Memtoleave] ,CAST(MAX(Size) AS BIGINT)/1024 AS [잔여 Memtoleave] 
FROM VASummary 
--WHERE Free <> 0

  Logical Query Processing 02 
작성일시 : 2009.03.18 13:24 | 분류 : SQL Server/Kernel

본 글을 읽기 위해서는 이전 Logical Query Processing 01 를 먼저 확인 하고 읽어야 한다.
본 문서는 INSIDE SQL SERVER 2005의 내용을 기반으로 작성 되었다.

Logical Query Processing 01 : http://maystyle.tistory.com/420

Step 6 CUBE 및 ROLLUP 옵션 적용
만약 CUBE 나 Rollup 조건이 기술 되어 있는 경우 Supergroup을 만들고 해당 그룹을 VT6에 추가한다..

Step 7 Having 필터 적용
Having 필터는 이전 스탭에서 생성된 테이블에 적용된다. 오직 <having_condition>이 참인 그룹만 Step7의 가상 테이블 VT7 이 된다
HAVING COUNT(O.orderid) < 3 조건에 의해 이전에 VT 5의 KRLOS 는 제거 된다.

VT7
FISSA    Madrid    NULL    NULL
FRNDO    Madrid    1    FRNDO
            Madrid    2    FRNDO

* Aggregate Function 은 Subquery 를 허용하지 않는다. (예 HAVING SUM((SELECT …)) > 10 

Step 8 Select List 처리
SELECT 단계는 최초로 호출자의 요청에 맞는 table을 생성하는 단계입니다. Step 5에서 명시한 것과 같이 Group By에 선언이 되었다면 SELECT 절에서는 반드시 Aggregate Function을 사용하고 있어야 합니다. (예 SELECT customerID, SUM(price) … Group by customerID)
select c.customerid, COUNT(o.orderid) as numorders 쿼리를 적용하면 VT8이 생성 된다.

VT8

FISSA    0
FRNDO    2

Step 9 DISTINCT 조건 적용
DISTINCT 조건이 명시되어 있으면 이전에 생성된 VT8 의 중복된 ROW들을 삭제한다. 사실 GROUP BY 가 사용될 때는 DISTINCT는 별 의미가 없다. (실제로 ROW 삭제를 않한다.)

Step 10 ORDER BY 조건 적용
이전의 VT9의 테이블을 정렬한 커서 VC10을 리턴 한다.  해당 결과는 TABLE이 이 아니다. 다음 결과를 보자

SELECT * FROM (SELECT orderid FROM orders ORDER BY orderid) AS D;
위의 쿼리는 에러를 일으킨다. SQL 구문에서 ORDER BY 구문을 table expression 으로 사용할 수 없다.

VC 10
FISSA    0
FRNDO    2

Step 11 Top 옵션 적용
우리가 TOP 조건을 주면 해당 해당 조건에 따라 (물리적으로 테이블에 데이터가 나열된 순서에 맞춰) TOP 조건을 적용한 VT 11을 리턴 한다.

TOP 과 ORDER BY를 사용하게 되면 table expression 이 가능해집니다. 어차피 TOP의 반환 값이 Table이기 때문이죠. 이를 태면 위의 SELECT * FROM (SELECT orderid FROM orders ORDER BY orderid) AS D;  는 SELECT * FROM (SELECT TOP 100 PERSENT orderid FROM orders ORDER BY orderid) AS D; 변경하면 실행이 가능합니다.

그와 더불어 TOP에는 WTIH TIES 옵션을 같이 써야 하는 경우가 있다. 이를 태면 상위 10%의 학생들의 이름을 확인 하라 라는 쿼리가 있다고 가자.
이 경우 SELECT TOP 10 PERSENT name FROM students ORDER BY score 로 표현할 수 있다. 다만 이때 10%에 걸리는 학생들이 여러 명일 경우에는 실제로 10%가 넘어갈 수도 있고, 해당 학생들은 본 쿼리에서 확인이 안될 것이다. 이 경우 모든 학생들의 리스트를 확인 하기 위하여 WITH TIES 옵션을 사용해야 한다.

  Logical Query Processing 01 
작성일시 : 2009.02.05 17:37 | 분류 : SQL Server/Kernel

출처 : Inside Microsoft SQL Server 2005 : T-SQL Querying

굉장히 훌륭한 책임에도 번역서가 없기에 보기 힘든 책이 INSIDE SQL SERVER 시리즈다.
물론 완역은 시간 상 힘들겠지만, 각 내용의 요점 정도로 축약하여 기록하고자 한다.

본인은 SQL Server 초보이기 때문에 내용의 이해에 다소간의 문제가 있을 것으로 예상한다.
즉 완벽한 이해와 오역의 방지를 위하여 책과 함께 봐야 도움이 되리라 생각한다.

SQL Server에서는 쿼리를 어떻게 처리할까?
아래와 같은 Table Customers 와 Orders 을 만들고 간단한 Select query 구문을 처리하는 과정을 통해 SQL Server의 Logical Query Processing을 알아보도록 하자.

Query 구문

select c.customerid, COUNT(o.orderid) as numorders
from customers as c
    left outer join orders as o
        on c.customerid = o.customerid
where c.city='madrid'
group by c.customerid
having COUNT(o.orderid) <3
order by numorders

샘플 데이터 구성 (DDL)
use tempdb
go

create table customers
(
    customerid    char(5)        not null primary key,
    city        varchar(10)    not null
);

insert into customers values ('FISSA', 'Madrid');
insert into customers values ('FRNDO', 'Madrid');
insert into customers values ('KRLOS', 'Madrid');
insert into customers values ('MRPHS', 'Zion');

create table orders
(
    orderid        int        not null    primary key,
    customerid    char(5)    null        references customers(customerid)
);

insert into orders values (1, 'FRNDO');
insert into orders values (2, 'FRNDO');
insert into orders values (3, 'KRLOS');
insert into orders values (4, 'KRLOS');
insert into orders values (5, 'KRLOS');
insert into orders values (6, 'MRPHS');
insert into orders values (7, null);

Step 1 Cartesian Product (Cross Join)
가장 먼저 From 조건을 확인하여 가상의 Table을 만든다. 처음으로 만들어지는 테이블은 customers 와 orders로 조합이 가능한 모든 가능의 수를 조합하여 테이블이 만들게 된다. 즉 M개의 행을 가진 T1 와 N개의 행을 가진 T2가 Join 이 되면 M x N 행을 가진 가상의 테이블이 만들어지게 된다.

VT1
FISSA    Madrid    1    FRNDO
FISSA    Madrid    2    FRNDO
FISSA    Madrid    3    KRLOS
FISSA    Madrid    4    KRLOS
FISSA    Madrid    5    KRLOS
FISSA    Madrid    6    MRPHS
FISSA    Madrid    7    NULL
FRNDO    Madrid    1    FRNDO
FRNDO    Madrid    2    FRNDO
FRNDO    Madrid    3    KRLOS
FRNDO    Madrid    4    KRLOS
FRNDO    Madrid    5    KRLOS
FRNDO    Madrid    6    MRPHS
FRNDO    Madrid    7    NULL
KRLOS    Madrid    1    FRNDO
KRLOS    Madrid    2    FRNDO
KRLOS    Madrid    3    KRLOS
KRLOS    Madrid    4    KRLOS
KRLOS    Madrid    5    KRLOS
KRLOS    Madrid    6    MRPHS
KRLOS    Madrid    7    NULL
MRPHS    zion    1    FRNDO
MRPHS    zion    2    FRNDO
MRPHS    zion    3    KRLOS
MRPHS    zion    4    KRLOS
MRPHS    zion    5    KRLOS
MRPHS    zion    6    MRPHS
MRPHS    zion    7    NULL

Step 2 Applying the ON Filter (Join Condition)
VT1 테이블에서 on c.customerid = o.customerid 확인하여 True 인 절로 VT2 를 생성 한다.

VT2
FRNDO    Madrid    1    FRNDO
FRNDO    Madrid    2    FRNDO
KRLOS    Madrid    3    KRLOS
KRLOS    Madrid    4    KRLOS
KRLOS    Madrid    5    KRLOS
MRPHS    zion    6    MRPHS

Step3 Adding Outer Rows
On Condition에서 제외된 Row 들일지라도 필요할 경우 Outer Join을 통해 가상 테이블에 포함 시킬 수 있다.
즉 이전에 생성된 VT2에 제외된  outer row를 추가하게 된다.

VT3
FISSA    Madrid    NULL    NULL
FRNDO    Madrid    1    FRNDO
FRNDO    Madrid    2    FRNDO
KRLOS    Madrid    3    KRLOS
KRLOS    Madrid    4    KRLOS
KRLOS    Madrid    5    KRLOS
MRPHS    zion    6    MRPHS

Step4 Applying the where filter
Where condition을 확인하여 해당 결과가 True 인 Row들로 이루어진 새로운 테이블을 만든다.
Where 구문과 On 구문의 차이점은 Outer 조인일 때 필터링 이후에 Row가 추가되는냐 않되느냐 이다.
물론 inner 조인의 경우 위의 Step3의 단계를 거치지 않기 때문에 구문이 무의미 한다. 하지만 Outer Join 인 경우 위에서 보는 것처럼 On 조건은 Step3 이전에 Where 조건은 Step3 이후에 적용 되게 된다.

VT4
FISSA    Madrid    NULL    NULL
FRNDO    Madrid    1    FRNDO
FRNDO    Madrid    2    FRNDO
KRLOS    Madrid    3    KRLOS
KRLOS    Madrid    4    KRLOS
KRLOS    Madrid    5    KRLOS

Step5 Grouping
group by c.customerid 조건에 맞춰 그룹핑을 한다. 이때 Select 절에는 Count (Orderid)와 같은 형식의 각 그룹당 하나의 결과만 리턴 하도록 해야 한다.
그리고 만약 Group by all 을 이용할 경우에는 Step4의 Where가 무시되게 된다.
마지막으로 Count() 함수는 NULL도 하나의 값으로 처리하게 되지만 SUM, AVG, MIN, MAX는 해당 연살 칼럼에 NULL이 있을 경우 NULL로 처리하게 된다.

VT5
FISSA    Madrid    NULL    NULL
FRNDO    Madrid    1    FRNDO
            Madrid    2    FRNDO
KRLOS    Madrid    3    KRLOS
            Madrid    4    KRLOS
            Madrid    5    KRLOS

  데이터 페이지 들여다 보기 
작성일시 : 2008.05.19 14:45 | 분류 : SQL Server/Kernel | 태그 : dbcc page, page, SQL Server

본 글의 주 출처는 정원혁 선생님의 SQL Server 튜닝 및 inside SQL Server 입니다.

목차
Database 기본기 다지기
1. 선언적 데이터 무결성(Declarative Data Integrity)
2. 트랜잭션 프로세싱

트랜잭션 로그와 데이터 복원
1. 데이터 파일 쓰기
2. 로그 파일 쓰기
3. 트랜잭션 로그를 통한 데이터 복구

트랜잭션 로그 파일과 데이터 파일
1. 트랜잭션 로그 파일
2. 데이터 파일

내부 저장소
1. 데이터 형식 이해하기 (일반 데이터 형식 생략)
2. System View (SQL 2000의 System Table)
3. 데이터 페이지
4. 데이터 페이지 들여다 보기

use tempdb

create table fixed(
    col1 char(4) null
,    col2 int not null
)

insert fixed values ('a', 1)

-- DBCC page시 정확한 결과 반환을 위한 설정
dbcc traceon(3604)

-- DBCC Page ({dbid | dbname}, filenum, pagenum [printopt])
-- 옵션 설명
-- 0 : 버퍼 헤더와 페이지 헤더 출력
-- 1 : 버퍼 헤더, 페이지 헤더, 각 행들, 행 오프셋 테이블
-- 2 : 버퍼 및 페이지 헤더와 페이지 전체와 오프셋 테이블
-- 3 : 버퍼 헤더, 페이지 헤더, 각 행들, 행 오프셋 테이블 출력

--
select * from sysindexes
    where id = object_id('fixed')

-- first : 0x720000000100
-- first 칼럼 값을 스와핑 하여 읽는다.
-- 01 00 : 파일 번호 > 1
-- 72 00 00 00 : 페이지 번호 > 72 > 10진수 변환 시 114

dbcc page (tempdb, 1, 114, 0)
dbcc page (tempdb, 1, 114, 1)
dbcc page (tempdb, 1, 114, 2)
dbcc page (tempdb, 1, 114, 3)

  데이터 페이지 
작성일시 : 2008.05.19 13:51 | 분류 : SQL Server/Kernel | 태그 : data page, dbcc page, SQL Server

정말 오랫만에 공부를 하는거 같네요...^^

목차
Database 기본기 다지기
1. 선언적 데이터 무결성(Declarative Data Integrity)
2. 트랜잭션 프로세싱

트랜잭션 로그와 데이터 복원
1. 데이터 파일 쓰기
2. 로그 파일 쓰기
3. 트랜잭션 로그를 통한 데이터 복구

트랜잭션 로그 파일과 데이터 파일
1. 트랜잭션 로그 파일
2. 데이터 파일

내부 저장소
1. 데이터 형식 이해하기 (일반 데이터 형식 생략)
2. System View (SQL 2000의 System Table)
3. 데이터 페이지

데이터 페이지

•페이지 헤더
–PageId, LSN, tornBits 등의 페이지의 정보가 기록된다.
–tornBits : 손상된 페이지에 대한 쓰기 감지를 위한 Bit (sp_dboption 의 torn page detection 옵션을 통해 조정 가능)

•데이터 행
–데이터 행이 기록된다. (모든 행은 1 Page의 데이터 행 8060byte를 넘어갈 수 없다.)
–Text, ntext, image의 경우 8060 이내일 경우 page 안에 저장한다.

•행 오프셋 배열
–2byte로 구성되어 있으며, 각 행의 논리적 순서를 말한다.
–SQL Server는 행을 구분하기 위해 파일번호 + 페이지 번호 + 페이지 슬롯 번호 를 이용한다.

  System View (SQL 2000의 System Table) 
작성일시 : 2008.05.19 13:48 | 분류 : SQL Server/Kernel | 태그 : SQL Server 2000, SQL Server 2005, system table, system view

목차
Database 기본기 다지기
1. 선언적 데이터 무결성(Declarative Data Integrity)
2. 트랜잭션 프로세싱

트랜잭션 로그와 데이터 복원
1. 데이터 파일 쓰기
2. 로그 파일 쓰기
3. 트랜잭션 로그를 통한 데이터 복구

트랜잭션 로그 파일과 데이터 파일
1. 트랜잭션 로그 파일
2. 데이터 파일

내부 저장소
1. 데이터 형식 이해하기 (일반 데이터 형식 생략)
2. System View (SQL 2000의 System Table)

System View (SQL 2000의 System Table)
SQL Server 2005 에서는 System Table이 System View로 변경되어 직접 수정이 불가능하게 돼었다.
이중 sysobjects와 sysindexes 를 보도록하겠다.

•Sysobjects
 
–DB Object들 (Table, 시스템 Table 등)의 Name, ObjectID 등을 포함하는 정보 저장

•Sysindexes
 
–각 칼럼에 대한 한 개 행 및 칼럼에 대한 정보 저장

  데이터 파일 
작성일시 : 2008.02.13 10:00 | 분류 : SQL Server/Kernel | 태그 : bcm, DCM, GAM, iam, MDF, PFS, sgam

힘들게 여기까지 왔습니다...
혼자서 공부하려니 정말 힘들군요... 그래도 원리를 아는 사람이 되자라는 생각으로 공부하고 있습니다...
도움을 주신 조현정 과장님 감사합니다...^_________^v
다음번에는 아예 직접 테이블을 까서 볼까 합니다... 즉 페이지들을 직접 다 보는거죠....

목차
Database 기본기 다지기
1. 선언적 데이터 무결성(Declarative Data Integrity)
2. 트랜잭션 프로세싱

트랜잭션 로그와 데이터 복원
1. 데이터 파일 쓰기
2. 로그 파일 쓰기
3. 트랜잭션 로그를 통한 데이터 복구

트랜잭션 로그 파일과 데이터 파일
1. 트랜잭션 로그 파일
2. 데이터 파일

•데이터 구성 단위 : 1 Page = 8 KB

- 1 page는 1 Row 의 크기

- Text 및 Image를 저장할 경우 해당 Row 크기가 8 KB 미만일 경우 해당 Page에 저장 (SQL Server 2005의 경우)
• 개체 할당 단위 : 1 Extent = 8 Pages = 64 KB
• 익스텐트 의 종류

- 혼합 익스텐트 : 여러 개체에 의해 소유 됨 ( 최대 8개)

- 균일 익스텐트 : 한 개체에 의해 소유 됨
•모든 개체는 혼합 익스텐트에 할당 된 후 균일 익스텐트에 할당 됨 (공간 절약)

- Table 데이터 할당에 따른 혼합 익스텐트와 균일 익스텐트 할당 확인
• Table 데이터 할당에 따Table 생성 후 혼합 익스텐트에 데이터가 저장 됨 ( reserved 확인 시 8KB 씩 증가)

데이터 파일을 관리하는 페이지

• 데이터 파일은 파일 헤더 외에 해당 데이터의 페이지를 관리하는 특수한 페이지들이 있다. 8 KB로 관리할 수 있는 범위 안에서 이후 데이터에 대한 여러 가지 설정을 관리하게 되며, 관리 범위가 벗어나면 다시 해당 페이지들이 생성 되고 관리하게 된다.

• PFS
– ntext, text, image 칼럼 할당 여부 및 각 페이지의 빈 공간 크기 기록 (0_PCT_FULL, 50_PCT_FULL, 100_PCT_FULL)
– 약 8,000 페이지를 관리

• GAM 과 SGAM : bit 단위로 Extent에 대한 할당을 관리한다.
– GAM (전역 할당 맵) : 사용 중 (1), 미사용 중 (0)
– SGAM (공유 전역 할당 맵) : 혼합 익스텐트 (1), 균일 익스텐트 or 모든 페이지가 Full (0)
– 약 64,000 bit 를 이용 64,000개의 익스텐트 (4GB) 관리
 
– 테이블이 생성 되어 익스텐트를 할당 받을 때 해당 GAM, SGAM이 변경이 되는데, 이때 잠금(Allocation LocK)이 발생한다.
즉 저장 프로시저 등에서 임시 테이블을 만들고 이를 많은 사용자들이 호출하게 되면 할당 잠금으로 인한 심각한 성능 저하가 발생할 수 있다. 데이터 파일 개수를 증가 시켜 성능 저하 현상을 감소 시킬 수 있다.

•DCM
–데이터베이스 전체 백업 이후 변경된 익스텐트를 추적
–약 64,000 bit 를 이용 64,000개의 익스텐트 (4GB) 관리

•BCM
–대량 복구 모드일 경우에만 사용
–마지막 Backup log 이후 대량 기록 작업에 의해 수정된 익스텐트 추적
–대량 복구 모드에서 log 백업 시 변경된 페이지 (BCM을 통해 추적된 페이지)도 같이 저장하기 때문에 일반 로그 백업에 비해 크기가 클 수 있다.
–약 64,000 bit 를 이용 64,000개의 익스텐트 (4GB) 관리

• IAM
– 인덱스에 의해 사용되는 데이터베이스 파일의 익스텐트를 매핑
– 파일의 고정된 부분에 위치 하지 않음
Sysindexs.FirstIAM 칼럼에서 첫 번째 IAM 페이지를 가르키며, 이 후 Linked List 로 연결되어 있음
(SQL 2005에서 Sysindexs 는 시스템 뷰)
– 해더 + 8개의 페이지 포인터 슬롯 + 익스텐트 범위 맵핑 비트로 구성

• 해더 : IAM에 의해 매핑 되는 첫 번째 익스텐트 주소

• 페이지 포인터 슬롯 : 혼합 페이지 8 개 페이지들에 대한 포인터
개체의 첫 번째 IAM 만 가지고 있음 : Table 생성 시 혼합 익스텐트에 할당 되기 때문

• 익스텐트 범위 맵핑 비트 : IAM 페이지에서 관리되는 익스텐트를 지정 (약 512,000 페이지)
– 제 예상은 sysindex 에 인덱스 주소가 할당이 되고 이를 관리하 페이지가 IAM 일 것 같습니다.
데이터파일이 여러 개일 경우 IAM이 여러 개 존재 하며 이는 raid 0 처럼 들어가는데 이 때문에 약간의 왜곡이 있을 수 있다.

  트랜잭션 로그 파일 
작성일시 : 2008.02.01 16:18 | 분류 : SQL Server/Kernel | 태그 : LSN, 트랜잭션 로그 파일

목차
Database 기본기 다지기
1. 선언적 데이터 무결성(Declarative Data Integrity)
2. 트랜잭션 프로세싱

트랜잭션 로그와 데이터 복원
1. 데이터 파일 쓰기
2. 로그 파일 쓰기
3. 트랜잭션 로그를 통한 데이터 복구

트랜잭션 로그 파일과 데이터 파일
1. 트랜잭션 로그 파일

• VLF의 상태
- 활성 : 로그의 최소 LSN 부터 마지막 LSN 까지의 부분
- 복구 가능 : 가장 오래된 활성 트랜잭션의 앞 부분
- 재 사용 가능 : 백업 VLF

• 로그에 기록되는 정보
트랜잭션, 트랜잭션 시작/끝 구분, 저장점, LSN, 데이터 변경 정보, Commit 정보, 인덱스 리빌드 정보 등

• Circular Queue 처럼 동작함 모든 VLF가 채워질 때 로그가 증가

* 로그가 조금씩 증가하면 작은 가상 로그 파일들이 많이 만들어 지고 이는 성능에 나쁜 영향을 미친다.

• 트랜잭션 로그 파일 확인
LSN 등을 확인 할 수 있다.

  로그 파일 쓰기 
작성일시 : 2008.01.23 20:18 | 분류 : SQL Server/Kernel | 태그 : LSN, Microsoft sql server, 로그 파일 쓰기

목차
Database 기본기 다지기
1. 선언적 데이터 무결성(Declarative Data Integrity)
2. 트랜잭션 프로세싱

트랜잭션 로그와 데이터 복원
1. 데이터 파일 쓰기
2. 로그 파일 쓰기

SQL Server는 자신의 데이터와 관련된 모든 행동을 트랜잭션 로그에 기록한다.

•트랜잭션이 디스크의 트랜잭션 로그에 들어 있지 않으면 프로세스는 결코 트랜잭션이 커밋 되었다는 것을 통보 받지 못한다.

•각 로그 항목들은 로그 시퀀스 번호 (LSN) 라벨이 붙는다.

•LSN 번호는 Page 의 해더에 저장되며, 해당 Page는 버퍼에 있으므로 Disk에 아직 반영 되지 않았을 수 있다.

•로그에는 검사점, 트랜잭션의 시작 / 끝, 저장 점 정보, 데이터 변경에 대한 정보, Rollback 정보 등이 기록된다.

•로그의 LSN이 로그에 기록된 마지막 페이지의 LSN 보다 작을때 변경된 페이지가 디스크에 기록된다.

  데이터 파일 쓰기 
작성일시 : 2008.01.23 20:16 | 분류 : SQL Server/Kernel | 태그 : check point, Microsoft sql server, 검사점, 데이터 파일 쓰기

목차
Database 기본기 다지기
1. 선언적 데이터 무결성(Declarative Data Integrity)
2. 트랜잭션 프로세싱

트랜잭션 로그와 데이터 복원
1. 데이터 파일 쓰기

Check Point ,발생 시 데이터의 변경된 부분 (Dirty Page)이 실제 Disk에 반영된다.

 

•검사점 발생 상황
- 명시적인 Checkpoint 명령어 실행
- 로그 용량이 70%이상 찼고 데이터베이스가 SIMPLE 모드 일 경우
- 긴 복구 시간이 예상될 경우 (SQL 기본값은 1분)

•검사점은 sp_configure 의 복구 간격 옵션을 사용하여 조정이 가능하다.
물론 시작시 -T3502 플래그를 설정하여 검사점 실행시 이벤트 로그에 로그를 남길 수 도 있다.

•검사점 레코드는 트랜잭션 로그에 기록된다.

 Prev   1   2   Next