Ho un database a cui accedono circa 50 client tramite TDS su TCP che non sembra rilasciare spazio nel registro. Il numero di processi rimane intorno ai 50 previsti e alcuni di essi hanno una durata abbastanza lunga (> 120 giorni).
Il database ora ha 40 GB di spazio nel registro (contiene solo 14 GB di dati), 39 GB di spazio libero. A causa delle limitazioni di spazio sull'unità, vorrei ridurre a qualcosa di più ragionevole (10 GB-ish). Quando eseguo DBCC SHRINKFILE('db_log', 10000), viene restituito un errore che indica che la fine del registro è in uso.
Per liberare l'accesso alla fine del registro, ho tentato di posizionare il database in modalità utente singolo con quanto segue:
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
ma lo script restituisce il seguente messaggio ripetuto centinaia di volte:
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Il che mi porta a credere che da qualche parte, lascerò alcune transazioni senza impegno. Non sono a conoscenza di alcun processo che possa intenzionalmente aprire così tante transazioni contemporaneamente, quindi penso che debbano accumularsi nel tempo, senza mai essere chiusi.
Domanda: Come posso individuare il processo o lo script offensivo o perché il registro non viene rilasciato?
sys.dm_tran_active_transactionssta mostrando un ragionevole 18 transazioni con scopi comprensibili. sp_whomostra solo i processi di cui sono a conoscenza.
Versione di 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)
Versione server:
Windows Server 2008 R2 x64 - Datacenter 4 vCPU, 16 GB di memoria, disco pass-through per dati e registro, il disco del sistema operativo è VHD
su Hyper-V (Windows Server 2008 R2 SP1 x64 Datacenter) Dual Intel X5650 (6 core, 12 thread a 2,67 GHz) memoria da 72 GB
Hypervisor ha solo tre macchine virtuali e non mostra un elevato utilizzo delle risorse. SQL Server VM mostra ~ 40% di CPU sotto carico e 99% di riscontri nella cache.