Tengo una base de datos a la que acceden alrededor de 50 clientes a través de TDS a través de TCP que no parece estar liberando espacio de registro. El número de procesos se mantiene alrededor de los 50 esperados, y algunos de ellos duran bastante (> 120 días).
La base de datos ahora tiene 40 gb en espacio de registro (solo tiene datos de 14 gb), 39 gb libres. Debido a las limitaciones de espacio en la unidad, me gustaría reducir a algo más razonable (10 gb-ish). Cuando ejecuto DBCC SHRINKFILE('db_log', 10000), devuelve un error de que el final del registro está en uso.
Para liberar el acceso al final del registro, intenté colocar la base de datos en modo de usuario único con lo siguiente:
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
pero el script devuelve el siguiente mensaje repetido cientos de veces:
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Lo que me lleva a creer que en algún lugar, estoy dejando algunas transacciones sin comprometer. No conozco ningún proceso que pueda abrir intencionalmente esta cantidad de transacciones a la vez, por lo que creo que deben acumularse con el tiempo, sin cerrarse nunca.
Pregunta: ¿Cómo ubico el proceso o script ofensivo o por qué no se publica el registro?
sys.dm_tran_active_transactionsestá mostrando 18 transacciones razonables con propósitos comprensibles. sp_whomuestra solo los procesos que conozco.
Versión de 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ón del servidor:
Windows Server 2008 R2 x64: vCPU Datacenter 4, 16 GB de memoria, pase a través del disco para datos y registro, el disco del sistema operativo es VHD
en Hyper-V (Windows Server 2008 R2 SP1 x64 Datacenter) Dual Intel X5650 (6 núcleos, 12 hilos a 2,67 GHz) 72 GB de memoria
El hipervisor solo tiene tres máquinas virtuales y no muestra un alto uso de recursos. SQL Server VM muestra ~ 40% de CPU bajo carga y 99% de aciertos de caché.