백업 내부-SQL Server의 잠금 및 성능 오버 헤드 측면에서 백업 작업이 실행되면 어떻게됩니까?


13

MySQL의 경우 데이터베이스가 SQL 문에서 테이블별로 백업된다는 것을 알고 있습니다. 이로 인해 잠금이 발생하고 백업하는 동안 열을 업데이트하면 무결성 문제가 발생할 수 있습니다.

내 이해에 이것은 Microsoft SQL Server에는 적용되지 않지만 SQL Server는 이것을 어떻게 처리합니까? DB 일관성을 유지하기 위해 내부 동결이 있습니까?

또한 백업이 단일 스레드라는 것을 들었습니다. 단일 파일로 백업한다고 가정하면 하나의 코어 만 사용합니다. 또한 멀티 코어 머신 (예 : 16 코어 또는 적어도 하나보다 큰 숫자)이 있다고 가정합니다.

개인적인 경험으로는 백업을 할 때 문제가 없었으며 잠금이나 오버 헤드 문제는 없었지만 내 경험은 제한적입니다. 서버 속성에서 항상 백업 압축을 설정하는 것이 좋습니다.

백업 작업이 실행되면 어떻게됩니까? 또한 버전마다 큰 차이가 있습니까? 예를 들어 2008,2012 및 2014 (라이센스가 아님).


4
이 Paul Randall 기사는 백업에 대한 정보를 얻을 수있는 훌륭한 시작입니다. technet.microsoft.com/en-us/magazine/2009.07.sqlbackup.aspx
James Anderson

답변:


9

귀하의 모든 지점에 설명되어 백업 신화 - 폴 랜달에 의해

30-01) 백업 작업으로 인해 차단

번호 백업 작업은 사용자 개체에 잠금을하지 않습니다 . 백업은 I에 정말 무거운 읽기 부하 원인 할 / O 서브 시스템은 수 있도록 보고 작업 부하가 차단되고처럼,하지만 정말 아니다. 속도가 느려지고 있습니다. 대량 로그 익스텐트를 가져와야하는 백업에서 파일 잠금을 수행하여 검사 점 작업을 차단할 수 있지만 DML은 차단되지 않는 특별한 경우가 있습니다.

또한 백업이 단일 스레드라는 것을 들었습니다. 단일 파일로 백업한다고 가정하면 하나의 코어 만 사용합니다.

단일 파일이나 장치에 백업을 수행하면 기록기 스레드 1 개가 사용됩니다. 따라서 여러 파일 / 장치 (여러 개의 .bak 파일)에 백업하는 경우 파일 / 장치 당 하나의 작성기 스레드가 있습니다.

백업 성능을 향상시키는 가장 쉬운 방법은 백업 작업을 병렬화하여 백업 스트라이핑이라고합니다. 기본적으로, 각 드라이브 문자 또는 마운트 포인트에서 읽을 단일 데이터 리더 스레드와 기록중인 각 백업 장치에 대한 단일 데이터 쓰기 스레드가 있습니다.

검사

  1. SQL Server 2008 MMC (Microsoft Certified Master) 준비 비디오, 특히 백업 내부 자료.
  2. 백업 내부 및 백업 및 복원 처리량을 추적하는 방법 (1 부)-작성자 : Jonathan Kehayias
  3. 백업 내부 및 백업 및 복원 처리량을 추적하는 방법 (2 부)-작성자 : Jonathan Kehayias

7

백업 내부와 관련하여 Paul이 작성한 기사는 훌륭하며 반드시 읽어야합니다. 다른 사람들이 말한 내용에 추가하고 질문의 특정 부분을 강조

또한 백업이 단일 스레드라는 것을 들었습니다. 단일 파일로 백업한다고 가정하면 하나의 코어 만 사용합니다. 또한 멀티 코어 머신 (예 : 16 코어 또는 적어도 하나보다 큰 숫자)이 있다고 가정합니다.

백업 작업 can use parallelism이지만이 점을 기억하십시오 . SQL Server의 Optimizer가 병렬 처리 가 아니라 백업이 데이터 파일을 읽어야하는 위치와 백업이 데이터 파일 및 작성된 백업 파일의 양을 기록하는 위치와 관련된 디스크 수에 의해 구동됩니다.

MAXDOPSQL Server 백업을 수행하는 동안 힌트를 사용할 수 없습니다

간단한 TSQL 백업 작업을 위해 SSMS에서 실행 계획을 생성 할 수 없습니다.

SQL Server의 쿼리 최적화 프로그램이 구동하는 병렬 처리는 기본적으로 관련 연산자에 대한 것입니다 (실제로는 복잡하지만 단순성을 위해이를 수행 할 수 있음). 백업 작업에는 연산자가 포함되지 않으므로 최적화 프로그램이 구동하는 병렬 처리를 사용할 수 없기 때문입니다.

Technet Wiki에서 백업 및 병렬 처리 에 대한 기사를 작성하여 SQL Server 백업 중 병렬 처리를 설명하는 간단한 예제를 사용했습니다. 다음은 결론입니다

  1. 데이터베이스 파일이 여러 디스크에있는 경우 데이터를 읽기 위해 장치 드라이브 당 스레드에서 백업 조작이 시작됩니다. 동일한 방식으로 여러 드라이브 / 마운트 포인트에서 복원을 수행하면 백업 작업이 드라이브 / 마운트 포인트 당 하나의 스레드를 시작합니다.

  2. 동일한 드라이브에 여러 백업 사본을 덤프하더라도 백업 파일 당 하나의 스레드가 덤프됩니다.

  3. 백업과 관련된 병렬 처리는 스트라이프와 관련이 있습니다. 각 스트라이프는 자체 작업자 스레드를 가져 오며 이는 실제로 병렬 작업으로 고려해야하는 백업 / 복원의 유일한 부분입니다.

  4. 최대 병렬 처리 수준은 백업 작업에 영향을 미치지 않습니다.

Paul과 Bob Dorr로부터 이에 대한 전문가 의견이 있습니다.

백업 작업이 실행되면 어떻게됩니까? 또한 버전마다 큰 차이가 있습니까? 예를 들어 2008,2012 및 2014 (라이센스가 아님).

Bob Dorr 의이 blog.msdn 기사 를 읽어 보시기 바랍니다 . 그가 강조한 몇 가지 중요한 점은

  1. 백업이 시작되면 버퍼 풀 외부의 메모리에서 할당 된 일련의 버퍼가 생성됩니다. 대상은 각 버퍼에 대해 일반적으로 4MB이며 약 4-8 개의 버퍼가됩니다. 계산에 대한 자세한 내용은 http://support.microsoft.com/kb/904804/en-us에 있습니다.

  2. 버퍼는 사용 가능 큐와 데이터 큐간에 전환됩니다. 판독기는 사용 가능한 버퍼를 가져 와서 데이터로 채우고 데이터 큐에 놓습니다. 기록기는 채워진 데이터 버퍼를 데이터 큐에서 가져 와서 버퍼를 처리 한 후 사용 가능 목록으로 리턴합니다.

  3. 각 데이터 큐에서 검색하는 백업 장치 당 라이터가 제공됩니다. 따라서 디스크 사양이 4 (4) 인 백업 명령에는 4 개의 기록기와 판독기가 있습니다. 판독기는 비동기 I / O를 사용하므로 기록기를 따라갈 수 있습니다.

당신은 사용할 수 있습니다 trace flags 3213 and 3605, 모두 너무 문서화 테스트 환경에 사용하십시오, 그리고 흥미로운 메시지가 SQL Server 오류 로그에 버려진 무엇을 참조하십시오. 아래와 같은 것이 나타납니다

Memory limit: 249MB
BufferCount:                7
Sets Of Buffers:            1
MaxTransferSize:            1024 KB
Min MaxTransferSize:        64 KB
Total buffer space:         7 MB
Tabular data device count:  1
Fulltext data device count: 0
Filestream device count:    0
TXF device count:           0
Filesystem i/o alignment:   512
Media Buffer count:            7
Media Buffer size:          1024KB

다양한 버전의 백업 코드에서 중요한 변경 사항을 알지 못하며 그러한 사항은 설명되어 있지 않습니다. SQL Server 2012 SP1 Cumulative Update 2,TSQL 또는 SMO를 사용하여 SQL Server의 Windows Azure Blob 저장소 서비스에서 백업 및 복원을 활성화하는 데 도입 된 개선 사항에 대해서만 알고 있습니다. 여기를 읽으 십시오


4

기본적으로 SQL Server는 디스크에있는 모든 페이지의 더티 사본을 수행합니다. 동시 활동이 있거나 이전에 점검되지 않은 활동이있는 경우 해당 페이지가 일치하지 않을 수 있습니다.

그런 다음 SQL Server는 오래된 페이지를 최신 버전으로 가져와 복원시 일관성을 유지하는 데 필요한 트랜잭션 로그의 필요한 부분을 복사합니다.

백업 작업의 다중 스레드에 대해서는 말할 수 없습니다. 나는 그것이 병렬화 될 것으로 기대한다. 10GB / sec IO 하위 시스템에서 10TB 데이터베이스를 어떻게 백업 할 수 있습니까?


답변을 해주셔서 감사합니다. 그러나 일부는 명확하지 않습니다. 백업 작업 중에 복구 모델을 단순으로 설정하거나 잘라내 기와 같은 명령문을 실행하면 어떻게됩니까? 그것은 SQL 서버가 이것을 일관된 상태로 만들 수 없다는 것을 의미하지 않습니까?
RayofCommand

백업 중 유효 로그 모델이 가득 찼습니다. SIMPLE을 원하더라도 SQL Server는 모든 것을 롤 포워드 할 수 있어야합니다. 잘라 내기 테이블은 기록되고 처리 된 작업이며 아무런 문제가 없습니다. DDL은 트랜잭션입니다.
usr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.