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


17

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

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

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

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

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


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