मेरे पास एक ही मुद्दा है और मुझे विश्वास है कि मैंने इसे हल कर लिया है लेकिन मैं इसकी पुष्टि करने के लिए पूरी तरह से परीक्षण करने में सक्षम नहीं हूं।
मेरा मानना है कि समस्याएँ आपके लॉग फ़ाइल में मौजूद वीएलएफ की संख्या से संबंधित हैं न कि उसके आकार से। यदि आपके पास एक बड़ी लॉगफाइल है, तो यह संभावना है कि यह ऑटो विकास की घटनाओं के माध्यम से व्यवस्थित रूप से बढ़ी और यह एक जानबूझकर नियोजित विकास नहीं था। अगर ऐसा है तो आपके पास लॉग फ़ाइलों के अंदर हजारों VLF हो सकते हैं।
यहाँ यह देखने के लिए कि आपके पास यहाँ से कितने वीएलएफ हैं, यह देखने के लिए एक प्रश्न है :
Create Table #stage(
FileID int
, FileSize bigint
, StartOffset bigint
, FSeqNo bigint
, [Status] bigint
, Parity bigint
, CreateLSN numeric(38));
Create Table #results(
Database_Name sysname
, VLF_count int
);
Exec sp_msforeachdb N'Use ?;
Insert Into #stage
Exec sp_executeSQL N''DBCC LogInfo(?)'';
Insert Into #results
Select DB_Name(), Count(*)
From #stage;
Truncate Table #stage;'
Select *
From #results
Order By VLF_count Desc;
Drop Table #stage;
Drop Table #results;
वीएलएफ क्या हैं, इस लिंक पर आगे की व्याख्या के लिए ।
मेरा मानना है कि मुद्दा यह है कि इतने सारे वीएलएफ के साथ एसक्यूएल सर्वर को अपने राज्य का आकलन करने में काफी समय लगता है और फिर डेटाबेस को रिकवरी से बाहर लाया जाता है। यदि आप अपनी लॉग फ़ाइल को सबसे छोटे आकार में सिकोड़ते हैं, तो अक्सर पहले वीएलएफ का आकार जो लॉग फ़ाइल में बनाया गया था, तो आप तुरंत जानबूझकर इसे फिर से विकसित कर सकते हैं और इस तरह यह वीएलएफ की सही संख्या बना सकता है (कुछ से कम 16)।
एक बार जब यह पूरा हो जाता है तो मेरा मानना है कि आप यह देख पाएंगे कि आपका डेटाबेस बहुत तेजी से रिकवरी से बाहर आता है।
मुझे अपनी वीएलएफ समस्याओं को हल करने के बाद हमारे उत्पादन उदाहरणों पर परीक्षण करने का मौका नहीं मिला है, इसलिए मुझे बहुत उत्सुकता होगी अगर आप पुष्टि कर सकते हैं कि यह समस्या का मूल कारण है। प्रायोगिक तौर पर मैंने यह देखा है कि हमारे मंचन के माहौल को बहाल करने में जो समय लगता है वह नाटकीय रूप से इस वजह से कम हो गया है क्योंकि यह उम्मीद है कि यह है।