J'ai une base de données accessible par environ 50 clients via TDS sur TCP qui ne semble pas libérer d'espace de journal. Le nombre de processus reste autour des 50 attendus, et certains d'entre eux ont une durée de vie assez longue (> 120 jours).
La base de données dispose désormais de 40 Go d'espace de journalisation (elle ne dispose que de 14 Go de données), dont 39 Go gratuits. En raison des limites d'espace sur le lecteur, je voudrais réduire à quelque chose de plus raisonnable (10 Go-ish). Lorsque j'exécute DBCC SHRINKFILE('db_log', 10000), il renvoie une erreur indiquant que la fin du journal est en cours d'utilisation.
Afin de libérer l'accès à la fin du journal, j'ai tenté de placer la base de données en mode mono-utilisateur avec les éléments suivants:
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
mais le script renvoie le message suivant répété des centaines de fois:
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Ce qui m'amène à croire que quelque part, je laisse certaines transactions sans engagement. Je ne connais aucun processus qui ouvrirait intentionnellement autant de transactions en même temps, donc je pense qu'elles doivent s'accumuler au fil du temps, sans jamais être fermées.
Question: Comment localiser le processus ou le script incriminé ou pourquoi le journal n'est-il pas publié?
sys.dm_tran_active_transactionsaffiche 18 transactions raisonnables à des fins compréhensibles. sp_whomontre uniquement les processus que je connais.
Version 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)
Version du serveur:
Windows Server 2008 R2 x64 - processeurs virtuels Datacenter 4, 16 Go de mémoire, disque de transfert pour les données et le journal, le disque du système d'exploitation est un disque dur virtuel
sur Hyper-V (Windows Server 2008 R2 SP1 x64 Datacenter) Dual Intel X5650 (6 cœurs, 12 threads à 2,67 GHz) 72 Go de mémoire
L'hyperviseur n'a que trois machines virtuelles et n'affiche pas une utilisation élevée des ressources. La machine virtuelle SQL Server affiche ~ 40% de CPU sous charge et 99% de hits de cache.