로그 공간을 공개하지 않는 것처럼 보이는 TCP를 통한 TDS를 통해 약 50 개의 클라이언트가 데이터베이스에 액세스했습니다. 프로세스 수는 약 50 개 정도이며, 그 중 일부는 수명이 길다 (> 120 일).
데이터베이스에는 이제 로그 공간이 40GB (14GB 데이터 만 있음), 39GB는 사용 가능합니다. 드라이브의 공간 제한으로 인해 더 합리적인 (10gb-ish)로 축소하고 싶습니다. 내가 실행 DBCC SHRINKFILE('db_log', 10000)하면 로그 끝이 사용 중이라는 오류가 반환됩니다.
로그 끝에 자유롭게 액세스하기 위해 다음을 사용하여 데이터베이스를 단일 사용자 모드로 설정하려고 시도했습니다.
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
그러나 스크립트는 수백 번 반복 된 다음 메시지를 반환합니다.
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
어딘가에, 나는 일부 거래를 미확정 상태로두고 있다고 믿게합니다. 한 번에이 많은 트랜잭션을 의도적으로 여는 프로세스를 알지 못하므로 시간이 지남에 따라 누적되어 닫히지 않아야한다고 생각합니다.
질문 : 문제가있는 프로세스 또는 스크립트를 찾으려면 어떻게합니까? 또는 로그가 해제되지 않는 이유는 무엇입니까?
sys.dm_tran_active_transactions이해하기 쉬운 목적으로 합리적인 18 건의 거래를 보여주고 있습니다. sp_who내가 아는 프로세스 만 보여줍니다.
SQL Server 버전 :
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
서버 버전 :
Windows Server 2008 R2 x64-Datacenter 4 vCPU, 16GB 메모리, 데이터 및 로그를위한 디스크 통과, OS 디스크는 VHD
Hyper-V (Windows Server 2008 R2 SP1 x64 데이터 센터) 듀얼 Intel X5650 (6 코어, 2.67GHz에서 12 스레드) 72GB 메모리
하이퍼 바이저에는 3 개의 VM 만 있으며 리소스 사용량이 많지 않습니다. SQL Server VM은로드시 ~ 40 % CPU와 99 % 캐시 적중을 보여줍니다.