मेरे पास लगभग 50 क्लाइंट्स द्वारा टीसीपी पर टीडीएस के माध्यम से एक्सेस किया गया है जो लॉग स्पेस को जारी नहीं करता है। प्रक्रियाओं की संख्या अपेक्षित 50 के आसपास रहती है, और उनमें से कुछ काफी लंबे समय तक रहते हैं (> 120 दिन)।
डेटाबेस में लॉग स्पेस में अब 40 जीबी (इसमें केवल 14 जीबी डेटा है), 39 जीबी मुफ्त है। ड्राइव पर स्थान की सीमाओं के कारण, मैं कुछ अधिक उचित (10gb-ish) को हटना चाहूंगा। जब मैं निष्पादित करता हूं DBCC SHRINKFILE('db_log', 10000), तो यह एक त्रुटि देता है कि लॉग का अंत उपयोग में है।
लॉग के अंत तक मुफ्त पहुंच के लिए, मैंने निम्नलिखित के साथ डेटाबेस को एकल उपयोगकर्ता मोड में रखने का प्रयास किया:
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE db SET MULTI_USER
GO
लेकिन स्क्रिप्ट सैकड़ों बार दोहराए गए निम्न संदेश को लौटा रही है:
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
जो मुझे विश्वास दिलाता है कि कहीं न कहीं, मैं कुछ लेनदेन को छोड़ रहा हूं। मुझे ऐसी किसी भी प्रक्रिया के बारे में पता नहीं है जो जानबूझकर एक समय में कई लेनदेन खोल देगा, इसलिए मुझे लगता है कि उन्हें समय के साथ जमा करना होगा, कभी भी बंद नहीं किया जाना चाहिए।
प्रश्न: मैं आपत्तिजनक प्रक्रिया या स्क्रिप्ट का पता कैसे लगा सकता हूं या लॉग क्यों जारी नहीं किया जा रहा है?
sys.dm_tran_active_transactionsसमझने योग्य उद्देश्यों के साथ एक उचित 18 लेनदेन दिखा रहा है। sp_whoकेवल उन प्रक्रियाओं को दिखाता है जिनसे मैं परिचित हूं।
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)
सर्वर संस्करण:
Windows Server 2008 R2 x64 - डेटासेंटर 4 vCPUs, 16GB मेमोरी, डेटा और लॉग के लिए डिस्क के माध्यम से पास, OS डिस्क DHD है
हाइपर- V पर (Windows Server 2008 R2 SP1 x64 Datacenter) दोहरी Intel X5650 (6 कोर, 12 थ्रेड 2.67GHz पर) 72 GB मेमोरी
हाइपरविजर में केवल तीन वीएम होते हैं और उच्च संसाधन उपयोग नहीं दिखाते हैं। SQL सर्वर VM लोड के तहत ~ 40% CPU और 99% कैश हिट दिखाता है।