Saya memiliki database yang diakses oleh sekitar 50 klien melalui TDS melalui TCP yang sepertinya tidak akan merilis ruang log. Jumlah proses tetap di sekitar 50 yang diharapkan, dan beberapa di antaranya berumur panjang (> 120 hari).
Basis data sekarang memiliki 40 gb dalam ruang log (hanya memiliki 14 gb data), 39 gb gratis. Karena keterbatasan ruang pada drive, saya ingin menyusut ke sesuatu yang lebih masuk akal (10gb-ish). Ketika saya mengeksekusi DBCC SHRINKFILE('db_log', 10000), ia mengembalikan kesalahan bahwa akhir log sedang digunakan.
Untuk membebaskan akses ke akhir log, saya berusaha menempatkan database dalam mode pengguna tunggal dengan yang berikut ini:
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
tetapi skrip mengembalikan pesan berikut yang diulang ratusan kali:
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Yang membuat saya percaya bahwa di suatu tempat, saya meninggalkan beberapa transaksi tanpa komitmen. Saya tidak mengetahui adanya proses yang akan dengan sengaja membuka banyak transaksi ini pada satu waktu, jadi saya pikir mereka harus menumpuk dari waktu ke waktu, tidak pernah ditutup.
Pertanyaan: Bagaimana cara menemukan proses atau skrip yang menyinggung atau mengapa log tidak dirilis?
sys.dm_tran_active_transactionsmenunjukkan 18 transaksi yang wajar dengan tujuan yang dapat dimengerti. sp_whohanya menunjukkan proses yang saya sadari.
Versi 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)
Versi Server:
Windows Server 2008 R2 x64 - Datacenter 4 vCPUs, memori 16GB, Lewati disk untuk data dan log, disk OS adalah VHD
pada Hyper-V (Windows Server 2008 R2 SP1 x64 Datacenter) Dual Intel X5650 (6 inti, 12 utas pada 2.67GHz) memori 72 GB
Hypervisor hanya memiliki tiga VM dan tidak menunjukkan penggunaan sumber daya yang tinggi. SQL Server VM menunjukkan ~ 40% CPU dalam beban dan 99% cache hit.