TDS aracılığıyla TCP üzerinden günlük alanı serbest bırakmıyor gibi görünen 50 istemci tarafından erişilen bir veritabanım var. Süreç sayısı beklenen 50 civarında kalır ve bazıları oldukça uzun ömürlüdür (> 120 gün).
Veritabanı şimdi günlük alanı 40 gb (sadece 14 gb veri var), 39 gb ücretsiz. Sürücüdeki alan sınırlamaları nedeniyle, daha makul bir şeye (10gb-ish) küçülmek istiyorum. Yürüttüğümde DBCC SHRINKFILE('db_log', 10000), günlüğün sonunun kullanımda olduğu bir hata döndürür.
Günlüğün sonuna ücretsiz erişim sağlamak için, veritabanını aşağıdaki gibi tek kullanıcı moduna yerleştirmeye çalıştım:
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
ancak komut dosyası yüzlerce kez tekrarlanan aşağıdaki iletiyi döndürüyor:
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Bu da beni bir yerde inanıyorum, bazı işlemleri yasaklıyorum. Bu kadar çok işlemi bir kerede kasıtlı olarak açacak herhangi bir sürecin farkında değilim, bu yüzden zamanla birikmeleri ve asla kapatılmamaları gerektiğini düşünüyorum.
Soru: Sorun yaratan işlemi veya komut dosyasını nasıl bulabilirim veya günlük neden serbest bırakılmıyor?
sys.dm_tran_active_transactionsanlaşılır amaçlarla makul 18 işlem gösteriyor. sp_whosadece farkında olduğum süreçleri gösterir.
SQL Server Sürümü:
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)
Sunucu Sürümü:
Windows Server 2008 R2 x64 - Datacenter 4 vCPU'lar, 16 GB bellek, Veri ve günlük için diskten geçiş, OS diski VHD
-V (Windows Server 2008 R2 SP1 x64 Datacenter) Çift Intel X5650 (6 çekirdekli, 2,67GHz'de 12 iş parçacığı) 72 GB bellek
Hipervizörün yalnızca üç VM'si vardır ve yüksek kaynak kullanımı göstermez. SQL Server VM, yük altında ~% 40 CPU ve% 99 önbellek isabet gösterir.