AlwaysOn 가용성 그룹을 사용하는 동안 트랜잭션 로그 축소


17

우리는 AlwaysOn Availability GroupSQL Server 2012의 기능을 사용하고 있습니다. 정기적 인 전체 데이터베이스 백업 및 트랜잭션 로그 백업은 매일 보조 데이터베이스에서 수행됩니다.

나는 읽고 여기에 주 복제본 또는 재사용으로 모두 복제 '트랜잭션 로그를 표시합니다 보조 복제본 하나의 트랜잭션 로그 백업을 수행. 어쨌든 트랜잭션 로그 백업 크기가 커서 축소 파일을 사용하여 줄일 수 있습니다.

여기에 이미지 설명을 입력하십시오

데이터베이스를 로컬로 복원하고 축소 작업을 수행했습니다. 로그 파일 크기가 160MB로 줄었습니다.

내 질문은 어떤 데이터베이스에서 트랜잭션 로그 파일 (기본, 보조 또는 둘 다)에 대해 축소 작업을 수행해야하는지에 대한 것입니다.


과거에는 몇 년 동안 로그 파일을 백업하지 않았기 때문에 너무 커졌습니다. 실행 하면 파일 만 사용 DBCC SQLPERF (LOGSPACE)된다는 것을 알 수 있습니다 0.06%. 로그 파일의 크기를 크게 유지할 필요는 없습니다. 에서 [sys].[database_files]나는 그것의가 있는지 확인 max_size로 설정 -1growth65536그것을 얻을 것이다 더 많은 공간을 필요로 할 때 내가 생각 때문에. 어쨌든 미래 성장을 막기 위해 예를 들어 5 %로 축소 할 수 있습니다. 나는 그렇게하는 것이 나쁘지 않다는 확인을 찾으려고 노력하고 있습니다.


실제로 백업 (데이터베이스 및 로그 파일)은 보조 데이터베이스에서만 수행되므로 축소 파일을보다 쉽게 ​​수행 할 수 있지만 기본 로그 파일 크기도 줄어 듭니까?

답변:


21

AG에서 쓰기는 기본 서버에서만 발생할 수 있습니다. 축소 작업은 쓰기입니다. 따라서 기본에서 축소를 수행해야합니다. 축소는 예상만큼 줄어들지 않을 수 있습니다. 복원 된 DB에 대한 테스트는 단순한 복구 모델을 활용했을 것입니다. 자세한 정보 는 SQL Server 로그 축소 방법을 읽으십시오 .

160MB로 축소하지 마십시오. 결정하십시오 그것을 반복하지 않도록 로그가 121Gb로 성장할 않았다 (당신은 의심을 가지고 확인 가능한 경우에 좋을 것이다). 운영 요구에 적합한 크기로 로그 크기를 조정하십시오. 로그 증가는 심각한 문제이며, 즉시 파일 초기화를 사용할 수 없으며 로그가 커지고 0으로 초기화되는 동안 모든 데이터베이스 활동이 정지됩니다. 사용자와 앱은 발생시이를 싫어합니다. 경우 당신이 미치는 영향을 이해하고 사용자가 확인을, 당신은 축소 할 수 있습니다 일단 작은 금액 (160메가바이트가 너무 작다고 생각입니다) 그리고이 안정 될 때까지 성장하자.


7

당신은 시도 할 수 있습니다:

  1. 가용성 그룹의 모든 서버에있는 데이터베이스는 동기화 상태 여야합니다.
  2. 축소하기 전에 사용 된 페이지를 이동하여 트랜잭션 로그를 시작하십시오.
  3. 때때로 사용 가능한 로그 여유 공간이 99 %이지만 SQL Server는 사용되지 않은 공간을 해제 할 수 없습니다. 가용성 그룹의 각 서버를 차례로 재부팅하십시오.
  4. 때때로 MS SQL Server가 사용 가능한 공간을 해제하기 전에 트랜잭션 로그를 2 번 베이크 업하고 축소해야합니다 (파일 끝에있는 논리 로그 파일이 사용 중이므로 로그 파일을 축소 할 수 없습니다 (DB_Log)).

이 스크립트를 사용해보십시오 :

    -작업 단계 또는 스크립트 내에서 현재 데이터베이스 설정
    -기본에서만 실행 확인
    if (SELECT 역할
        sys.dm_hadr_availability_replica_states AS에서
        sys.availability_replicas AS b 가입
            ON b.replica_id = a.replica_id
    여기서 b.replica_server_name = @@ SERVERNAME) = 1
    시작
        -[test_db] 사용-MS SQL 2014에서 작동하지 않습니다.이 줄을 주석 처리하고 작업 단계 또는 스크립트 내에 현재 데이터베이스를 설정하십시오.
        -1) Bakup Trn
        백업 로그 [test_db]에서 DISK = N'D : \ MSSQL \ Backup \ test_db.trn '(NOFORMAT, INIT, NAME = N'Trn Backup ', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10)
        -2) 중고 페이지 이동
        DBCC SHRINKFILE (N'test_db_log ', 3000, NOTRUNCATE)
        -3) SHRINKFILE 로그
        DBCC SHRINKFILE (N'test_db_log ', 3000)
    종료
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.