Database/MS-SQL

04장 - 1일,2일차

99iberty 2014. 10. 27. 17:22

 

 

 

3.현재 진행중인 작업을 완료

-> 1시간짜리 작업이 걸려 있다면, 한시간 다 걸리고 해당 작업이 완료된 후에 작업이 중지된다.

 

 

cmd 열어서,

C:\> SQLCMD

1> SHUTDOWN

2> GO

하면 정상 종료 중지 방법

 

즉시 종료시키고 싶다면?

no wait 옵션

 

 

 

 

커밋된 트랜잭션 로그가 있으면 데이터를 살려낼 수 있다. (1,2,3 시나리오)

커밋되지 않은, 완료되지 않은 데이터는?
-> 롤백시킴. 작업하기 이전 상태로 되돌아감.
완료되지 않은 트랜잭션 로그를 이용해서 롤백함.


성능을 위해서?
하나의 하드디스크에 있으면 체크포인트가 발생할 때 데이터와 로그를 저장할 텐데,
I/O가 경합이 발생한다! (물리적 디스크 레벨에서 격리)
데이터와 로그파일을 디스크를 분리하면, 경합이 발생하지 않는다.

(RAID: I/O 분산해서 빠르게 해줄 수 있음.)

로그파일 : 미러링으로 보호.
데이터 파일 : stripe... i/o 처리 빠르게 할 수 있도록.....흠
     액세스 타임이 빠른 구성 방식을 이용.
     스트라이프 하기엔 그래도 좀 위험성이 있으니까, 1/0 혹은 6 하는 걸로.
     SSD 만약 있다면 데이터 파일용도로 쓴다.

로그도 디스크 분리하면 좋을까?
로그는 순차적으로 기록하기 때문에, 디스크 분산시킬 필요가 없다.


데이터는 페이지 단위에 저장된다.
페이지는 8개가 모여서 하나의 extent가 된다.
extent : 하나의 테이블을 이루는 기본 단위.


데이터파일 사이즈는 동일하게 만드는 게 기본적인 방법. (근데 자동증가 시키면 달라지자나?)
여러개의 데이터파일 이용하면, 파일맵이 만들어져서 데이터 저장시 분산시킨다.


DB 초기 사이즈 : 1년동안 자동증가 안하도록 용량 산정해서 설정해 놓음.
  충분히 크게 사이즈 설정.

너무 작은 단위로 증가하게 하면.....
증가할 때마다 DB 잠금이 발생하는데, 너무 자주 잠금이 발생하게 됨.
작게 증가하면 조각화도 발생한다.
연속성이 없이 추가된 공간만큼 조각화 발생.

 

 

SYS데이터베이스의 역할은?

: SQL 서버의 운영과 관련한 정보들을 저장한다.

 

 

자동화 관련 내용이 sql 에이전트인데, 얘는 MSDB를 주로 참고한다.

 

MODEL : 템플릿.이라고 생각하면 된다.

RESOURCE: 시스템 객체들이 저장되어 있는 곳이 리소스 시스템 데이터베이스

존재하기는 하되, 보여지지 않는 데이터베이스임.

 

 

복제 설정 하게 되면 정보 관리하기 위한 시스템 데이터베이스가 생김.

replication

 

 

--------------
 

create #테이블명 ? 여튼 #을 붙이면 임시테이블

-> 조회한 결과를 여러번 참조하기 위해 만든 임시테이블

 

Common Table E?? : 조회한 결과를 한번 참조하기 위한

 

 

tempdb는 기본적으로 i/o가 많을 수 밖에 없다.

tempdb는 기본적으로 시스템데이터베이스와 같은 경로에 있게 되는데, 디스크 따로 두는게 좋다.

 

 

-------------------

DB속성에서..

자동 축소 : 사용하지 않는 공간 25%가 될때까지 줄인다.

 

 

쿼리 옵티마이저

사용자가 실행한 명령이 최적화된 상태에서 실행될 수 있도록 보장한다.

인덱스를 뒤질지 직접 테이블을 뒤질지 옵티마이저가 판단함.

통계정보(전체 레코드를 200등분해서 갖고 있는 분포도)를 바탕으로 그걸 판단함.

 

 

액세스 제한

MULTI_USER : 이 DB에 등록된 모든 사용자들이 들어올 수 있게 하겠다.

SINGLE_USER : only one

RESTRICTED_USER : 높은 권한 가진 애만 들ㅇㅓ 올 수 있게 하겠다.

 

 

ANSI NULL 기본값

 

 

비상로그 백업 : 현재 살아 있는 트랜잭션 로그를 백업

 

 

트랜잭션이 커밋되면 되돌릴 수 있는 방법이 없다.

이 때 비상로그 백업을 이용해서 예전 데이터로 되돌린다.

이렇게, 시점을 지정해서 복구하려면 복구모델이 FULL로 되어야 살릴 수 있다.

 

 

도움말 - 색인 하면 정보 많이 볼 수 있음.

 

대량 로그 : 대량 작업과 관련한 로그를 최소화....?

문제가 발생하기 직전의 상태로 복구할 수는 있지만, 원하는 시점을 지정해서 복구할 수는 없다.

대량로그는 보통 DW 운영환경에서 사용.

어차피 일반 DB운영환경에서는 대량작업 자체가 별로 없고, 게다가 시점 지정 복구도 불가능하기 때문에 비추한다.

 

OLTP : 실시간으로 데이터 수정되는 업무처리중심의 데이터베이스 운영 환경

DW : 사용자들이 직접 연결 안함. OLTP에 있는 디비를 주기적으로 DW로 넘겨줌. 그 때 이용하는 솔루션을 ETL 솔루션. (SQL SERVER INTEGRATION SERVICE)

DW에는 분석을 위한 데이터가 필요함.

예를 들어 당일 판매한 판매 데이터. 일 마감했으면, 고객 정보 이런것들 넘어가지면, 하나씩 레코드 입력되는게 아니라

한꺼번에 입력된다 (bulk , bcp등으로)

한꺼번에 입력되면서 데이터가 쌓이는 DB이다.

 

 

단순 모드 : 트랜잭션 로그를 관리하지 않는다.

-> 체크포인트가 발생하면 커밋된 트랜잭션 로그들을 지운다.

게다가 대량로그모드처럼 대량 작업에 대해서 최소화된 기록을 하고...

테스트 환경에서 사용..

 

 

호환성 수준 : 일반 어플리케이션에서 직접 sql에 쿼리를 날릴 때..

DB에 있는 저장 프로시저는 수정할 수 있는데, 어플리케이션 쪽은 수정할 수 없으니,

호환성 수준을 여기서 설정하는 것.

 

 

파일 즉시 초기화 : 시간이 없을 때... allocation map정보만 없애고 실제 zerofill은 하지 않는 것.

볼륨유지관리작업을 할 수 있는 권한을 줘야 파일 즉시 초기화 작업이 가능함.

 

 

프라이머리 그룹 하나는... 무조건 지정?이고

그 이후의 데이터파일들은 사용자가 원하는데로 지정해서 파일그룹을 만들 수 있다.

 

파일 그룹을 사용하는 이유?

1. 성능상의 이점

엄청 큰 테이블이 있다. 인덱스가 많이 만들어지는데, 그 테이블에 있는 파일그룹에 인덱스들이 생성된다.

데이터 한번 입력하면 각각의 인덱스의 정보들이 갱신되어져야 하는데,

그 I/O가 특정 파일그룹에 집중되어진다.

테이블과 다른 파일 그룹에 인덱스를 분리시킬 수 있는데,

데이터입력 I/O와 인덱스 갱신 I/O를 분리시킬 수 있다.

 

한 테이블을 또 분할시킬 수가 있는데........ partitioned table.

하나의 테이블을 여러개 만들 수 있고 각 분할된 테이블들을 각각 다른 파일 그룹에 넣을 수 있다.

파일그룹 기반해서만 분할된 테이블을 만들 수 있다.

 

2. 관리상의 이점

파일그룹 단위로 백업과 복구를 할 수 있다.

예를 들어 10T의 데이터베이스가 있다. 얘를 백업받는데 엄청 오래 걸린다.

복원도 엄청 걸린다...

파일그룹단위로 백업받을 수 있기 때문에, 백업/복구 소요시간이 조금 걸린다.

 

읽기 전용 파일그룹을 구성할 수 있다.

예를 들어 과거 히스토리 데이터들을 따로 구성하는 경우가 있다.

조회할 때도 수정/삭제 할 수 있다라는 가정을 하기 때문에 조회만 해도 잠금이 걸리는데,

그런 성능 향상을 위한......

 

 

 

프로그램은 DB의 논리적 구조에 액세스하기 때문에 물리적 구조(파일그룹 분리)를 변경한다 하더라도 상관 없다.

sqlserver 서비스에서 서비스 시작이 안되었던 이유는, 서비스 시작 계정에 충분한 권한이 없었기 때문.

 

 

 

 

 

 

'Database > MS-SQL' 카테고리의 다른 글

6장  (0) 2014.10.29
05장 - 2일차  (0) 2014.10.28
02장 - 1일차  (0) 2014.10.27
01장 - 1일차  (0) 2014.10.27
1일차  (0) 2014.10.27