반응형
반응형

성능 모니터에서 현재의 성능 카운터를 모니터링하는 것은 모두 잘 알고 계실 것입니다.
그렇지만 DBA가 아닌 분들은 성능 로그를 수집하는 방법에 대해서는 잘 모르시는 분들이 계실 것 같아 성능 로그를 수집하는 방법을 소개하고자 합니다.

성능 로그 설정하기

1.       [시작] a [설정] a [제어판] a [관리] a [성능] 선택합니다.

2.       [성능 로그 경고] 더하기 기호(+) 클릭합니다.

3.       카운터 로그를 선택합니다.

4.       오른쪽 창에 마우스를 대고 오른쪽 버튼을 클릭하여, [ 로그 설정] 선택합니다.

5.       [ 로그 설정] 원하는 로그 이름을 입력하고, [확인] 클릭합니다.

6.       Counter_Log화면에 사용 정보와 파일 포맷을 설정합니다.

7.       [개체추가] 선택하여, 원하는 개체를 추가합니다.

8.       [카운터추가] 선택하여, 원하는 카운터를 추가합니다.

9.       [데이터 샘플 간격] [간격] [단위] 선택합니다.

10.   [로그파일]탭을 선택합니다.

11.   [로그 파일 종류] 선택합니다.

12.   구성을 클릭하면, 로그 파일 구성 화면이 나타납니다.

13.   구성을 클릭하면, 로그 파일 구성 화면이 나타납니다.

14.   [찾아보기] 클릭하여 로그 파일을 저장할 위치를 선택합니다.

15.   파일이름을 입력합니다.

16.   로그 파일 크기를 선택합니다. [다음으로 제한] 경우, 제한 파일 크기를 입력합니다.

17.   [확인] 클릭합니다.

18.   파일명의 마지막 부분을 어떻게 설정할 것인지를 선택합니다.

19.   파일명의 마지막 부분을 일련 번호로 경우, 시작번호를 설정합니다.

20.   로그 파일의 설명을 입력합니다.

21.   [일정]탭을 선택합니다.

22.   로그 시작 시간을 설정합니다.

23.   로그 중지 시간을 설정합니다.

24.   로그 파일을 닫을 실행할 명령이 있다면 선택합니다.

25.   [확인] 클릭합니다.

26.   오른쪽 창에 추가한 로그 파일의 목록이 나타납니다.

27.   새로 추가한 성능 로그의 이름 위에서 마우스의 오른쪽 버튼을 클릭한 [다른 이름으로 설정 저장]으로 설정을 저장해 놓으면, 설정 파일을 재사용할 있습니다.

 

[참고]

?         성능 카운터에서 서버의 많은 정보를 얻을 있습니다. 문제를 확인할 있도록, 충분한 시간 동안 필요한 카운터를 수집합니다.

?         로그 파일 종류를 csv 선택하여 수집하면, 분석 또는 집계하기에 편리합니다.

?         수집 시간을 고려하여 데이터 샘플 간격을 설정합니다. 샘플 간격이 커질수록 그래프의 정확도는 떨어지고, 샘플 간격이 작으면 데이터의 크기가 커집니다. 정해진 규칙은 없으며 저자의 경우에는 일반적으로 수집 시간에 따라 다음과 같이 샘플 간격을 설정합니다.

수집 시간

샘플 간격

2시간

4

1

30

5

180

1

15

?         SQL Server 모니터링하기 위하여 어떤 서버를 사용할지 결정합니다. 원격으로 모니터링할 있으나 장기간 동안 네트워크를 연결하여 카운터를 사용하는 것은 네트워크 트래픽을 가중시킵니다. 만일 SQL Server 성능 모니터링 로그를 위한 공간이 있다면, 성능 로그 정보를 로컬로 기록합니다.

?         수집 파일 크기는 적정한 값으로 제한합니다. 수집 파일이 너무 커지면, 파일이 열리지 않는 경우가 있습니다.

?         기존의 설정 파일(HTM) 있는 경우에는 [기존 설정에서 로그 설정] 사용하면 쉽게 구성이 가능합니다.

반응형
반응형

일정 간격으로 하나의 데이터베이스( 데이터베이스)에서 다른 데이터베이스(보조 데이터베이스) 트랜잭션 로그를 전달하여 데이터베이스를 동기화하는 로그 전달(Log Shipping) 구성할 있습니다.

로그 전달을 구성하기 위해서는 다음과 같은 전제 조건이 충족되어야 합니다.

?         원본 데이터베이스의 복구 모델은 전체 혹은 대량 모델로 설정되어 있어야 합니다.

?         원본 데이터베이스의 Full Backup 미리 받아 놓는 것이 로그 전달 구성 시간을 단축할 있습니다.

?         로그 전달을 구성하기 전에, 서버에 공유 폴더를 만들어 보조 서버에서 트랜잭션 로그 파일을 사용할 있도록 설정해야 합니다.

?         하나의 서버에서 여러 대의 보조 서버를 구성할 있습니다.

 

로그 전달 구성하기

1.        SQL Server Management Studio에서 로그 전달 구성의 데이터베이스로 사용할 데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

2.        [페이지 선택]에서 [트랜잭션 로그 전달] 클릭합니다.

 

3.        [ 데이터베이스를 로그 전달 구성의 데이터베이스로 사용] 확인란을 선택합니다.

4.        [트랜잭션 로그 백업] 설정 부분에서 [백업 설정] 클릭합니다.

5.        [백업 폴더의 네트워크 경로] 입력합니다. 백업 폴더가 서버에 있는 경우 [로컬 경로] 입력합니다.

6.        [다음보다 오래된 파일 삭제] [다음 기간 내에 백업이 발생하지 않으면 경고] 부분에 적절한 값을 설정합니다.

7.        백업 [작업 이름] [일정] 설정 확인을 클릭합니다.

 

8.        [보조 서버 인스턴스 데이터베이스]에서 추가를 클릭합니다.

9.        [연결] 클릭하여 보조 서버로 사용될 SQL Server 인스턴스를 설정합니다.

10.     [보조 데이터베이스] 입력란의 목록에서 데이터베이스를 선택하거나 만들 데이터베이스의 이름을 입력합니다.

11.     [보조 데이터베이스 초기화] 탭에서 보조 데이터베이스 초기화에 사용할 옵션을 선택합니다.

12.     [파일 복사] 탭에서 보조 서버에서 로그 파일을 저장할 폴더의 위치인 [복사한 파일의 대상 폴더] 값을 지정합니다.

13.     복사 [작업 이름] [일정] 설정 합니다.

14.     [트랜잭션 로그 복원] 탭에서 백업 복원 [복구 모드] 혹은 [대기 모드] 선택 , [백업 복원 지연] 시간, [경고] 시간을 설정합니다.

15.     복원 [작업 이름] [일정] 설정 [확인] 클릭합니다.

16.     모니터 서버 인스턴스를 사용할 경우 [모니터 서버 인스턴스 사용] 확인란을 선택하고 [설정] 클릭합니다.

17.     모니터 연결에서 백업, 복사 복원 작업을 모니터 서버에 연결하는 사용할 [연결 방법을] 선택합니다.

18.     기록 보존에서 기록을 보존할 시간을 설정하고, 경고 [작업 이름] [일정] 설정한 확인을 클릭합니다.

19.     데이터베이스 속성 대화상자에서 [확인] 클릭하여 구성 프로세스를 설정을 종료합니다.

반응형
반응형

앞에서 생성된 Production.TransactionHistory 테이블은 운영 서버에 존재하는 테이블이며, Production.TransactionHistory 테이블의 데이터는 1개월이 지나면 가장 오래된 달치의 데이터를 Production.TransactionHistoryArchive 테이블에 복사한 다음에, 복사가 완료된 1개월 분의 데이터를 Production.TransactionHistory 테이블에서 삭제한다고 가정합니다. 이런 경우, 파티션을 이용하면 실제로 데이터를 이동시킬 필요가 없으므로 데이터를 이동시키는 시간을 줄일 있습니다. 다음은 위의 시나리오에 따른 스크립트 예제이고, 이것을 슬라이딩 윈도우 기법이라고 합니다.

슬라이딩 윈도우 구현하기

1.       운영에서 삭제된 데이터를 보관하기 위한 Production.TransactionHistoryArchive 테이블을 분할된 테이블로 생성하기 위하여 파티션 함수를 생성합니다.

CREATE PARTITION FUNCTION [TransactionArchivePF2] (datetime)

AS RANGE RIGHT FOR VALUES ('10/01/2003');

GO

2.       Production.TransactionHistoryArchive 테이블의 파티션 스키마를 생성합니다.

CREATE PARTITION SCHEME ArchivePS2

AS PARTITION ArchivePF2

TO (AdventureWorks_FG1, AdventureWorks_FG1);

GO

3.       Production.TransactionHistoryArchive 분할된 테이블을 생성합니다.

CREATE TABLE TransactionHistoryArchive(

    TransactionID int NOT NULL,

    ProductID int NOT NULL,

    ReferenceOrderID int NOT NULL,

    ReferenceOrderLineID int NOT NULL

CONSTRAINT DF_ReferenceOrderLineID DEFAULT (0),

    TransactionDate datetime NOT NULL

CONSTRAINT DF_TransactionDate DEFAULT (GETDATE()),

    TransactionType nchar(1) NOT NULL,

    Quantity int NOT NULL,

    ActualCost money NOT NULL,

    ModifiedDate datetime NOT NULL

CONSTRAINT DF_ModifiedDate DEFAULT (GETDATE())

) ON ArchivePS2 (TransactionDate);

GO

4.       Production.TransactionHistoryArchive 테이블에 분할된 인덱스를 생성합니다.

ALTER TABLE TransactionHistoryArchive WITH CHECK ADD

    CONSTRAINT PK_TransactionHistoryArchive PRIMARY KEY CLUSTERED

    (

        TransactionDate,

        TransactionID

    ) ON ArchivePS2 (TransactionDate);

GO

5.       분할된 테이블의 정보를 확인합니다.

SELECT OBJECT_NAME(object_id), * FROM sys.partitions

WHERE object_id = OBJECT_ID('TransactionHistoryArchive')

ORDER BY partition_number, index_id;

GO

6.       파티션 스키마를 지정한 파일 그룹에 추가합니다.

ALTER PARTITION SCHEME HistoryPS1

NEXT USED AdventureWorks_FG2;

GO

7.       TransactionHistory 테이블의 끝에 새로운 파티션을 추가합니다.

ALTER PARTITION FUNCTION HistoryPF1()

SPLIT RANGE ('3/01/2004');

GO

8.       스위칭을 하기 전에 TransactionHistory 테이블에 CHECK 제약 조건을 추가하여 데이터의 오류를 확인합니다.

ALTER TABLE TransactionHistory

ADD CONSTRAINT CK_TransactionHistory_DateRange

CHECK (TransactionDate >= '10/01/2003');

GO

9.       TransactionHistory 테이블에서 TransactionHistoryArchive 테이블로 데이터를 이동시킵니다.

ALTER TABLE TransactionHistory

SWITCH PARTITION 1

TO TransactionHistoryArchive PARTITION 2;

GO

10.   TransactionHistory 테이블의 2003 10 파티션을 통합합니다.

ALTER PARTITION FUNCTION HistoryPF1()

MERGE RANGE ('11/01/2003');

GO

11.   TransactionHistoryArchive 테이블의 2003 9 파티션을 첫번째 파티션과 통합합니다.

ALTER PARTITION FUNCTION ArchivePF2()

MERGE RANGE ('10/01/2003');

GO

12.   TransactionHistory 테이블의 제약 조건을 제거합니다.

ALTER TABLE TransactionHistory

DROP CONSTRAINT CK_TransactionHistory_DateRange;

GO

13.   테이블의 파티션과 데이터를 확인합니다.

SELECT OBJECT_NAME(object_id), * FROM sys.partitions

WHERE object_id = OBJECT_ID('TransactionHistory')

ORDER BY partition_number, index_id;

GO

SELECT OBJECT_NAME(object_id), * FROM sys.partitions

WHERE object_id = OBJECT_ID('TransactionHistoryArchive')

ORDER BY partition_number, index_id;

GO

 

[참고] 분할 테이블 인덱스는 Microsoft SQL Server 2005 Enterprise Edition Developer Edition에서만 지원됩니다.
반응형
반응형

 

테이블과 인덱스는 값의 범위를 기준으로 파티션으로 나눌 있습니다. 분할은 크기가 테이블과 인덱스를 쉽게 관리할 있도록 테이블 전체보다는 파티션 단위로 관리하는 것에 초점을 맞추고 있습니다. 그러므로, 값의 범위를 명확히 나눌 있는 테이블의 관리에 편리합니다. 특히, 월별로 데이터를 관리하고 월이 바뀌면 오래된 데이터를 단위로 삭제하는 시스템에는 슬라이딩 윈도우 기법을 적용한다면 데이터를 이동시키는 시간을 줄일 있습니다.

분할 테이블 인덱스의 데이터는 데이터베이스에서 이상의 파일 그룹으로 나눌 있으며, 데이터는 수평적으로 분할됩니다. 단일 인덱스나 테이블의 모든 파티션은 동일 데이터베이스에 상주해야 합니다. 분할된 테이블을 참조하는 쿼리의 작성은 분할되지 않은 테이블을 참조하는 일반 쿼리의 작성과 동일합니다.

 

분할된 테이블 또는 인덱스를 만드는 단계는 다음과 같습니다.

1. 테이블 또는 인덱스의 데이터를 분할하는 기준을 지정하는 파티션 함수를 생성합니다.

2. 파일 그룹과 파티션을 매핑하는 파티션 구성표를 생성합니다.

3. 파티션 구성표를 사용하여 테이블 또는 인덱스를 생성합니다.

 

테이블이나 인덱스를 분할하기 전에 다음과 같은 데이터베이스 개체를 만듭니다.

?         파티션 함수: 특정 열의 값을 기반으로 파티션 집합에 테이블이나 인덱스의 행을 매핑합니다.

?         파티션 구성표: 파티션 함수로 지정된 파티션을 파일 그룹에 매핑합니다.

 

분할된 테이블 인덱스 생성

 

월별로 관리하는 Production.TransactionHistory 테이블이 있다고 가정합니다. 테이블은 2003 10 1부터 2004 2 1까지의 데이터가 있고, 파티션에 한달치의 데이터를 보관한다고 가정합니다. 다음은 시나리오의 스크립트 예제입니다.

 

1.       우선, 파티션의 기준 데이터 값을 정하는 파티션 함수를 생성합니다. LEFT FOR VALUES 또는 RIGHT FOR VALUES 따라 파티션의 왼쪽을 기준으로 정할지 오른쪽을 기준으로 정할지를 결정합니다. Production.TransactionHistory 테이블의 경우, 데이터가 2003 9 1부터 있지만, RIGHT FOR VALUES 설정하여 첫번째 기준을 2003 10 1 정하였습니다.

CREATE PARTITION FUNCTION HistoryPF1 (datetime)

AS RANGE RIGHT FOR VALUES (

'11/01/2003', '12/01/2003', '1/01/2004', '2/01/2004');

GO

 

2.       파티션 구성표를 생성합니다. 파티션 구성표는 파티션의 파일 그룹을 매핑합니다.

CREATE PARTITION SCHEME HistoryPS1

AS PARTITION HistoryPF1

TO (AdventureWorks_FG1, AdventureWorks_FG1

             ,AdventureWorks_FG2, AdventureWorks_FG2, AdventureWorks_FG2);

GO

 

3.       파티션 구성표를 이용하여 분할된 테이블을 생성합니다.

CREATE TABLE Production.TransactionHistory(

            TransactionID int IDENTITY (1, 1) NOT NULL,

           ProductID int NOT NULL,

           ReferenceOrderID int NOT NULL,

           ReferenceOrderLineID int NOT NULL

CONSTRAINT DF_ReferenceOrderLineID DEFAULT (0),

           TransactionDate datetime NOT NULL

CONSTRAINT DF_TransactionDate DEFAULT (GETDATE()),

           TransactionType nchar(1) NOT NULL,

           Quantity int NOT NULL,

           ActualCost money NOT NULL,

           ModifiedDate datetime NOT NULL

CONSTRAINT DF_ModifiedDate DEFAULT (GETDATE()),

           CONSTRAINT CK_TransactionType CHECK (UPPER(TransactionType) IN ('W', 'S', 'P'))

) ON HistoryPS1 (TransactionDate);

GO

 

4.       데이터를 입력합니다.

 

5.       파티션 스키마 이름을 설정하여 분할된 인덱스를 생성합니다.

ALTER TABLE Production.TransactionHistory WITH CHECK ADD

    CONSTRAINT PK_TransactionHistory PRIMARY KEY CLUSTERED

    (

        [TransactionDate],

        [TransactionID]

    )  ON [HistoryPS1] (TransactionDate);

GO

 

6.       분할된 테이블의 정보를 확인합니다.

SELECT OBJECT_NAME(object_id), * FROM sys.partitions

WHERE object_id = OBJECT_ID(' Production.TransactionHistory')

ORDER BY partition_number, index_id;

GO

 

반응형
반응형

다음은 DBA 알고 있어야 하는 주요 DBCC 명령어입니다. 자세한 내용은 SQL Server 온라인 설명서를 참조 바랍니다.

 

DBCC 명령어

설명

DBCC SHOWCONTIG

지정한 테이블의 데이터와 인덱스에 대한 조각화 정보를 제공합니다. 기능은 다음 버전에서 제거될 예정이므로 대신 sys.dm_db_index_physical_stats 사용하는 것을 권고합니다.

DBCC SHRINKDATABASE

지정한 데이터베이스의 데이터 파일의 크기를 축소합니다.

DBCC SHRINKFILE

지정한 데이터베이스에서 지정한 파일(데이터 파일이나 로그 파일) 크기를 축소합니다.

DBCC SQLPERF

모든 데이터베이스의 트랜잭션 로그 공간에 관한 통계를 제공합니다.

DBCC TRACEON

지정한 추적 플래그를 활성화합니다.

DBCC TRACEOFF

지정한 추적 플래그를 해제합니다.

DBCC TRACESTATUS

추적 플래그의 상태 정보를 제공합니다.

DBCC UPDATEUSAGE

카탈로그 뷰의 부정확한 페이지와 개수를 보고하고 수정합니다. 페이지와 개수가 부정확하면 sp_spaceused 시스템 저장 프로시저에서 반환하는 공간 사용 정보가 정확하지 않게 됩니다. SQL Server 2005 에서는 항상 정확한 값이 유지 관리되기 때문에 SQL Server 2005 에서 만든 데이터베이스에서는 개수가 부정확한 경우가 없지만 SQL Server 2005 업그레이드한 데이터베이스에는 올바르지 않은 개수가 포함될 있으므로 SQL Server 2005 업그레이드한 다음에는 DBCC UPDATEUSAGE 실행하여 올바르지 않은 개수를 수정하는 것이 좋습니다.

DBCC USEROPTIONS

현재의 연결에 설정되어 있는 SET 옵션 정보를 제공합니다.

반응형
반응형

다음은 DBA 알고 있어야 하는 주요 DBCC 명령어입니다. 자세한 내용은 SQL Server 온라인 설명서를 참조 바랍니다.

 

DBCC 명령어

설명

DBCC FREESESSIONCACHE

분산 쿼리에서 Microsoft SQL Server 인스턴스에 대해 사용한 분산 쿼리 연결 캐시를 플러시합니다.

DBCC FREESYSTEMCACHE

모든 캐시의 사용하지 않는 캐시 항목을 모두 해제합니다. SQL Server 2005 데이터베이스 엔진은 현재 항목에 필요한 메모리 확보를 위해 사용하지 않는 캐시 항목을 백그라운드에서 미리 정리합니다. 하지만 명령을 사용해 사용하지 않는 항목을 모든 캐시에서 직접 제거할 있습니다.

DBCC HELP

지정한 DBCC 명령의 구문 정보를 제공합니다.

DBCC INDEXDEFRAG

지정된 테이블 또는 뷰의 인덱스를 조각 모음합니다.

기능은 다음 버전에서 제거될 예정이므로, 명령어대신 ALTER INDEX 사용하는 것을 권고합니다..

DBCC INPUTBUFFER

클라이언트가 Microsoft SQL Server 2005 인스턴스로 마지막으로 전송한 SQL 문을 반환합니다.

DBCC OPENTRAN

지정한 데이터베이스에서 가장 오래된 활성 트랜잭션과 가장 오래된 분산 비분산 복제 트랜잭션에 대한 정보를 표시합니다. 활성 트랜잭션이 있거나 데이터베이스에 복제 정보가 있는 경우에만 결과가 반환됩니다.

DBCC OUTPUTBUFFER

지정한 session_id 현재 출력 버퍼를 16진수와 ASCII 형식으로 반환합니다.

DBCC PINTABLE

제거된 기능입니다. 오류 메시지는 반환하지 않지만 실제로는 효력이 없습니다. 마찬가지로 DBCC UNPINTABLE 제거되었습니다.

DBCC PROCCACHE

프로시저 캐시에 대한 정보를 테이블 형식으로 반환합니다.

DBCC SHOW_STATISTICS

지정한 테이블에서 특정 대상에 대한 현재 배포 통계를 제공합니다.

반응형
반응형

다음은 DBA 알고 있어야 하는 주요 DBCC 명령어입니다. 자세한 내용은 SQL Server 온라인 설명서를 참조 바랍니다.

 

DBCC 명령어

설명

DBCC CHECKALLOC

지정된 데이터베이스에 대한 디스크 공간 할당 구조의 일관성을 검사합니다.

DBCC CHECKCATALOG

지정한 데이터베이스 내의 카탈로그 일관성을 검사합니다.

DBCC CHECKCONSTRAINTS

현재 데이터베이스의 지정한 테이블에서 특정 제약 조건이나 모든 제약 조건의 무결성을 검사합니다.

DBCC CHECKDB

현재 데이터베이스에 있는 모든 테이블의 할당과 구조적 무결성을 검사합니다.

DBCC CHECKFILEGROUP

지정한 파일 그룹에서 현재 데이터베이스에 있는 모든 테이블의 할당과 구조적 무결성을 검사합니다.

DBCC CHECKIDENT

지정한 테이블의 현재 ID 값을 검사하고 필요에 따라 변경합니다.

DBCC CHECKTABLE

특정 테이블 또는 특정 인덱싱된 뷰를 구성하는 모든 페이지 구조의 무결성을 검사합니다.

DBCC DBREINDEX

지정한 데이터베이스의 테이블에 대해 하나 이상의 인덱스를 다시 작성합니다. 그렇지만 기능은 다음 버전에서 제거될 예정이므로 ALTER INDEX 사용하는 것을 권고합니다.

DBCC DROPCLEANBUFFERS

버퍼 풀에서 버퍼를 모두 제거하는 명령어입니다. DBCC DROPCLEANBUFFERS 사용하면 서버를 종료하고 다시 시작하지 않아도 완전히 버퍼 캐시를 사용하여 쿼리를 테스트할 있습니다. 성능 튜닝 테스트에 활용할 있습니다.

DBCC FREEPROCCACHE

프로시저 캐시를 비우는 명령어입니다.

반응형
반응형

다음은 SQL Server 2005 포함되어 있는 주요 명령 프롬프트 유틸리티들입니다. 자세한 내용은 SQL Server 온라인 설명서를 참조 바랍니다.

 

도구 이름

설명

Sac

SQL Server 2005 인스턴스들 간에 노출 영역 구성(Surface area configuration) 가져오하거나 내보내는데 사용됩니다. sac 유틸리티의 가장 쉬운 사용법은 SQL Server 노출 영역 구성 GUI(그래픽 사용자 인터페이스) 사용하여 컴퓨터를 구성한 다음에 컴퓨터의 설정을 sac 유틸리티를 통해 파일로 내보내는 것입니다. 그러면 sac 유틸리티를 사용하여 SQL Server 2005 구성 요소에 대한 모든 설정을 로컬 컴퓨터나 원격 컴퓨터의 다른 SQL Server 2005 인스턴스에 손쉽게 적용할 있습니다.

Sqlagent90

명령 프롬프트에서 SQL Server 에이전트를 실행하는데 사용됩니다. 대개는 응용 프로그램에서 SQL-DMO 메서드를 사용하거나 SQL Server Management Studio 통해 SQL Server 에이전트를 실행해야 하며, 문제가 발생하여 SQL Server 에이전트를 진단하거나 해결하고자 하는 경우에만 명령 프롬프트에서 sqlagent90 실행합니다.

Sqlcmd

명령 프롬프트에서 T-SQL 문을 실행하는데 사용됩니다. sqlcmd 유틸리티를 사용하면 명령 프롬프트에서 Transact-SQL , 시스템 프로시저 스크립트 파일을 입력할 있습니다.

Sqldiag

콘솔 응용 프로그램 또는 서비스로 실행할 있는 범용 진단 정보 수집 유틸리티입니다. SQLdiag 사용하여 SQL Server 기타 서버 유형에서 로그 데이터 파일을 수집할 있으며 이러한 파일을 사용하여 지속적으로 서버를 모니터링하거나 특정 서버 문제를 해결하는데 활용할 있습니다. SQL Server 2005 에서는 SQLdiag 유틸리티가 획기적으로 변경된 관계로, 유틸리티의 명령줄 인수는 SQL Server 2000 호환되지 않습니다.

Sqlmaint

이전 버전의 SQL Server에서 만들어진 데이터베이스 유지 관리 계획을 실행하는데 사용됩니다.

Sqlservr

SQL Server 인스턴스를 시작하고 중지하는데 사용됩니다. SQL Server 구성 관리자에서 SQL Server 시작하고 중지하는 것이 원칙이며, 문제 해결을 목적으로 SQL Server 시작하는 경우에만 명령 프롬프트에서 sqlservr.exe 실행해야 합니다. 

Sqlwb

명령 프롬프트에서 SQL Server Management Studio 시작하는 사용합니다.

Tablediff

테이블에 존재하는 데이터를 비교하고 차이를 알려 줍니다. 일치하지 않는 테이블의 데이터를 비교하고자 사용하며, 특히 복제 토폴로지에서 데이터 불일치 문제를 해결하는 유용합니다.


 

반응형
반응형

다음은 SQL Server 2005 포함되어 있는 주요 명령 프롬프트 유틸리티들입니다. 자세한 내용은 SQL Server 온라인 설명서를 참조 바랍니다.

 

도구 이름

설명

Bcp

SQL Server 2005 인스턴스와 사용자가 지정한 형식의 데이터 파일 간에 데이터를 대량 복사하는데 사용됩니다. bcp 유틸리티를 사용하여 많은 수의 로운 행을 SQL Server 테이블로 가져오거나 테이블에서 데이터 파일로 데이터를 내보낼 있습니다.

Dta

작업 부하를 분석하여 최적화 권고안을 제시하는데 사용됩니다. 명령 프롬프트에서 dta.exe 사용하거나 GUI 통해 데이터베이스 엔진 튜닝 관리자에 액세스할 있습니다. 커맨드라인 유틸리티를 사용하면 데이터베이스 엔진 튜닝 관리자 기능을 스크립트 소프트웨어 프로그램으로 통합할 있어서 편리합니다.

Dtexec

SSIS 패키지를 구성하고 실행하는데 사용됩니다.

Dtutil

SSIS 패키지를 관리하는데 사용됩니다.

Nscontrol

Notification Services 관리하기 위한 명령 프롬프트 유틸리티입니다. Notification Services 인스턴스와 응용 프로그램을 배포, 구성, 모니터링 제어할 있는 명령을 제공합니다.

Osql

명령 프롬프트에서 Transact-SQL , 시스템 프로시저 스크립트 파일을 입력할 있습니다. 그러나, osql 유틸리티는 다음 버전에서 제거된다고 온라인 설명서에 기술되어 있으므로 osql 대신 sqlcmd 유틸리트를 사용하는 것을 권고합니다.

profiler90

명령 프롬프트에서 SQL Server 프로파일러 도구를 실행하는데 사용됩니다.

Rs

Reporting Services 스크립트를 실행하는데 사용됩니다.

Rsconfig

리포트 서버 연결을 구성하는데 사용됩니다.

rskeymgmt

리포트 서버에서 암호화 키를 구성하는데 사용됩니다.

반응형
반응형

Microsoft SQL Server 2005 포함된 SQLdiag 유틸리티는 콘솔 응용 프로그램 또는 서비스로 실행할 있는 범용 진단 정보 수집 유틸리티입니다. SQLdiag 사용하여 SQL Server 기타 서버 유형에서 로그 데이터 파일을 수집할 있으며 이러한 파일을 사용하여 지속적으로 서버를 모니터링하거나 특정 서버 문제를 해결하는데 활용할 있습니다.

SQL Server 2005 SQLdiag 유틸리티는 SQL Server 2000 비해 많이 변경된 관계로, 커맨드라인 인수가 SQL Server 2000 호환되지 않습니다.

SQLdiag 유틸리티를 사용하면 다음과 같은 유형의 진단 정보를 수집할 있습니다.

?         Windows 성능 로그 (Windows performance logs)

?         Windows 이벤트 로그 (Windows event logs)

?         SQL Server 프로파일러 추적 (SQL Server Profiler traces)

?         SQL Server 블로킹 정보 (SQL Server blocking information)

?         SQL Server 구성 정보 (SQL Server configuration information)

 

기본적으로 제공되는 구성 파일인 SQLdiag.XML, SD_General.XML, SD_Detailed.XML 파일을 편집하면 위의 진단 정보들 중에서 원하는 정보만 수집할 있습니다.

 

다음은 SQLdiag 유틸리티 구문 실행 매개변수에 대한 설명입니다.

 

[구문] SQLdiag

 { [/? 도움말] }

     |

     { [/I 구성 파일(configuration_file)]

       [/O 출력 폴더 경로(output_folder_path)]

       [/P 지원 폴더 경로(support_folder_path)]

       [/N 출력 폴더 관리 옵션(output_folder_management_option)]

       [/C 파일 압축 유형(file_compression_type)]

       [/B [+]시작 시간(start_time)]

       [/E [+]종료 시간(stop_time)]

       [/A SQLdiag_application_name]

       [/Q 자동(Quiet) 모드로 실행]

       [/G 일반(Generic) 모드로 실행]

       [/R 서비스 등록]

       [/U 서비스 삭제]

       [/L 연속 모드로 실행]

       [/X 스냅숏 모드로 실행] }

     |

     { [START | STOP | STOP_ABORT] }

     |

     { [START | STOP | STOP_ABORT] /A SQLdiag_application_name }

 

SQLdiag 자동으로 특정 시각에 시작하고 특정 시각에 종료하기

-- 2006 1 1 오전 9부터 오후 3까지 진단 정보 수집을 실행합니다.

SQLdiag /B 20060101_09:00:00 /E 20060101_15:00:00

 

SQLdiag 실행시점부터 1시간 후에 정보 수집을 시작하고 3시간 후에 종료하기

SQLdiag /B +01:00:00 /E +03:00:00

 

SQLdiag 자동으로 매일 03부터 05까지 진단 정보 수집 수행하기

SQLdiag /B 03:00:00 /E 05:00:00 /L

 

SQLdiag 자동으로 매일 03 진단 정보의 스냅숏 수집하기

SQLdiag /B 03:00:00 /X /L

 

SQLdiag 콘솔 응용 프로그램으로 실행하는 경우 SQLdiag 실행 중인 콘솔 창에서 Ctrl+C 눌러 중지할 있습니다. Ctrl+C 누르면 SQLDiag 데이터 수집이 종료되며 프로세스가 종료될 때까지 정도 기다려야 한다는 메시지가 콘솔 창에 표시됩니다.

Ctrl+C 눌러 모든 자식 진단 프로세스를 종료하고 즉시 응용 프로그램을 종료합니다.

 

[주의] SQLdiag 콘솔 응용 프로그램으로 실행 중인 경우 콘솔 창을 강제로 종료하거나 로그오프하지 않아야 합니다. 만약 SQL Server 프로파일러 추적 정보를 수집하고 있었다면 정상적으로 종료되지 않고 계속해서 추적 정보를 수집하게 되는 문제가 발생할 있습니다.

 

SQLdiag 서비스로 실행 중일 종료하기

SQLDiag STOP                                                                                                                      

 

인스턴스 이름(Instance1) 지정하고 SQLdiag 인스턴스 종료하기

SQLdiag STOP /A Instance1

 

실행 중인 진단 정보 수집 작업이 종료될 때까지 기다리지 않고 바로 종료 하기

SQLdiag STOP_ABORT

 SQLDIAG

반응형
반응형

블로킹을 모니터링하는 예제 SP입니다.
master DB 생성해 두고 활용하면 편리합니다.
다음에 있는 SP는 웹에서 퍼온 SP입니다.

블로킹 점검 SP는 추후 작성이 되는 대로 추가로 예제 스크립트를 올리겠습니다.
 

create proc dbo.sp_block (@spid bigint=NULL)

as

-- This stored procedure is provided "AS IS" with no warranties, and confers no rights.

-- Use of included script samples are subject to the terms

-- specified at http://www.microsoft.com/info/cpyright.htm

select t1.resource_type

           , 'database'=db_name(resource_database_id)

           , 'blk object' =isnull(object_name(t1.resource_associated_entity_id) ,t1.resource_associated_entity_id)

           , t1.request_mode

           , t1.request_session_id   -- spid         

           , t2.blocking_session_id  -- spid         

from sys.dm_tran_locks as t1,

           sys.dm_os_waiting_tasks as t2

where t1.lock_owner_address = t2.resource_address

and t1.request_session_id = isnull(@spid,t1.request_session_id)

GO

 


CREATE PROC sp_block2000
AS
IF EXISTS (SELECT * FROM sysprocesses WHERE spid IN
                        (SELECT blocked FROM sysprocesses))
    SELECT spid, blocked, status, loginame, hostname,
        dbname = substring(db_name(dbid), 1, 10),
        cmd
    FROM sysprocesses
    WHERE blocked <> 0
        OR (spid IN (SELECT blocked FROM sysprocesses))
ELSE
    PRINT 'No one is blocked'

반응형
반응형

tempdb가 사용하는 공간을 동적 관리 뷰를 사용하여 확인할 수 있습니다.

tempdb 공간 사용 현황 확인하기

SELECT          

           SUM (user_object_reserved_page_count)*8 AS user_objects_kb,

           SUM (internal_object_reserved_page_count)*8 AS internal_objects_kb,

           SUM (version_store_reserved_page_count)*8 AS version_store_kb,

           SUM (unallocated_extent_page_count)*8 AS freespace_kb

FROM sys.dm_db_file_space_usage

WHERE database_id = 2;

GO

 

반응형
반응형

sys.dm_exec_query_stats 동적 관리 뷰를 이용하여 캐싱되어 있는 쿼리 실행 계획에 대한 집계 성능 통계를 확인할 있습니다. 뷰에는 쿼리 계획에 대한 행이 포함되어 있으며, 캐시에서 실행 계획이 제거되면 뷰에서도 해당 행이 제거됩니다.

 

실행 소요 시간이 가장 상위 50개의 쿼리 정보 조회하기

SELECT TOP 50

             sum(qs.total_worker_time) as total_cpu_time,

             sum(qs.execution_count) as total_execution_count,

             count(*) as  '#_statements',

             qt.dbid, qt.objectid, qs.sql_handle,

             qt.[text]

FROM sys.dm_exec_query_stats as qs

CROSS APPLY sys.dm_exec_sql_text (qs.sql_handle) as qt

GROUP BY qt.dbid,qt.objectid, qs.sql_handle,qt.[text]

ORDER BY sum(qs.total_worker_time) DESC,qs.sql_handle;

GO

 

CPU Time 순으로 상위 50 쿼리 정보 조회하기

SELECT TOP 50

qs.total_worker_time/qs.execution_count as [Avg CPU Time],

             substring (qt.text,qs.statement_start_offset/2,

             (case when qs.statement_end_offset = -1

             then len (convert (nvarchar(max), qt.text)) * 2

             else qs.statement_end_offset end -qs.statement_start_offset)/2)

             as query_text,

             qt.dbid,

             qt.objectid

FROM sys.dm_exec_query_stats qs

cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt

ORDER BY [Avg CPU Time] DESC;

GO

 

평균 I/O 높은 상위 50 쿼리 정보 조회하기

SELECT TOP 50

(qs.total_logical_reads + qs.total_logical_writes) /qs.execution_count AS [Avg IO],

SUBSTRING(qt.text,qs.statement_start_offset/2,

                           (case when qs.statement_end_offset = -1

                           then len(convert(nvarchar(max), qt.text)) * 2

                           else qs.statement_end_offset end -qs.statement_start_offset)/2)

                           AS query_text,

                           qt.dbid, dbname=db_name(qt.dbid),

                           qt.objectid,

                           qs.sql_handle,

                           qs.plan_handle

FROM sys.dm_exec_query_stats qs

CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt

ORDER BY [Avg IO] DESC;

GO

 

CLR 내에서의 평균 사용 시간 확인하기

SELECT TOP 5 creation_time, last_execution_time, total_clr_time,

total_clr_time/execution_count AS [Avg CLR Time], last_clr_time,

execution_count, (SELECT SUBSTRING(text, statement_start_offset/2,

(CASE WHEN statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max),

text)) * 2

ELSE statement_end_offset END - statement_start_offset)/2)

FROM sys.dm_exec_sql_text(sql_handle)) AS query_text

FROM sys.dm_exec_query_stats

ORDER BY [Avg CLR Time] DESC;

GO

 

병렬로 실행 중인 프로세스 확인하기

SELECT r.session_id,

             r.request_id,

             max(isnull(exec_context_id, 0)) AS number_of_workers,

             r.sql_handle,

             r.statement_start_offset,

             r.statement_end_offset,

             r.plan_handle

FROM sys.dm_exec_requests r

             join sys.dm_os_tasks t ON r.session_id = t.session_id

             join sys.dm_exec_sessions s ON r.session_id = s.session_id

WHERE s.is_user_process = 0x1

GROUP BY r.session_id, r.request_id, r.sql_handle, r.plan_handle,

             r.statement_start_offset, r.statement_end_offset

HAVING max(isnull(exec_context_id, 0)) > 0;

GO

 

재컴파일 확인하기

SELECT TOP 25

             sql_text.text,

             sql_handle,

             plan_generation_num,

             execution_count,

             dbid,

             objectid

FROM sys.dm_exec_query_stats a

             CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sql_text

WHERE plan_generation_num >1

ORDER BY plan_generation_num DESC;

GO

 

반응형
반응형

sys.dm_exec_requests 동적 관리 뷰를 이용하여 서버에서 실행되고 있는 모든 세션들의 정보를 확인할 있습니다. 사용자에게 서버에 대한 VIEW SERVER STATE 권한이 있으면 SQL Server 인스턴스에서 실행 중인 모든 세션을 있고, 그렇지 않으면 현재 세션만 있습니다.

 

현재 실행중인 프로세스의 세션 정보, 쿼리문, CPU 시간 정보 확인하기

SELECT r.session_id

             ,status

             ,wait_type

             ,substring(qt.text,r.statement_start_offset/2,

                           (case when r.statement_end_offset = -1

                           then len(convert(nvarchar(max), qt.text)) * 2

                           else r.statement_end_offset end -                                                          r.statement_start_offset)/2)

             as query_text   --- 현재 실행 중인 일괄 처리 또는 프로시저

             ,qt.dbid   ,qt.objectid

             ,r.cpu_time

             ,r.total_elapsed_time

             ,r.reads

             ,r.writes

             ,r.logical_reads

             ,r.scheduler_id

FROM sys.dm_exec_requests r

CROSS APPLY sys.dm_exec_sql_text(sql_handle) as qt

WHERE r.session_id > 50

ORDER BY r.scheduler_id, r.status, r.session_id;

GO

 

반응형
반응형

실행 중인 스레드로 인해 발생한 대기에 대한 정보를 확인하려면 sys.dm_os_wait_stats 동적 관리 뷰를 사용합니다. 뷰는 SQL Server 관련된 성능 문제뿐 아니라 특정 쿼리 일괄 처리와 관련된 성능 문제의 진단에도 도움이 됩니다. 대기 유형별 대기 시간을 확인하여, 가장 대기가 많은 유형을 확인하고, 작업 부하에 따른 대기 유형의 변화도 확인합니다.

 

시스템의 대기 정보 확인하기

SELECT * FROM sys.dm_os_wait_stats

ORDER BY wait_time_ms DESC;

GO

 

 래치 대기 정보 확인하기

SELECT * FROM sys.dm_os_latch_stats;

GO

 

대기 통계, 래치 대기 통계 재설정하기

DBCC SQLPERF('sys.dm_os_wait_stats', CLEAR);

GO

DBCC SQLPERF('sys.dm_os_latch_stats', CLEAR);

GO

 

I/O 대기 확인하기

SELECT database_id

                           , file_id

                           , io_stall,io_pending_ms_ticks

                           , scheduler_address

FROM sys.dm_io_virtual_file_stats (NULL, NULL) AS t1,

     sys.dm_io_pending_io_requests AS t2

WHERE t1.file_handle = t2.io_handle;

GO

 

SELECT * FROM sys.dm_io_virtual_file_stats (NULL, NULL);

GO

SELECT * FROM sys.dm_io_pending_io_requests;

GO

 

I/O 할당 대기 확인하기

-- Tempdb (DBID=2)

SELECT session_id, wait_duration_ms, resource_description

FROM sys.dm_os_waiting_tasks

WHERE wait_type LIKE 'PAGE%LATCH_%'

AND resource_description LIKE '2:%';

GO

 

-- 사용자 DB (다음에서 dbid 부분을 db_id() 값을 입력하여 실행하면 )

SELECT session_id, wait_duration_ms, resource_description

FROM sys.dm_os_waiting_tasks

WHERE wait_type LIKE 'PAGE%LATCH_%'

AND resource_description LIKE '5:%';

GO

 

반응형
반응형

SQL Server 2005에서는 서버에 장애가 발생하여 일반적인 연결이 불가능할 관리자가 진단을 하기 위한 목적으로 접근할 있는 관리자 전용 연결(DAC: Dedicated Administrator Connection) 제공합니다. DAC 이용하여 관리자는 서버의 문제를 진단하며, 문제를 발생시키는 프로세스를 종료시키거나 데이터베이스 설정 변경과 같은 응급 복구 작업을 수행할 있습니다.

 

관리자 전용 연결 사용 제한

 

관리자 전용 연결은 서버에서 장애가 발생했을 문제 진단 응급 작업 만을 위한 연결이기 때문에 다음과 같은 제한이 있습니다.

?         인스턴스당 하나의 DAC 허용됩니다.

?         DAC 연결할 우선 로그인의 기본 데이터베이스에 연결을 시도한 해당 데이터베이스에 정상적으로 연결이 되면 master 데이터베이스를 이용할 있게 됩니다. 만약 접속하는 로그인의 기본 데이터베이스가 오프라인이거나 사용할 없는 경우 다음과 같은 명령어를 사용하여 기본 데이터베이스를 무시하고 master 데이터베이스에 직접 연결하도록 있습니다.

sqlcmd ?A ?d master

?         DAC 사용하여 병렬 쿼리 또는 명령을 실행할 없습니다. 예를 들면, 백업(BACKUP), 복원(RESTORE) 같은 명령은 사용할 없습니다.

?         DAC 제한된 리소스만 사용하기 때문에 많은 리소스가 필요한 쿼리 등은 수행해서는 안됩니다.

?         DAC 기본적으로 서버에서 실행되는 클라이언트에서만 연결이 허용됩니다. 만일 서버 내부가 아닌 외부에서 DAC 사용하려면 SQL Server 구성 옵션인 ‘remote admin connections’ 설정 값을 1 변경해 주어야 합니다.

 

관리자 전용 연결 사용

 

관리자 전용 연결은 sqlcmd SQL Server Management Studio 통해 사용할 있습니다. sqlcmd 이용하는 경우 DAC 나타내는 ?A 사용하여 서버에 접속합니다. SQL Server Management Studio 이용하는 경우 연결할 서버명 앞에 admin: 붙여서 DAC 사용합니다.

 

sqlcmd 이용하여 관리자 전용 연결 사용하기

명령 프롬프트 창에서 다음과 같이 접속한다.

C:\>sqlcmd ?S ?U ?P ?A

 

 

SQL Server Management Studio 이용하여 관리자 전용 연결 사용하기

서버 이름에 admin:<ServerName>으로 연결합니다.

 

반응형
반응형

동적 관리 뷰를 이용하여 트리거 정보를 확인합니다.

 

데이터베이스 수준의 DDL 트리거 목록 확인하기

SELECT * FROM sys.triggers WHERE parent_class = 0;

GO

 

서버 수준의 DDL 트리거 목록 확인하기

SELECT * FROM sys.server_triggers;

GO

 

트리거 정의 확인하기

SELECT tr.name, sm.definition

FROM sys.triggers tr JOIN sys.sql_modules sm ON tr.object_id = sm.object_id

WHERE tr.parent_class = 0;

GO

 

반응형
반응형

DDL 트리거는 다양한 형태로 작성될 수 있습니다.

 

테이블의 DROP ALTER 작업에 대하여 DDL 트리거 생성하기

USE AdventureWorks;

GO

IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class = 0 AND name = 'safety')

DROP TRIGGER safety ON DATABASE;

GO

 

CREATE TRIGGER safety

ON DATABASE

FOR DROP_TABLE, ALTER_TABLE

AS

PRINT '테이블을 변경/삭제하려면 “safety” 트리거를 비활성화 하세요.'

ROLLBACK;

GO

-- safety라는 DDL 트리거를 비활성화합니다.

DISABLE TRIGGER safety ON DATABASE;

GO

-- safety라는 DDL 트리거를 활성화합니다.

ENABLE TRIGGER safety ON DATABASE;

GO

 

AdventureWorks 데이터베이스 내의 모든 DDL 문에 대하여, 사용 기록 남기기

USE AdventureWorks;

GO

CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));

GO

CREATE TRIGGER log

ON DATABASE

FOR DDL_DATABASE_LEVEL_EVENTS

AS

DECLARE @data XML

SET @data = EVENTDATA()

INSERT ddl_log (PostTime, DB_User, Event, TSQL) VALUES

(GETDATE(),

CONVERT(nvarchar(100), CURRENT_USER),

@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),

@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;

GO

--생성한 트리거 테스트

CREATE TABLE TestTable (a int); ?임시 테이블을 생성

DROP TABLE TestTable ;  --생성한 임시 테이블 삭제

GO

 

--DDL 로그 확인

SELECT * FROM ddl_log ;

GO

--트리거 삭제

DROP TRIGGER log ON DATABASE

GO

--ddl_log 테이블 삭제

DROP TABLE ddl_log

GO

 

반응형
반응형

DBA라면 DDL 트리거의 지원을 많이 기다렸을 겁니다.
DDL
트리거는 UPDATE, DELETE, INSERT 등과 같은 명령문에 작동하는 DML 트리거와 달리 테이블이나 뷰에 대한 CREATE, ALTER DROP 또는 사용자 계정이나 로그인 설정, 프로시저 생성 변경, 파티션 생성 변경 등과 같은 DDL문에 대하여 동작하는 트리거입니다.

다음과 같은 경우에 DDL 트리거를 활용할 있습니다.

?         데이터베이스 스키마에 대한 특정 변경 작업을 방지하려는 경우

?         데이터 스키마가 변경될 데이터베이스에서 특정 작업이 수행되도록 하려는 경우

?         데이터베이스 스키마의 변경 내용이나 이벤트를 기록하려는 경우

 

DDL 트리거는 SQL 문이 완료된 후에 실행이 되며, INSTEAD OF 트리거로 사용될 수는 없습니다. 또한 DML 트리거와 같이 inserted, deleted 테이블을 생성하지는 않습니다. DDL 트리거는 서버에 대해서 설정할 수도 있고 특정 데이터베이스에서만 수행되도록 설정할 수도 있습니다. 데이터베이스, 사용자, 끝점, 로그인 관련 이벤트는 서버 범위의 이벤트 그룹이며, 테이블, , 인덱스 등과 같은 데이터베이스 개체 관련 이벤트는 데이터베이스 범위의 이벤트 그룹입니다.

 

DDL 트리거를 디자인하기 전에 다음 사항이 필요합니다.

?         DDL 트리거 영역에 대하여 이해해야 합니다.

?         어떤 Transact-SQL() 대하여 트리거를 발생시킬 것인지를 결정해야 합니다.

반응형
반응형

SQL Server 에이전트 서비스가 관리하는 작업이나 복제 상황을 모니터링하기 위하여 SQL Server 에이전트 오류 로그도 주기적인 모니터링이 필요합니다.

 

SQL Server 에이전트 오류 로그 보기

1.       SQL Server Management Studio에서 원하는 데이터베이스 서버를 선택하고 해당 인스턴스를 확장합니다.

2.       [SQL Server 에이전트] 선택합니다.

3.       [오류 로그] 확장한 다음에 보고자 하는 오류 로그를 마우스 오른쪽 단추로 클릭하고 [에이전트 로그 보기] 선택합니다.

4.       필요에 따라 [필터] 버튼을 클릭한 다음 [필터 설정] 대화 상자에 매개 변수 값을 입력하여 로그 내용을 필터링합니다.

5.       필터 매개 변수를 선택한 경우 [필터 적용] 체크 박스를 선택한 다음 [필터 설정] 대화 상자에서 [확인] 클릭합니다.

6.       로그 파일 요약에서 로그 내용을 봅니다.

 

반응형
반응형

이벤트 뷰어를 사용하여 응용 프로그램, 보안, 시스템 로그에 기록되는 이벤트를 모니터링하는 것을 권고합니다. 

 

n       응용 프로그램 로그 보기

이벤트 뷰어는 사용자가 응용 프로그램, 보안, 시스템 로그에 기록되는 이벤트를 모니터링할 있도록 합니다. 로그는 SQL Server 로그와 SQL 에이전트 로그로 분리시켜 추가적인 정보를 제공합니다. SQL Server 메시지는 응용 프로그램 로그에서 발견됩니다.

SQL Server 메시지는 “MSSQLSERVER” 또는 “SQLSERVERAGENT”라는 원본을 가진 메시지로 구별될 있습니다. RAISERROR 메시지도 여기에서 있습니다.

 

응용 프로그램 로그 확인하기

1.       [시작] a [설정] a [관리도구] a [이벤트 뷰어] 선택합니다. (운영체제에 따라 다름)

2.       디폴트로 로컬컴퓨터의 로그가 나타난다. 다른 컴퓨터의 [연결] 클릭하여 원격 컴퓨터의 로그를 확인합니다.

3.       원하는 사항을 더블 클릭하면, 자세한 정보를 얻을 있습니다.

 

반응형
반응형

SQL Server 시작될 때마다 현재 오류 로그의 이름은 errorlog.1 변경되고, errorlog.1 errorlog.2 되고 errorlog.2 errorlog.3 되는 형식으로 순환됩니다. sp_cycle_errorlog 사용하면 서버를 중지했다가 시작하지 않고 오류 로그 파일을 순환시킬 있습니다. 어떤 이유로 ERRORLOG 파일의 크기가 지나치게 커진 경우에는 sp_cycle_errorlog 사용하여 새로운 ERRORLOG 파일을 생성할 것을 권고합니다.

 

오류 로그 순환시키기

EXEC sp_cycle_errorlog;

GO

반응형
반응형

SQL Server 로그 파일의 개수는 현재 기록하고 있는 로그와 이전의 6개의 로그에 대한 백업을 가지고 있습니다. 로그 파일의 수를 크게 설정하면 SQL Server 재시작으로 인하여 문제를 진단하는데 단서가 있는 ERRORLOG 파일이 순환되어 유실되는 것을 방지할 있습니다. 로그의 개수는 SQL Server 로그 구성을 수정하여 변경할 있습니다.

 

오류 로그 파일 개수 정보 확인

EXEC master..xp_enumerrorlogs ;

GO

 

SQL Server Management Studio에서 오류 로그 파일 개수 변경하기

1. [SQL Server 로그] 커서를 위치시키고 마우스 오른쪽 버튼을 클릭합니다.

2. [구성] 메뉴를 선택합니다.
3. SQL Server 오류 로그 구성 창이 나타납니다. [재활용 이전의 오류 로그 파일 제한] 체크합니다.
4. [최대 오류 로그 파일 ] 원하는 오류 로그 파일 수를 입력한 , [확인] 클릭합니다.

 

반응형
반응형

 

SQL Server 특정 시스템 이벤트와 사용자 정의 이벤트를 SQL Server 오류 로그 Microsoft Windows 응용 프로그램 로그에 기록합니다. SQL Server 오류 로그에 있는 정보를 사용하여 SQL Server 관련된 문제의 원인을 찾을 있습니다.

문제의 원인을 확인하기 위해 SQL Server 오류 로그와 Windows 응용 프로그램 로그를 모두 사용할 있습니다. 예를 들어 SQL Server 오류 로그를 모니터링할 원인을 없는 오류 메시지가 표시될 있는 경우 로그 간의 이벤트에 대한 날짜와 시간을 비교하면 가능한 원인 목록을 좁혀갈 있습니다. SQL Server Management Studio 로그 파일 뷰어를 사용하면 SQL Server, SQL Server 에이전트 Windows 로그를 단일 목록으로 통합할 있어 관련된 서버 이벤트와 SQL Server 이벤트를 쉽게 이해할 있습니다.

 

n       SQL Server 오류 로그 보기

SQL Server Management Studio 또는 텍스트 편집기를 사용하여 SQL Server 오류 로그를 확인할 있습니다. SQL Server 로그는 응용 프로그램의 상태 정보를 알기 위한 유용한 자료이므로 주기적인 모니터링이 필요합니다.

SQL Server 로그는 서비스가 시작할 때부터 서비스가 중지될 때까지 계속 메시지를 기록하며, SQL Server 시작될 때마다 새로운 오류 로그가 만들어집니다.

모니터링 관리의 효율을 위하여 모니터링 담당자가 SQL Server 로그에서 찾아야 것을 정의합니다. 로그는 심각도 수준 19~25 값을 가진 모든 오류를 기록합니다. 모니터링 , SQL Server 로그에서 심각도 수준 19~25 사이의 값을 가진 오류는 반드시 점검해야 합니다. 심각도 수준을 가진 오류가 발생하면 트랜잭션이 실패하게 하고 응용 프로그램이 제대로 동작하지 않기 때문입니다. 심각도 수준 20에서 25사이의 오류는 치명적이며, 만일 오류가 발생되면 클라이언트 연결은 오류 메시지를 받은 후에 종료됩니다.

TRYCACHE 구문을 이용하여 심각도가 10 이상인 연결을 끊지 않는 모든 실행 오류를 Catch 있습니다.

로그 파일 뷰어를 이용하면 날짜나 연결, 텍스트 등을 이용하여 필터를 설정해서 로그를 분석할 있으며, 텍스트 파일 CSV 형태로 로그 파일을 내보낼 있습니다.


오류 로그 확인하기:
1. SQL Server Management Studio에서 원하는 데이터베이스 서버를 선택합니다.
2. [관리]폴더를 클릭하고, [SQL Server 로그]를 클릭합니다.
3. 원하는 로그파일을 더블 클릭하면, 로그 파일 뷰어가 실행이 되면서 해당 로그 파일을 조회할 수 있습니다.


쿼리 분석기에서 sp_readerrorlog를 실행하여 확인할 수도 있습니다.

EXEC sp_readerrorlog 3 ;

GO

반응형
반응형

DBCC SQLPERF 사용하면 서버 내에 존재하는 모든 데이터베이스의 트랜잭션 로그 공간의 사용에 관한 통계를 확인할 있습니다. 로그 공간 사용을 모니터링함으로써 적절한 로그 파일의 크기를 산정하거나 로그 백업 또는 잘라내기가 필요한 시점을 확인할 있습니다.

 

데이터베이스별 로그 사용 공간 확인하기

DBCC SQLPERF ( LOGSPACE );

GO

 

반응형
반응형

시스템 카탈로그 sys. database_files 이용하여 데이터베이스의 공간을 확인할 있습니다.

그러나, 대형 인덱스를 삭제하거나 다시 작성할 또는 대형 테이블을 삭제하거나 잘라낼 데이터베이스 엔진은 트랜잭션이 커밋될 때까지 실제 페이지 할당 취소 관련 잠금을 연기합니다. 삭제 작업이 지연되어도 할당된 공간이 즉시 해제되지는 않습니다. 따라서 대형 인덱스를 삭제하거나 잘라낸 직후 sys.database_files에서 반환한 값은 실제 사용할 있는 디스크 공간과 다를 있습니다.
동적 관리 sys.dm_db_file_space_usage 이용하여 데이터베이스의 파일에 대한 공간 사용량 정보를 확인할 수도 있습니다.

 

 

SELECT SUM(size)*1.0/128 AS [size in MB]

FROM tempdb.sys.database_files;

GO

 

현재 데이터베이스의 여유 공간 정보 확인하기

SELECT SUM(unallocated_extent_page_count) AS [free pages],

(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]

FROM sys.dm_db_file_space_usage;

GO

 

sp_spaceused 저장 프로시저를 실행할 경우, 테이블을 지정하지 않으면 해당 데이터베이스의 크기가 반환됩니다.

반응형
반응형

DATABASEPROPERTYEX 함수를 사용하면 지정한 데이터베이스에 대하여 지정한 데이터베이스 옵션이나 속성의 현재 설정을 확인할 있습니다. DATABASEPROPERTYEX 함수는 지정한 Property 대한 결과값을 반환하며 한번에 하나의 속성 설정만 조회 가능합니다. property 목록과 그에 따른 결과의 종류는 온라인 설명서를 참조하기 바랍니다.

 

[구문] DATABASEPROPERTYEX (database_name, property)

 

sys.databases 카탈로그 뷰를 사용하면 한번에 여러 가지 속성 설정을 조회할 있으며, sp_dboption 사용하여 데이터베이스에 현재 설정되어 있는 옵션을 확인할 수도 있습니다.

데이터베이스의 옵션 상태는 ALTER DATABASE 이용하여 변경할 있습니다.

 

DATABASEPROPERTYEX 사용하여 데이터베이스 옵션 설정 확인하기

-- AdventureWorks 데이터베이스의 통계 자동 업데이트 옵션 설정 확인

SELECT DATABASEPROPERTYEX ('AdventureWorks','IsAutoUpdateStatistics')

AS IsAutoUpdateStatistics;

GO

-- AdventureWorks 데이터베이스의 복구 모델 설정 확인

SELECT DATABASEPROPERTYEX ('AdventureWorks','Recovery') AS Recovery;

GO

 

sys.databases 뷰를 사용하여 데이터베이스 옵션 설정 확인하기

-- 모든 데이터베이스의 설정 옵션 목록 확인
SELECT * FROM sys.databases;
GO

-- AdventureWorks 데이터베이스의 설정 옵션을 확인
SELECT * FROM sys.databases WHERE Name = ‘AdventureWorks’;
GO

-- AdventureWorks 데이터베이스의 통계 자동 생성 업데이트 옵션 설정 확인

SELECT name, is_auto_create_stats_on, is_auto_update_stats_on

FROM sys.databases

WHERE name='AdventureWorks';

GO

-- AdventureWorks 데이터베이스의 복구 모델 설정 확인

SELECT recovery_model, recovery_model_desc FROM sys.databases

WHERE name = 'AdventureWorks';

GO

 

데이터베이스의 현재 설정 옵션 확인하기

EXEC sp_dboption 'AdventureWorks';

GO

 

반응형
반응형

지정된 데이터베이스 또는 모든 데이터베이스 정보를 반환합니다.

 

[구문] sp_helpdb [ [ @dbname= ] 'name' ]

 

n       데이터베이스를 지정하지 않으면 다음의 결과 집합이 반환됩니다.

이름

내용

name

데이터베이스 이름

db_size

데이터베이스의 크기

owner

데이터베이스의 소유자

dbid

데이터베이스의 ID

created

데이터베이스의 생성일자

status

옵션의 값을 쉼표로 분리하여 나열한 정보

compatibility_level

호환성 수준(60,65,70,80,90)

 

n       데이터베이스를 지정하면 위의 결과 집합에 다음의 결과 집합이 추가로 나타납니다.

이름

내용

name

논리적 파일 이름

fileid

파일 ID

filename

파일의 물리적 경로와 이름

filegroup

파일이 속한 그룹, 로그 파일인 경우 NULL

size

파일 크기(MB)

maxsize

파일이 증가할 있는 최대 크기

growth

파일의 증가량

usage

파일의 용도

 

반응형
반응형

sp_helpfilegroup를 사용하면 데이터베이스와 관련되는 파일그룹의 이름과 특징을 반환합니다.

파일그룹의 이름을 지정하지 않으면, 데이터베이스내의 모든 파일그룹에 대한 기본 정보를 확인할 있고, 파일 그룹의 이름을 지정하면 지정한 파일 그룹에 대한 기본 정보와 그 파일그룹에 포함되는 파일에 대한 파일별 정보를 얻을 수 있습니다.

 

[구문] sp_helpfilegroup [ [ @filegroupname = ] 'name' ]



예: AdventureWorks 예제 데이터베이스에 있는 파일 그룹에 대한 정보를 반환합니다.
USE AdventureWorks;
GO
EXEC sp_helpfilegroup;
GO


예: AdventureWorks 예제 데이터베이스의 PRIMARY 파일 그룹에 있는 모든 파일에 대한 정보를 반환합니다.
USE AdventureWorks;
GO
EXEC sp_helpfilegroup 'PRIMARY';
GO

반응형
반응형

현재 데이터베이스와 연관된 파일의 물리적 이름과 특징을 반환합니다. 파일 이름을 지정하지 않으면, 데이터베이스내의 모든 파일에 대한 정보를 확인할 있습니다.

 

[구문] sp_helpfile [ [ @filename = ] 'name' ] 

 

데이터베이스 파일 정보 확인하기

USE Sample;

GO

EXEC sp_helpfile;

GO

SELECT * FROM Sample.sys.database_files;

GO

 

크기가 큰 인덱스를 삭제하거나 다시 작성할 때 또는 큰 테이블을 삭제하거나 잘라낼 때 SQL Server 2005 데이터베이스 엔진은 트랜잭션이 커밋될 때까지 실제 페이지 할당 취소와 관련 잠금을 지연시킵니다. 이러한 구현은 다중 사용자 환경에서 자동 커밋 트랜잭션과 명시적 트랜잭션을 모두 지원하며 익스텐트를 129개 넘게 사용하는 큰 테이블이나 인덱스에 적용됩니다. 데이터베이스 엔진은 프로세스를 논리적 단계와 물리적 단계의 두 단계로 나눠 큰 개체를 삭제하는 데 필요한 할당 잠금을 피합니다.

 

- 논리적 단계 : 테이블이나 인덱스에 사용되는 기존 할당 단위가 할당 취소로 표시되고 트랜잭션이 커밋될 때까지 잠깁니다. 클러스터형 인덱스가 삭제되면 데이터 행이 복사되어 다시 작성된 클러스터형 인덱스나 힙을 저장하기 위해 생성된 새 할당 단위로 이동됩니다. 또한 인덱스 다시 작성의 경우 데이터 행이 정렬됩니다. 롤백이 있으면 이 논리 단계만 롤백해야 합니다.


 

- 물리적 단계 : 트랜잭션 커밋 후 발생합니다. 할당 취소로 표시된 할당 단위가 일괄 작업을 통해 물리적으로 삭제됩니다. 이러한 삭제 작업은 백그라운드에서 발생하는 짧은 트랜잭션 내에서 처리되며 많은 잠금을 필요로 하지 않습니다. 물리적 단계는 트랜잭션 커밋 후 발생하므로 테이블이나 인덱스의 저장 공간이 여전히 사용될 수 없는 것으로 나타날 수 있습니다. 물리적 단계가 완료되기 전에 데이터베이스가 증가하는 데 이 공간이 필요하면 데이터베이스 엔진이 할당 취소로 표시된 할당 단위로부터 공간을 복구하려고 합니다. 이러한 할당 단위에서 현재 사용하고 있는 공간을 찾으려면 sys.allocation_units 카탈로그 뷰를 사용하면 됩니다.

 

지연된 삭제 작업은 할당된 공간을 바로 해제하지 않기 때문에 데이터베이스 엔진에 추가 오버헤드 비용을 초래합니다. 따라서 128개 이하의 익스텐트를 사용하는 테이블과 인덱스는 SQL Server 2000 과 동일한 방식으로 삭제되고 잘리고 다시 작성됩니다. 즉, 논리적 단계와 물리적 단계가 모두 트랜잭션 커밋 전에 발생합니다.

지연된 삭제 작업 방식은 할당된 공간을 즉시 해제하지 않기 때문에 대형 인덱스를 삭제하거나 잘라낸 직후 sys.database_files에서 반환하는 값은 실제 사용할 수 있는 디스크 공간과 다를 수 있습니다.

반응형

+ Recent posts

반응형