15. 로그 전달 - Log Shipping

- 주 서버 인스턴스의 주 데이터베이스 에서 별도의 보조 서버 인스턴스에 있는 하나 이상의 보조 데이터베이스로 트랜잭션 로그 백업을 자동으로 보내는 작업.

- 자동 장애 조치가 없다.

- 에이전트로 이루어 지므로 실시간 동기화는 불가능.

- 모니터 서버라는 선택적인 세 번째 서버 인스턴스는 백업 및 복원 작업의 기록과 상태를 기록하고 예약된 대로 작업이 실행되지 않으면 선택적으로 경고를 발생시킨다.

 

(1) 조건 및 권한

  - 주 데이터베이스는 복구 모델이 전체 또는 대량 로그 복구 모델이어야 한다. / Full or Bulk Logged

  - 공유를 만들어 트랜잭션 로그 백업을 보조 서버에서 사용할 수 있도록 설정해야 함.

 

(2) 순서

  1. 주 서버 인스턴스에서 트랜잭션 로그를 백업합니다.

  2. 보조 서버 인스턴스에 트랜잭션 로그 파일을 복사합니다.

  3. 보조 서버 인스턴스에 로그 백업을 복원합니다.

 

Covered Index : 출력되어야 하는 모든 컬럼이 인덱스 구성에 포함되어 있는 경우.

 

Include Index :  키가 아닌 열을 포함하여 여러 쿼리를 처리하는 비클러스터형 인덱스를 만드는 것.

  • 키가 아닌 열은 인덱스 키 열로 사용할 수 없는 데이터 형식입니다.
  • 인덱스 키 열의 수 또는 인덱스 키 크기를 계산할 때 데이터베이스 엔진 은 키가 아닌 열을 고려하지 않습니다.

쿼리의 모든 열이 키 열 또는 키가 아닌 열로 인덱스에 포함되면 키가 아닌 열이 있는 인덱스는 쿼리 성능을 상당히 향상시킬 수 있습니다. 성능이 향상되는 이유는 쿼리 최적화 프로그램이 테이블 또는 클러스터형 인덱스 데이터에 액세스하지 않고 인덱스 내에서 모든 열 값을 찾을 수 있으므로 디스크 I/O 작업을 줄어들기 때문입니다.

 

 

Covered Index 생성

Table Test0123 의 Key는 SalesOrderID 

 

CREATE INDEX Cidx_TEST0123  ON TEST0123 (SalesOrderID, ProductID)  


Include Index 생성

 

Table Test210123_1 의 Key는 SalesOrderID 

 

CREATE INDEX Iidx_TEST0123_1 ON TEST0123_1 (SalesOrderID)      

INCLUDE (ProductID)



 

100만건 기준

 

Include Index > Covered Index > 인덱스 없음.

 

 

'MSSQL 기본' 카테고리의 다른 글

[MSSQL] BULK INSERT  (0) 2021.01.26
[MSSQL] ColumnStore Index  (0) 2021.01.25
[MSSQL] MSSQL 복제(Replications)  (0) 2020.10.30
[MSSQL] SQL Server 아키텍처  (0) 2020.10.29
[MSSQL] SQL문장종류 / DML, DDL, DCL, TCL  (0) 2020.10.29

14. Replication - 복제

복제는 한 데이터베이스에서 다른 데이터베이스로 데이터와 데이터베이스 개체복사 및 배포한 다음 데이터베이스 간에 동기화를 수행하여 일관성을 유지하는 일련의 기술

 

(1) 스냅샷 복제 - 많은 양의 데이터가 변경되지만 자주 변경되지는 않을 때 가장 적합. 단독으로 사용할 수 있지만 게시에서 지정한 모든 개체 및 데이터의 복사본을 만드는 스냅샷 프로세스는 일반적으로 트랜잭션 및 병합 게시에 대한 초기 데이터 및 데이터베이스 개체 집합을 제공하는 데에도 사용

 

(2) 트랜잭션 복제  - 스냅샷 복제로 데이터 동기화 이후, 데이터 변경과 스키마 변경을 로그 판독기 에이전트가 수집하여 배포 DB에 기록하면 구독자에게 반영. 실시간 동기화가 된다. 일반적으로 확장성 및 가용성 향상, 데이터 웨어하우징 및 보고, 여러 사이트의 데이터 통합, 다른 유형의 데이터 통합, 일괄 처리 작업 오프로드 등을 포함하여 높은 처리량이 필요한 서버 간 시나리오에서 사용.


(3) 병합 복제  - 게시자와 구독자의 데이터 변경과 스키마 변경내용을 트리거로 추적해서 변경 추적 테이블에 기록하고, 그 내용을 병합해서 게시자와 구독자에 반영. 관리가 다소 복잡. 주로 데이터 충돌 가능성이 있는 모바일 애플리케이션이나 분산 서버 애플리케이션에 사용됩니다. 일반적인 시나리오에는 모바일 사용자와 데이터 교환, 소비자 POS(Point of Sale) 애플리케이션, 여러 사이트의 데이터 통합 등이 있음.

 

(4) 피어 투 피어 복제 - 노드(Node)라고 하는 여러 SQL Server 인스턴스로 DB 복제본을 유지 관리. 확장성과 고가용성 이점. 모든 데이터를 복제. 거의 실시간으로 일관되게 전파.

 

 

 

13. DMV - 동적관리뷰 

동적 관리 뷰 및 함수는 서버 인스턴스 상태 모니터링, 문제 진단 및 성능 튜닝에 사용할 수 있는 서버 상태 정보를 반환합니다.

 

동적 관리 뷰 또는 함수를 쿼리하려면 개체에 대한 SELECT 권한과 VIEW SERVER STATE 또는 VIEW DATABASE STATE 권한이 필요합니다. 

 

- 동적관리뷰 개수는? : 아래 쿼리를 활용하여 확인해보니 총 273개입니다.

SELECT N'SYS.' + NAME AS NAME, TYPE_DESC 
  FROM SYS.SYSTEM_OBJECTS 
 WHERE NAME LIKE N'DM[_]%' 
 ORDER BY NAME
 

 

 

모두를 알기는 불가능하니, 자주 쓰는 DMV에 대해서 알아보겠습니다.

 

(1) sys.dm_exec_query_stats - 캐시된 쿼리 계획에 대한 집계 성능 통계

ex - 평균 CPU 시간별로 상위 5개의 쿼리 찾기

SELECT TOP 5 query_stats.query_hash AS "Query Hash",   
    		 SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time",  
             MIN(query_stats.statement_text) AS "Statement Text"  
  FROM  (SELECT QS.*,  SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,  
		((CASE statement_end_offset WHEN -1 THEN DATALENGTH(ST.text)  
         	 ELSE QS.statement_end_offset END   
                    - QS.statement_start_offset)/2) + 1) AS statement_text  
     	   FROM sys.dm_exec_query_stats AS QS  
     	  CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats  
 GROUP BY query_stats.query_hash  
 ORDER BY 2 DESC;  

 

(2) sys.dm_exec_sql_text(sql_handle)  - 지정 된 sql_handle 에 의해 식별 되는 SQL 일괄 처리의 텍스트를 반환

- text 컬럼에 SQL 쿼리 실행 텍스트가 나옴.

 SELECT B.text,* 
  FROM sys.dm_exec_query_stats AS A
  CROSS APPLY sys.dm_exec_sql_text(A.sql_handle) AS B  
 ORDER BY A.creation_time DESC

 

(3) sys.dm_exec_procedure_stats - 저장 프로시저에 대한 집계 성능 통계

- 평균 경과 시간으로 식별된 상위 10개의 저장 프로시저 찾기 예제

SELECT TOP 10 d.object_id, d.database_id, OBJECT_NAME(object_id, database_id) 'proc name',   
       d.cached_time, d.last_execution_time, d.total_elapsed_time,  
       d.total_elapsed_time/d.execution_count AS [avg_elapsed_time],  
       d.last_elapsed_time, d.execution_count  
  FROM sys.dm_exec_procedure_stats AS d  
 ORDER BY [total_worker_time] DESC;  

 

(4) sys.dm_exec_requests실행 되는 각 요청에 대한 정보를 반환

(5) sys.dm_exec_query_plan - 계획 핸들로 지정한 일괄 처리에 대한 XML 형식의 실행 계획을 반환

 

테스트를 위해 VMWare에 Windows SERVER 2016을 설치해보겠습니다.

먼저 아래 VMWare 사이트에 들어가서 무료판을 다운로드합니다.

 

(1) www.vmware.com/kr.html

(2) 설치를 하고

 

(3) 실행을 합니다

 

 

(4) 그 다음 아래 사이트에서 SQL Server 2016 ISO를 받습니다.

 

동의하고 정보를 입력하고 또 동의~

 

 

언어는 영어로

 

다운로드중........

 

 

(5) 설치 시작

 

 

3번째를 선택하고 다음

 

 

Windows Server 2016를 찾아서 선택해줍니다.

 

 

원하는대로 용량을 설정해주세요.

Finish

 

 

(6) ISO 설정

 

CD/DVD 에 다운받은 ISO를 선택합니다

 

 

그 다음 Windows Server를 실행해 주세요

실행되면 엔터를 연타!! 

아래와 같이 나옵니다. 

 

 

Next - Install Now 선택

2번째 데스크탑 환경 선택

 

 

Custom 선택

 

Next - 설치중..

 

설치 완료

 

10. 백업 종류
 (1) 전체 백업 : DB의 모든 데이터를 백업. 백업이 진행되는 동안 발생한 트랜잭션 로그도 백업.

 (2) 차등 백업 : 전체 백업 이후 백업되지 않은 변경된 데이터만 백업.

 (3) 트랜잭션 로그 백업 : 트랜잭션 로그 파일을 백업하고 로그를 지움. 설정으로 안지울수 있다. FULL, BULK_LOGGED    복구모델만 가능

 (4) 로그 꼬리 백업 : 백업되지 않고 남아있는 로그를 백업. 마지막 로그 백업

 (5) 파일/파일 그룹 백업 : 데이터베이스 크기가 커서 파일 또는 파일그룹을 백업.

 (6) 부분 백업 : 파일 그룹 중 PRIMARY 파일 그룹과 읽기/쓰기가 가능한 파일 그룹을 백업. (OR 명시적으로 읽기 전용 파일 그룹도 포함해서 가능)

 (7) 복사 전용 백업  : 다른 백업에 영향을 끼치지 않고 전체 백업이나 트랜잭션 로그 백업을 할 수 있다.

 

11. 복구 모델

 (1) 전체(FULL) : 모든 데이터 변경에 대한 로그를 트랜잭션 로그 파일에 기록. 특정시점 복원이 가능. 로그 파일 용량이계속 커지므로 관리 필요.

 (2) 대량로그(BULK_LOGGED) : 대량 로그 작업으로 발생하는 트랜잭션 로그를 최소화하여 작업을 빠르게. BCP, BULK INSERT, INSERT~ SELECT, CREATE INDEX, ALTER INDEX REBUILD 등.  대량로그 작업이 발생하면 특정시점으로 복원 할 수 없다. 디스크 성능이 좋아짐에 따라 잘 쓰지 않음.

 (3) 단순(SIMPLE)  : 트랜잭션이 완료되면 지워짐. 다양한 복원 작업 불가.

9. 데이터베이스 옵션

 

(1) 자동 옵션

  • 자동 닫기(AUTO_CLOSE) : 기본OFF. ON이면 마지막 사용자가 끝낸 후 데이터베이스가 종류되고 리소스가 해제 됨. 
  • 자동 축소(AUTO_SHRINK) : 기본 OFF. ON이면 파일에서 사용되지 않는 공간이 25% 이상 일 때 파일을 자동으로 축소함.
  • 증분 통계 자동 작성(INCREMENTAL) : 기본 OFF. ON이면 AUTO_CREATE_STATISTICS가 ON일 경우 파티션별로 통계 생성.
  • 통계 자동 작성(AUTO_CREATE_STATISTICS) : 기본 ON. ON이면 쿼리 최적화에 필요한 누락된 통계가 최적화 동안 모두 자동으로 작성 됨.
  • 통계 자동 업데이트(AUTO_UPDATE_STATISTICS) : 기본 ON. ON이면 쿼리 최적화에 필요한 오래된 통계가 모두 자동으로 업데이트 됨.
  • 통계 비동기 자동 업데이트(AUTO_UPDATE_STATISTICS_ASYNC) : 기본 OFF. ON이면 AUTO_UPDATE_STATISTICS 옵션에 의한 통계 업데이트가 비동기로 수행 됨. 쿼리 최적화 프로그램이 쿼리를 컴파일 할 때 통계 업데이트가 완료될 때까지 기다리지 않음.

 

 

(2) 상태 옵션

  • 데이터베이스 상태(OFFLINE | ONLINE | EMERGENCY) : OFFLINE - DB 종료, ONLINE - DB 열림, EMERGENCY - 로그파일이 손상되어 "주의 대상"으로 표시된 DB를 읽을 수 있음.
  • 데이터베이스 읽기 전용(READ_ONLY | READ_WRITE) : READ_ONLY - 읽기만 가능, READ_WRITH - 읽기/쓰기 가능.
  • 액세스 제한 (SINGLE_USER | RESTRICTED_USER | MULTI_USER) : SINGLE_USER - 한명만 가능, RESTRICTED_USER - db_owner 고정 DB 역할. dbcreator, sysadmin 고정 서버역할 멤버만 접속 가능, MULTI_USER - 여러명 가능

 

 

(3) 복구 옵션

  • 복구모델 : 전체(FULL)  - 전체복구, 대량로그(BULK_LOGGED) - 특정 대량 작업에 대해 로그공간 최소. 대량작업성능UP, 단순(SIMPLE) - 최소의 로그 공간 사용. 로그 백업 불가.
  • 페이지확인(PAGE_VERIFY) : CHECKSUM - 전체 페이지 내용에 대한 체크섬 계산 후 페이지헤더에 저장 이후 비고, TORN_PAGE_DETECTION - 페이지 8KB중 512Byte 섹터에 대해 특정 2bit 패턴을 페이지 헤더에 저장 이후 비교, NONE - 페이지 확인 하지 않음.

 

 

 

7. 파일 그룹 종류

예를 들어 세 개의 디스크 드라이브에 Data1.ndf, Data2.ndf, Data3.ndf를 각각 만들어 fgroup1이라는 파일 그룹에 할당

그런 다음 fgroup1 파일 그룹에 한 개의 테이블을 만들 수 있습니다. 

이렇게 하면 해당 테이블의 데이터에 대한 쿼리가 3개의 디스크로 분산되므로 성능이 향상됩니다.

 

(1) 기본(주) 파일 그룹(PRIMARY FILE GROUP)

    PRIMARY 파일 그룹.  주 파일을 포함하는 파일 그룹. 모든 시스템 테이블은 주 파일 그룹의 일부입니다.    

 

(2) 사용자 정의 파일그룹(User-defined File Groups)

    사용자가 데이터베이스를 처음 만들거나 나중에 수정할 때 만드는 파일 그룹입니다.

 

8. 파일 그룹 추가

(1) 데이터베이스 속성 사용

 

 

(2) 스크립트 사용

USE master
GO

-- FirstDB02에 UFG01 사용자 정의 파일 그룹 추가
ALTER DATABASE FirstDB02 ADD FILEGROUP UFG01
GO

-- UFG01 파일 그룹에 파일 추가
ALTER DATABASE FirstDB02
ADD FILE 
(
	NAME = 'FirstDB02_02',
    FILENAME = 'C:\SQLDATA\FirstDB02_02.ndf',
    SIZE = 512MB,
    FILEGROWTH = 128MB
) 
GO

-- UFG01 파일 그룹을 기본 파일 그룹으로 변경
ALTER DATABASE FirstDB02
MODIFY FILEGROUP UFG01 DEFAULT
GO

 

 

5. 데이터베이스 만들기

(1) 논리적 이름 : 데이터베이스 명

(2) 소유자 : 데이터베이스의 소유자. 모든 권한을 가짐

(3) 파일 그룹 :

  • 파일 그룹은 주 데이터 파일과 다른 파일 그룹에 배치되지 않은 보조 파일을 포함합니다.
  • 사용자 정의 파일 그룹을 만들어 데이터 파일을 그룹화함으로써 관리, 데이터 할당 및 배치를 간편하게 수행할 수 있습니다.

6. 데이터베이스 생성 스크립트

 

(1) CREATE DATABASE

 

 

(2) 요구사항에 맞게 : NAME, FILENAME, SIZE, MAXSIZE, FILEGROWH 지정

                            이름, 데이터파일, 크기, 최대크기, 자동증가

 

 

3. 데이터베이스 구조,파일

데이터베이스의 시작 정보를 포함하며 데이터베이스의 나머지 파일을 가리킵니다. 모든 데이터베이스에는 하나의 주 데이터 파일이 있습니다. 권장되는 주 데이터 파일 확장명은 .mdf입니다.
보조 선택적 사용자 정의 데이터 파일입니다. 각 파일을 서로 다른 디스크 드라이브에 배치하여 데이터를 여러 디스크에 분산시킬 수 있습니다. 권장되는 보조 데이터 파일 확장명은 .ndf입니다.
트랜잭션 로그 이 로그에는 데이터베이스 복구에 사용되는 정보가 저장됩니다. 데이터베이스마다 최소한 하나의 로그 파일이 있어야 합니다. 권장되는 트랜잭션 로그 파일 확장명은 .ldf입니다.

 - 데이터 파일 : 주 데이터(기본데이터) 파일 mdf / 보조 데이터 파일 ndf

 - 로그 파일   : 트랜잭션 로그 파일 ldf 

                    트랜잭션 처리 내용 / 데이터 추가, 변경, 삭제 내용 

 

※ 확장명 바꿔도 되나 되도록 그대로 씀.

기본적으로 데이터와 트랜잭션 로그는 단일 디스크 시스템을 처리하기 위해 동일한 드라이브와 경로에 배치

  이 선택은 프로덕션 환경에서는 최적이 아닐 수도 있습니다. 

   데이터와 로그 파일은 서로 다른 디스크에 배치하는 것이 좋습니다.

 

 

4. 페이지와 익스텐트

 

(1) 페이지 : 모든 데이터 페이지의 크기는 8kb( 8060 Byte),  1MB에 128개의 페이지 

               SQL Server 데이터 파일의 페이지는 첫째 페이지가 0으로 시작하여 순차적으로 번호가 매겨짐. 

               데이터베이스의 파일마다 고유한 파일 ID 번호가 존재. 

               데이터베이스에서 페이지를 고유하게 식별하려면 해당 파일 ID와 페이지 번호가 모두 필요.

               

 

(2) 익스덴트 : 연속하는 8페이지 64KB. 

  • 균일 익스텐트는 단일 개체가 소유. 또한 익스텐트의 전체 8페이지는 소유하는 개체만 사용할 수 있음.
  • 혼합 익스텐트는 최대 8개의 개체가 공유할 수 있음. 익스텐트의 8페이지를 각각 다른 개체가 소유할 수 있음.

 

출처 : docs.microsoft.com/ko-kr/sql/relational-databases/databases/database-files-and-filegroups?view=sql-server-ver15

+ Recent posts