MSSQLSERVER_9017

적용 대상:SQL Server

세부 사항

attribute
제품 이름 SQL Server
이벤트 ID 9017
이벤트 원본 MSSQLSERVER
구성 요소 SQLEngine
심볼 이름 LOG_MANY_VLFS
메시지 텍스트 데이터베이스 %ls에는 과도한 %d개 이상의 가상 로그 파일이 있습니다. 가상 로그 파일이 너무 많으면 시작 및 백업 시간이 길어질 수 있습니다. 로그를 축소하고 다른 증가 증분을 사용하여 가상 로그 파일 수를 줄이는 것이 좋습니다.

설명

데이터베이스를 시작하는 동안 SQL Server는 데이터베이스에 많은 수의 VLL(가상 로그 파일 )이 있음을 감지하고 이 오류 메시지를 기록합니다. 오류가 발생할 수 있는 상황은 다음과 같습니다.

  • SQL Server 인스턴스를 시작할 때
  • 데이터베이스 복원
  • 데이터베이스 연결

이 예제와 유사한 9017 정보 메시지는 SQL Server 오류 로그에 기록됩니다.

Database dbName has more than n virtual log files which is excessive. Too many virtual log files can cause long startup and backup times. Consider shrinking the log and using a different growth increment to reduce the number of virtual log files. Too many virtual log files can adversely affect the recovery time of the database.

또한 사용자 환경에서 복제, 데이터베이스 미러링 또는 AlwaysOn 기술을 사용하는 경우 이러한 기술에 성능 문제가 발생할 수 있습니다.

많은 VLL이 복제에 미치는 영향

로그 판독기 프로세스가 복제용으로 표시된 트랜잭션에 대해 모든 가상 로그 파일을 검색해야 하므로 너무 많은 로그 파일이 복제에 영향을 줄 수 있습니다. 이 동작은 sp_replcmds 저장 프로시저의 성능을 추적하여 확인할 수 있습니다. 로그 판독기 프로세스는 sp_replcmds 저장 프로시저를 사용하여 가상 로그 파일을 검색하고 복제용으로 표시된 트랜잭션을 읽습니다.

원인

이 문제는 트랜잭션 로그 파일에 대한 FILEGROWTH 매개 변수에 작은 값을 지정할 때 발생합니다.

SQL Server 데이터베이스 엔진은 내부적으로 각 물리적 로그 파일을 여러 VLF(가상 로그 파일)로 나눕니다. SQL Server 2008 R2 서비스 팩 2에는 데이터베이스가 시작될 때(SQL Server 인스턴스 시작 또는 연결 또는 복원으로 인해) 기록되는 새 메시지(9017)가 도입되었습니다. 데이터베이스) 및 SQL Server 2008 R2에 1,000개 이상의 VLF가 있거나 SQL Server 2012 이상 버전에 10,000개 이상의 VLFS가 있습니다.

참고 항목

SQL Server 2012에서는 데이터베이스에 10,000개의 VLL이 있을 때 이 메시지가 기록되지만 오류 로그에 보고된 실제 메시지에 "1000 VLF"가 잘못 표시됩니다. 경고는 10,000개의 VLF 후에 발생합니다. 그러나 메시지는 1,000개의 VLL을 보고합니다. 이 문제는 이후 릴리스에서 수정됩니다.

사용자 작업

이 문제를 해결하려면 다음 단계를 수행합니다.

  1. 이 쿼리를 사용하여 SQL Server에서 VLF 수 및 평균 크기를 볼 수 있습니다. 결과는 다음에 집중할 데이터베이스를 식별하는 데 도움이 됩니다.

    SELECT db.name, count(dbl.database_id) as Total_VLF_count, convert(decimal (10,2), avg(dbl.vlf_size_mb)) as Avg_VLF_Size_MB
    FROM sys.databases db
     CROSS APPLY sys.dm_db_log_info(db.database_id) dbl
    GROUP BY db.name
    ORDER BY Total_VLF_count DESC
    

    자세한 내용은 sys.dm_db_log_info 참조하세요.

  2. DBCC SHRINKDB/DBCC SHRINKFILE을 사용하거나 SQL Server Management Studio를 사용하여 트랜잭션 로그를 줄입니다.

  3. 트랜잭션 로그 파일 크기를 큰 값으로 한 번 증가합니다. 이 일회성 증가는 빈번한 자동 증가를 방지하기 위해 수행됩니다. 자세한 내용은 트랜잭션 로그 파일의 크기 관리를 참조 하세요.

  4. FILEGROWTH 매개 변수를 현재 구성된 값보다 큰 값으로 늘입니다. 이는 데이터베이스의 활동과 로그 파일이 증가하는 빈도를 기반으로 해야 합니다.

  5. 또한 현재 실행 중인 SQL Server 버전에 따라 다음 수정 문서를 검토할 수 있습니다.

    해결 방법: SQL Server 2008 R2, SQL Server 2008 또는 SQL Server 2012에서 데이터베이스를 복원하는 데 시간이 오래 걸립니다.

    해결 방법: SQL Server 2005, SQL Server 2008 또는 SQL Server 2008 R2의 트랜잭션 로그 내에 VLF가 많은 경우 데이터베이스를 복구할 때 성능 저하

    해결 방법: SQL Server 2008 또는 SQL Server 2008 R2 환경의 데이터베이스에 대해 복구가 예상보다 오래 걸립니다.

주어진 인스턴스의 모든 데이터베이스의 현재 트랜잭션 로그 크기에 대한 최적의 VLF 분포 및 필수 크기를 수행할 필수 성장 증분을 결정하려면 이 스크립트를 참조하세요.