>  기사  >  데이터 베이스  >  SQL Server 2016 Snapshot Agent 프로세스에 대한 자세한 설명

SQL Server 2016 Snapshot Agent 프로세스에 대한 자세한 설명

小云云
小云云원래의
2017-12-12 09:11:312110검색

이 문서에서는 SQL Server 2016 스냅샷 에이전트 프로세스에 대한 자세한 분석과 주의해야 할 사항에 대한 예를 제공합니다. SQL Server 2016의 인스턴스 데이터 테이블을 사용하여 스냅샷 에이전트 프로세스에서 발생하는 문제와 해결 방법에 대한 자세한 분석을 제공하고 스냅샷 생성 프로세스에 대한 자세한 설명은 다음과 같습니다.

개요

스냅샷 에이전트 준비 테이블 및 기타 개체에 대한 스키마 및 초기 데이터 파일을 게시하고 스냅샷 파일을 저장하며 배포 데이터베이스에 동기화 정보를 기록합니다. 스냅샷 에이전트는 배포 서버에서 실행됩니다. SQL Server 2016 버전에서는 스냅샷 에이전트에 대한 최적화가 향상되었습니다. 다음으로 스냅샷 실행 프로세스에 대해 자세히 알아 보겠습니다.

1. 스냅샷 프록시 파일

스냅샷 작업을 실행하면 지정된 스냅샷 디렉터리에 4가지 유형의 파일이 생성됩니다.

BCP 파일: 게시된 개체의 데이터 파일입니다.

IDX 파일: 인덱스 생성 스크립트 파일

PRE 파일: 스냅샷 스크립트 파일을 복사합니다.

SCH 파일: 아키텍처 생성 스크립트 파일

2. 기본 스냅샷 에이전트 구성 파일

-BcpBachSize: 각 bcp 작업 복사본에 대한 최대 레코드 줄 수, 기본값은 100,000줄입니다.

-HistoryVerboseLevel: 스냅샷 작업 중에 기록되는 기록의 크기를 지정합니다.

-LoginTimeout: 로그인 시간이 초과되기까지 기다려야 하는 시간(초)입니다. 기본값은 15초입니다.

-QueryTimeOut: 쿼리 시간이 초과될 때까지 기다려야 하는 시간(초)입니다. 기본값은 1800초

참고: 스냅샷 에이전트-스냅샷 에이전트 구성 파일을 마우스 오른쪽 버튼으로 클릭하여 스냅샷 에이전트를 구성할 수 있습니다.

3. 다양한 버전의 스냅샷 에이전트 비교

다음 테스트는 2억 개의 레코드 테이블에서 생성된 스냅샷을 비교하는 것입니다

1.bcp 파일 번호 비교

2008R2

2016SP1

여기서 핵심은 BCP 파일에 대해 이야기해 보겠습니다. 구독자에게 스냅샷을 적용하면 BCP 파일이 기본 단위로 사용되기 때문입니다. 즉, BCP 파일이 아무리 크더라도 구독자에게 대량으로 전송됩니다. 따라서 BCP 파일이 클수록 적용 시간이 길어집니다. BCP 파일이 너무 크면 구독자로의 삽입이 실패할 수 있습니다.

위 사진에서 볼 수 있듯이 2008R2에는 총 8개의 BCP 파일이 있으며, 가장 큰 BCP 파일 크기는 거의 1G에 불과합니다. 2016에는 16개의 BCP 파일이 있습니다. 처음 15개는 모두 50M 부근의 데이터는 비교적 균일합니다. 다음으로 아래 그림에서 각 BCP 파일의 기록 비교를 살펴보자.

2. 세부 스냅샷 생성 과정 비교

2008r2

2016SP1

생성된 BCP 파일 레코드 비교:

2008R2: 대략적인 스냅샷 수 처음 7개 파일의 각 파일에 기록 약 70만 명이며, 마지막 문서에는 1억 1천만 명을 기록하고 있습니다.

2016: 처음 15개 파일은 각각 약 700만 개를 기록했고, 마지막 파일은 780,000개를 기록했습니다.

설명:

2008R2의 처음 7개 파일 각각에 저장된 대략적인 레코드 수는 700,000개이며 나머지 레코드는 마지막 파일에 저장되므로 2008R2에 적합한 테이블 레코드 수는 약 600만 개입니다.

2016년에 처음 15개 파일 각각에 저장된 대략적인 레코드 수는 700만 개입니다. 나머지 레코드는 마지막 파일에 저장됩니다. 2016년에 적합한 테이블 레코드 수는 약 1억 2천만 개입니다.

공통적인 단점: 테이블 레코드가 "복제된 테이블 레코드의 적절한 수"를 초과하면 남은 모든 데이터는 마지막 bcp ​​파일에 저장됩니다.

3. 배포 비교

배포 과정을 자세히 살펴보자

2008R2 배포 기록 과정을 보면 각 BULK가 bcp 파일을 기반으로 하고, 복사하는데 약 22시간이 소요되는 것을 알 수 있다. 마지막 bcp ​​파일에는 분, 이전 각 파일에는 10초 이상이 걸렸습니다. 또는 현재 테이블에는 기본 키를 제외한 인덱스가 3개만 있고 시간이 더 길어집니다.

4. 스냅샷 생성 프로세스

복제 스냅샷 에이전트는 스냅샷 파일(게시된 테이블 및 데이터베이스 개체의 스키마 및 데이터 포함)을 준비한 후 해당 파일을 스냅샷 파일 폴더에 저장하는 실행 파일입니다. 배포 데이터베이스에 동기화 작업을 기록합니다.

위 사진을 보시면 전체 스냅샷 생성 과정을 이해하실 수 있습니다.

5. 구문

snapshot [ -?]  
-Publisher server_name[\instance_name]  
-Publication publication_name  
[-70Subscribers]  
[-BcpBatchSize bcp_batch_size] 
[-DefinitionFile def_path_and_file_name] 
[-Distributor server_name[\instance_name]] 
[-DistributorDeadlockPriority [-1|0|1] ] 
[-DistributorLogin distributor_login] 
[-DistributorPassword distributor_password] 
[-DistributorSecurityMode [0|1] ] 
[-DynamicFilterHostName dynamic_filter_host_name] 
[-DynamicFilterLogin dynamic_filter_login] 
[-DynamicSnapshotLocation dynamic_snapshot_location]  
[-EncryptionLevel [0|1|2]] 
[-FieldDelimiter field_delimiter] 
[-HistoryVerboseLevel [0|1|2|3] ] 
[-HRBcpBlocks number_of_blocks ] 
[-HRBcpBlockSize block_size ] 
[-HRBcpDynamicBlocks ] 
[-KeepAliveMessageInterval keep_alive_interval] 
[-LoginTimeOut login_time_out_seconds] 
[-MaxBcpThreads number_of_threads ] 
[-MaxNetworkOptimization [0|1]] 
[-Output output_path_and_file_name] 
[-OutputVerboseLevel [0|1|2] ] 
[-PacketSize packet_size] 
[-ProfileName profile_name] 
[-PublisherDB publisher_database] 
[-PublisherDeadlockPriority [-1|0|1] ] 
[-PublisherFailoverPartner server_name[\instance_name] ] 
[-PublisherLogin publisher_login] 
[-PublisherPassword publisher_password]  
[-PublisherSecurityMode [0|1] ] 
[-QueryTimeOut query_time_out_seconds] 
[-ReplicationType [1|2] ] 
[-RowDelimiter row_delimiter] 
[-StartQueueTimeout start_queue_timeout_seconds] 
[-UsePerArticleContentsView use_per_article_contents_view]

Parameters

-?

사용 가능한 모든 매개변수를 출력합니다.

-Publisher server_name[instance_name]

출판 서버의 이름입니다. 이 서버에 있는 Microsoft SQL Server의 기본 인스턴스에 대해 server_name을 지정하십시오. 이 서버의 server_nameinstance_name instance_name SQL Server 기본 인스턴스에 대해 server_name을 지정합니다.

-Publication Publication

출판 이름입니다. 이 매개 변수는 새 구독이나 다시 초기화된 구독에서 항상 스냅샷을 사용할 수 있도록 게시가 설정된 경우에만 유효합니다.

-70Subscribers

구독자가 SQL Server 버전 7.0을 실행하는 경우 이 매개 변수를 사용해야 합니다.

-BcpBatchSize bcp 배치 size

대량 복사 작업에서 전송된 행 수입니다. 배치 크기는 bcp 작업을 수행할 때 하나의 트랜잭션으로 서버에 보낼 행 수이며, 배포 에이전트가 bcp 진행 메시지를 기록하기 전에 보내야 하는 행 수입니다. bcp out 작업을 수행할 때 고정된 배치 크기 1000이 사용됩니다. 값이 0이면 메시지가 기록되지 않음을 의미합니다.

-DefinitionFile def_path_and_file_name

에이전트 정의 파일의 경로입니다. 에이전트 정의 파일에는 에이전트에 대한 명령줄 매개변수가 포함되어 있습니다. 파일의 내용은 실행 파일로 분석됩니다. 모든 문자가 포함된 매개변수 값을 지정하려면 큰따옴표(")를 사용하십시오.

-Distributor server_name[instance_name]

배포 서버 이름. 이 서버 SQL Server의 기본 인스턴스에 대해 server_name을 지정하십시오. 교착 상태 발생 시 스냅샷 에이전트가 배포 서버에 연결하는 우선 순위는 스냅샷 생성 중에 스냅샷 에이전트와 사용자 애플리케이션 사이에 발생하는 교착 상태 문제를 해결합니다. Description


-1

배포 서버에서 교착 상태가 발생하면 스냅샷 에이전트 대신 애플리케이션이 우선 적용됩니다.

0(기본값)

우선 순위가 지정되지 않습니다. 1 배포 서버에 교착 상태가 발생하면 스냅샷 에이전트가 우선합니다. distributor_login

SQL Server 인증을 사용하여 배포 서버에 연결할 때 사용할 로그인 이름

-DistributorPassword

distributor_password


SQL Server 인증을 사용하여 배포 서버에 연결할 때 사용합니다. urityMode [ 0| 1]

0 값은 SQL Server 인증 모드를 나타냅니다. , 값 1은 Windows 인증 모드를 나타냅니다.

-DynamicFilterHostName

dynamic_filter_host_name

필터링에서 HOST_NAME(Transact-SQL) 값을 설정하는 데 사용됩니다. 프로젝트에 대해 지정되었으며 병합 에이전트를 호출하기 전에 DynamicFilterHostName 속성이 "FBJones"로 설정되어 있으면 rep_id 열에 "FBJones"가 있는 행만 복사됩니다.

-DynamicFilterLogin


은 동적 스냅샷을 생성할 때 필터의 SUSER_SNAME(Transact-SQL) 값입니다. 예를 들어 프로젝트에 하위 집합 필터 절 user_id = SUSER_SNAME()이 지정되고 SQLSnapshot 개체의 Run 메서드를 호출하기 전에 DynamicFilterLogin 속성이 "rsmith"로 설정된 경우 user_id 열에 "rsmith"가 있는 행만 포함됩니다. 스냅샷.

-DynamicSnapshotLocation

dynamic_snapshot_location


동적 스냅샷이 생성되어야 하는 위치입니다.

-EncryptionLevel [ 0 | 1 | 2 ]

연결을 설정할 때 스냅샷 에이전트가 사용하는 SSL(Secure Socket Layer) 암호화 수준입니다.



EncryptionLevel 값

설명


0

SSL을 사용하지 않도록 지정합니다.

1

SSL을 사용하도록 지정했지만 프록시는 SSL 서버 인증서가 신뢰할 수 있는 발급자가 서명했는지 확인하지 않습니다.

2

SSL 사용을 지정하고 인증서를 확인하세요.

-FieldDelimiter field_delimiter
SQL Server 대량 복사 데이터 파일에서 필드 끝을 표시하는 데 사용되는 문자 또는 문자 시퀀스입니다. 기본값은 nn입니다.

-HistoryVerboseLevel [ 1| 2| 3]
스냅샷 작업 중에 기록되는 기록의 크기를 지정합니다. 기록 로깅이 성능에 미치는 영향을 최소화하려면 1을 선택합니다.

HistoryVerboseLevel 값

설명


0

진행 메시지가 콘솔 또는 출력 파일에 기록됩니다. 배포 데이터베이스에 기록을 기록하지 않습니다.

1

이전 기록 메시지를 항상 동일한 상태(시작됨, 진행 중, 성공 등)로 업데이트하세요. 동일한 상태의 이전 기록이 없으면 새로운 기록이 삽입됩니다.

2(기본값)

기록이 유휴 메시지 또는 장기 실행 작업 메시지와 같은 정보가 아닌 경우 새 기록 기록을 삽입합니다(이 경우 이전 기록이 업데이트됩니다).

3

유휴 메시지와 관련된 것이 아닌 이상 항상 새 레코드를 삽입하세요.

-HRBcpBlocks number_of_blocks

작성기 스레드와 판독기 스레드 사이에 대기 중인 bcp 데이터 블록 수입니다. 기본값은 50입니다. HRBcpBlock은 Oracle 릴리스에서만 사용됩니다.

Remarks

이 매개변수는 Oracle 게시자를 통해 bcp 성능을 최적화하는 데 사용됩니다.

-HRBcpBlockSizeblock_size

각 bcp 데이터 블록의 크기(KB)입니다. 기본값은 64KB입니다. HRBcpBlock은 Oracle 릴리스에서만 사용됩니다.

Remarks

이 매개변수는 Oracle 게시자를 통해 bcp 성능을 최적화하는 데 사용됩니다.

-HRBcpDynamicBlocks

각 bcp 데이터 블록의 크기가 동적으로 커질 수 있는지 여부입니다. HRBcpBlock은 Oracle 릴리스에서만 사용됩니다.

Remarks

이 매개변수는 Oracle 게시자를 통해 bcp 성능을 최적화하는 데 사용됩니다.

-KeepAliveMessageInterval keep_alive_interval

스냅샷 에이전트가 MSsnapshot_history 테이블에 "백엔드 메시지 대기 중"을 기록하기 전에 대기하는 시간(초)입니다. 기본값은 300초입니다.

-LoginTimeOut login_time_out_seconds

로그인 시간이 초과되기까지 기다려야 하는 시간(초)입니다. 기본값은 15초입니다.

-MaxBcpThreads number_of_threads

병렬로 수행할 수 있는 대량 복사 작업 수를 지정합니다. 동시 스레드 및 ODBC 연결의 최대 수는 MaxBcpThreads 또는 배포 데이터베이스의 동기화 트랜잭션에 표시된 대량 복사 요청 수 중 더 작습니다. MaxBcpThreads의 값은 0보다 커야 하며 하드 코딩된 상한이 없습니다. 기본값은 1입니다.

- MaxNetworkOptimization [ 0| 1]

관련 없는 삭제 작업을 구독자에게 보낼지 여부입니다. 관련 없는 삭제 작업은 구독자 파티션에 속하지 않는 행에 대해 구독자로 전송되는 DELETE 명령입니다. 관련 없는 삭제 작업은 데이터 무결성이나 수렴에 영향을 미치지 않지만 불필요한 네트워크 트래픽을 유발할 수 있습니다. MaxNetworkOptimization의 기본값은 0입니다. MaxNetworkOptimization을 1로 설정하면 관련 없는 삭제 작업이 발생할 가능성이 최소화되므로 네트워크 트래픽이 줄어들고 네트워크 최적화가 최대화됩니다. 여러 수준의 조인 필터와 복잡한 하위 집합 필터가 있는 경우 이 매개 변수를 1로 설정하면 메타데이터 저장 공간이 늘어나고 게시자 성능이 저하될 수도 있습니다. 복제 토폴로지를 신중하게 평가하고 관련 없는 삭제 작업으로 인해 발생한 네트워크 트래픽이 허용할 수 없을 정도로 높은 경우에만 MaxNetworkOptimization을 1로 설정해야 합니다.

Remarks

이 매개 변수를 1로 설정하는 것은 병합 게시의 동기화 최적화 옵션(sp_addmergepublication(Transact-SQL)의 @keep_partition_changes 매개 변수)이 true로 설정된 경우에만 유용합니다.

-출력 output_path_and_file_name

에이전트 출력 파일의 경로입니다. 파일 이름이 제공되지 않으면 이 출력이 콘솔로 전송됩니다. 지정된 파일 이름이 이미 존재하는 경우 출력이 파일에 추가됩니다.

-OutputVerboseLevel [ 0| 1| 2]

출력에서 ​​자세한 내용을 제공할지 여부를 지정합니다.

OutputVerboseLevel 값

설명


0

오류 메시지만 출력합니다.

1(기본값)

모든 진행 보고서 메시지를 출력합니다(기본값).

2

디버깅에 유용한 모든 오류 메시지와 진행 보고서 메시지를 출력합니다.

-PacketSize packet_size

SQL Server에 연결할 때 스냅샷 에이전트에서 사용하는 패킷 크기(바이트)입니다. 기본값은 8192바이트입니다.

Notes

성능이 향상될 것이라고 확신하지 않는 한 패킷 크기를 변경하지 마십시오. 대부분의 애플리케이션에서는 기본 패킷 크기가 최적의 값입니다.

-ProfileName profile_name

프록시 매개변수에 사용되는 프록시 프로필을 지정합니다. ProfileName이 NULL이면 에이전트 프로필이 비활성화됩니다. ProfileName을 지정하지 않으면 이 에이전트 유형의 기본 프로필이 사용됩니다.

-PublisherDB publisher_database

출판 데이터베이스의 이름입니다. Oracle 게시자는 이 매개변수를 지원하지 않습니다.

-PublisherDeadlockPriority [-1|0|1]

교착 상태가 발생할 때 게시자에 연결하는 스냅샷 에이전트의 우선 순위입니다. 이 매개변수는 스냅샷 생성 중에 스냅샷 에이전트와 사용자 애플리케이션 간에 발생하는 교착 상태 문제를 해결하기 위해 지정됩니다.

PublisherDeadlockPriority 값

설명


-1

게시자에서 발생합니다.

0(기본값)

우선순위가 지정되지 않았습니다.

1

게시자에서 교착 상태가 발생하면 스냅샷 에이전트가 우선적으로 적용됩니다.

-PublisherFailoverPartner server_name[instance_name]

게시 데이터베이스와의 데이터베이스 미러링 세션에 참여하는 SQL Server 장애 조치 파트너 인스턴스를 지정합니다.

-PublisherLogin publisher_login

SQL Server 인증을 사용하여 게시자에 연결할 때 사용되는 로그인 이름입니다.

-PublisherPassword publisher_password

SQL Server 인증을 사용하여 게시자에 연결할 때 사용할 암호입니다. .

-PublisherSecurityMode [ 0| 1]

게시자의 보안 모드를 지정합니다. 값 0은 SQL Server 인증(기본값)을 나타내고 값 1은 Windows 인증 모드를 나타냅니다.

-QueryTimeOut query_time_out_seconds

쿼리가 시간 초과되기 전까지 대기할 시간(초)입니다. 기본값은 1800초입니다.

-ReplicationType [ 1| 2]

복제 유형을 지정합니다. 값 1은 트랜잭션 복제를 나타내고 값 2는 병합 복제를 나타냅니다.

-RowDelimiter row_delimiter

SQL Server 대량 복사 데이터 파일에서 행의 끝을 표시하는 데 사용되는 문자 또는 문자 시퀀스입니다. 기본값은 n<,@g>n입니다.

-StartQueueTimeout start_queue_timeout_seconds

실행 중인 동시 동적 스냅샷 프로세스 수가 sp_addmergepublication(Transact-SQL)의 @max_concurrent_dynamic_snapshots 속성에 설정된 제한에 도달할 때 스냅샷 에이전트가 기다리는 최대 시간(초)입니다. 스냅샷 에이전트가 최대 시간(초) 후에도 여전히 대기 중인 경우 스냅샷 에이전트는 종료됩니다. 값이 0이면 에이전트가 취소될 수는 있지만 무기한 대기한다는 의미입니다.

-UsePerArticleContentsView use_per_article_contents_view

이 매개변수는 더 이상 사용되지 않으며 이전 버전과의 호환성을 위해 지원됩니다.

SQL Server 데이터베이스의 데이터 무결성

SQL Server 제약 조건

SQL Server의 일반 기능 사용 방법 요약

위 내용은 SQL Server 2016 Snapshot Agent 프로세스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.