Tôi có một cơ sở dữ liệu được khoảng 50 khách hàng truy cập thông qua TDS qua TCP mà dường như không giải phóng không gian nhật ký. Số lượng các quy trình nằm trong khoảng 50 dự kiến và một số trong số chúng tồn tại khá lâu (> 120 ngày).
Cơ sở dữ liệu hiện có 40 gb trong không gian nhật ký (nó chỉ có 14 gb dữ liệu), 39 gb miễn phí. Do giới hạn không gian trên ổ đĩa, tôi muốn thu nhỏ lại thành thứ gì đó hợp lý hơn (10gb-ish). Khi tôi thực thi DBCC SHRINKFILE('db_log', 10000), nó trả về một lỗi mà phần cuối của nhật ký đang được sử dụng.
Để truy cập miễn phí vào cuối nhật ký, tôi đã cố gắng đặt cơ sở dữ liệu ở chế độ người dùng duy nhất với các mục sau:
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
nhưng tập lệnh đang trả về thông báo sau được lặp lại hàng trăm lần:
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Điều đó khiến tôi tin rằng ở đâu đó, tôi sẽ để lại một số giao dịch không được cam kết. Tôi không biết về bất kỳ quy trình nào có thể cố tình mở nhiều giao dịch này cùng một lúc, vì vậy tôi nghĩ rằng chúng phải tích lũy theo thời gian, không bao giờ bị đóng.
Câu hỏi: Làm cách nào để xác định quy trình hoặc tập lệnh vi phạm hoặc tại sao nhật ký không được phát hành?
sys.dm_tran_active_transactionsđang hiển thị 18 giao dịch hợp lý với mục đích dễ hiểu. sp_whochỉ hiển thị các quá trình tôi nhận thức được.
Phiên bản máy chủ SQL:
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)
Phiên bản máy chủ:
Windows Server 2008 R2 x64 - Trung tâm dữ liệu 4 vCPUs, bộ nhớ 16GB, Truyền qua đĩa để lấy dữ liệu và nhật ký, đĩa hệ điều hành là VHD
trên Hyper-V (Trung tâm dữ liệu Windows Server 2008 R2 SP1 x64) Intel X5650 kép (6 lõi, 12 luồng ở tốc độ 2.67GHz) bộ nhớ 72 GB
Hypervisor chỉ có ba VM và không hiển thị sử dụng tài nguyên cao. SQL Server VM hiển thị ~ 40% CPU khi tải và 99% lần truy cập bộ đệm.