Mam bazę danych, do której dostęp ma około 50 klientów za pośrednictwem TDS przez TCP, co nie wydaje się zwalniać przestrzeni dziennika. Liczba procesów utrzymuje się na poziomie oczekiwanych 50, a niektóre z nich trwają dość długo (> 120 dni).
Baza danych ma teraz 40 GB miejsca w dzienniku (ma tylko 14 GB danych), 39 GB wolnego. Z powodu ograniczeń miejsca na dysku chciałbym się skrócić do czegoś bardziej rozsądnego (10 gb-ish). Kiedy wykonuję DBCC SHRINKFILE('db_log', 10000), zwraca błąd, że koniec dziennika jest w użyciu.
Aby uwolnić dostęp do końca dziennika, próbowałem ustawić bazę danych w trybie pojedynczego użytkownika z następującymi:
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
ale skrypt zwraca następujący komunikat powtarzany setki razy:
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Co prowadzi mnie do przekonania, że gdzieś pozostawiam niektóre transakcje niezaangażowane. Nie znam żadnego procesu, który celowo otworzyłby tak wiele transakcji jednocześnie, więc myślę, że muszą się one kumulować z czasem, nigdy nie będą zamykane.
Pytanie: Jak zlokalizować naruszający proces lub skrypt lub dlaczego dziennik nie jest zwalniany?
sys.dm_tran_active_transactionspokazuje rozsądne 18 transakcji w zrozumiałych celach. sp_whopokazuje tylko procesy, których jestem świadomy.
Wersja 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)
Wersja serwera:
Windows Server 2008 R2 x64 - vCPU Datacenter 4, pamięć 16 GB, dysk przechodzący do danych i dziennika, dysk systemu operacyjnego to VHD
w Hyper-V (Windows Server 2008 R2 SP1 x64 Datacenter) Dual Intel X5650 (6 rdzeni, 12 wątków przy 2,67 GHz) 72 GB pamięci
Hypervisor ma tylko trzy maszyny wirtualne i nie wykazuje dużego zużycia zasobów. SQL Server VM pokazuje ~ 40% obciążenia procesora i 99% trafień w pamięci podręcznej.