मैंने निम्नलिखित प्रयोग की कोशिश की और इसी तरह के परिणाम मिले। दोनों मामलों में, fn_dblog () रोलबैक घटित होता है और यह परिदृश्य 1 की तुलना में परिदृश्य 2 में तेज़ी से घटित होता है।
वैसे, मैंने एमडीएफ और एलडीएफ दोनों को एक ही बाहरी (यूएसबी 2.0) डिस्क पर रखा।
मेरा प्रारंभिक निष्कर्ष यह है कि इस मामले में रोलबैक के संचालन में कोई अंतर नहीं है, और शायद किसी भी स्पष्ट गति का अंतर I / O संबंधित है। वह इस समय मेरी कामकाजी परिकल्पना है।
दृष्टांत 1:
- एक लॉग फ़ाइल के साथ एक डेटाबेस बनाएं जो 1 एमबी से शुरू होता है, 4 एमबी चंक में बढ़ता है, और इसका अधिकतम आकार 100 एमबी है।
- एक स्पष्ट लेनदेन खोलें, इसे 10 सेकंड के लिए चलाएं, और फिर SSMS के भीतर इसे मैन्युअल रूप से रद्द करें
- Fn_dblog () को देखें और आरक्षित आकार को गिनें और DBCC SQLPERF (LOGSPACE) देखें।
परिदृश्य 2:
- एक लॉग फ़ाइल के साथ एक डेटाबेस बनाएं जो 1 एमबी से शुरू होता है, 4 एमबी चंक में बढ़ता है, और इसका अधिकतम आकार 100 एमबी है।
- एक स्पष्ट लेन-देन खोलें, इसे तब तक चलाएं जब तक कि लॉग पूर्ण त्रुटि न दिखाई दे
- Fn_dblog () को देखें और आरक्षित आकार को गिनें और DBCC SQLPERF (LOGSPACE) देखें।
प्रदर्शन की निगरानी के परिणाम:
दृष्टांत 1:
परिदृश्य 2:
कोड:
उपयोग [मास्टर];
जाओ
यदि DATABASEPROPERTYEX (N'SampleDB ', N'Version')> 0
शुरू
DATABASE [नमूनाबडी] SINGLE_USER सेट करें
रोलबैक IMMEDIATE के साथ;
DROP DATABASE [सैंपलबीडी];
समाप्त;
जाओ
PRATARY पर DATABASE [नमूनाबडी] बनाएं
(
NAME = N'SampleDB '
, FILENAME = N'E: \ data \ SampleDB.mdf '
, आकार = 3 एमबी
, FILEGROWTH = 1MB
)
पर लॉग ऑन करें
(
NAME = N'SampleDB_log '
, FILENAME = N'E: \ data \ SampleDB_log.ldf '
, आकार = 1 एमबी
, MAXSIZE = 100MB
, FILEGROWTH = 4MB
);
जाओ
उपयोग [नमूना];
जाओ
- एक तालिका जोड़ें
बनाएँ तालिका dbo.test
(
c1 CHAR (8000) पूरी तरह से निर्धारित नहीं है ('a', 8000)
) पर [प्राथमिक];
जाओ
- सुनिश्चित करें कि हम छद्म सरल वसूली मॉडल नहीं हैं
बैकपैक डाटाबेस नमूना
TO DISK = 'NUL';
जाओ
- लॉग फाइल का बैकअप लें
बैकअप लॉग नमूना
TO DISK = 'NUL';
जाओ
- इस्तेमाल किए गए लॉग स्पेस को चेज करें
DBCC SQLPERF (LOGSPACE);
जाओ
- fn_dblog () के साथ कितने रिकॉर्ड दिखाई दे रहे हैं?
चयन करें * fn_dblog (NULL, NULL) से; - मेरे मामले में लगभग 9
/ **********************************
दृष्टांत 1
********************************** /
- एक नया लेनदेन खोलें और फिर इसे वापस रोल करें
BEGIN परिवहन
INSERT INTO dbo.test DEFAULT VALUES;
10000 जाओ - चलो 10 सेकंड के लिए चलाया जाता है और फिर SSMS क्वेरी विंडो में हिट रद्द करें
- लेन-देन रद्द करें
- इसे खत्म करने में कुछ सेकंड लगने चाहिए
- लेन-देन को रोलबैक करने की आवश्यकता नहीं है, क्योंकि रद्द पहले से ही आपके लिए है।
-- कर के देखो। आपको यह त्रुटि मिलेगी
- संदेश 3903, स्तर 16, राज्य 1, पंक्ति 1
- रोलबैक परिवहन अनुरोध में कोई संगत लेन-देन नहीं है।
रोलबैक परिवहन;
- प्रयुक्त लॉग स्पेस क्या है? 100% से ऊपर।
DBCC SQLPERF (LOGSPACE);
जाओ
- fn_dblog () के साथ कितने रिकॉर्ड दिखाई दे रहे हैं?
चुनते हैं *
Fn_dblog (NULL, NULL) से; - मेरे मामले में लगभग 91,926
- fn_dblog () द्वारा दिखाया गया कुल लॉग रिजर्व?
SUM ([लॉग रिजर्व]) का चयन करें [कुल लॉग रिजर्व]
Fn_dblog (NULL, NULL) से; - 88.72MB के आसपास
/ **********************************
SCENARIO 2
********************************** /
- डीबी को उड़ा दें और शुरू करें
उपयोग [मास्टर];
जाओ
यदि DATABASEPROPERTYEX (N'SampleDB ', N'Version')> 0
शुरू
DATABASE [नमूनाबडी] SINGLE_USER सेट करें
रोलबैक IMMEDIATE के साथ;
DROP DATABASE [सैंपलबीडी];
समाप्त;
जाओ
PRATARY पर DATABASE [नमूनाबडी] बनाएं
(
NAME = N'SampleDB '
, FILENAME = N'E: \ data \ SampleDB.mdf '
, आकार = 3 एमबी
, FILEGROWTH = 1MB
)
पर लॉग ऑन करें
(
NAME = N'SampleDB_log '
, FILENAME = N'E: \ data \ SampleDB_log.ldf '
, आकार = 1 एमबी
, MAXSIZE = 100MB
, FILEGROWTH = 4MB
);
जाओ
उपयोग [नमूना];
जाओ
- एक तालिका जोड़ें
बनाएँ तालिका dbo.test
(
c1 CHAR (8000) पूरी तरह से निर्धारित नहीं है ('a', 8000)
) पर [प्राथमिक];
जाओ
- सुनिश्चित करें कि हम छद्म सरल वसूली मॉडल नहीं हैं
बैकपैक डाटाबेस नमूना
TO DISK = 'NUL';
जाओ
- लॉग फाइल का बैकअप लें
बैकअप लॉग नमूना
TO DISK = 'NUL';
जाओ
- अब, हमारे लेनदेन के भीतर लॉग फ़ाइल को उड़ा दें
BEGIN परिवहन
INSERT INTO dbo.test DEFAULT VALUES;
10000 जाओ
- रोलबैक कभी फायर नहीं करता। कोशिश करो। आपको एक त्रुटि मिलेगी।
- संदेश 3903, स्तर 16, राज्य 1, पंक्ति 1
- रोलबैक परिवहन अनुरोध में कोई संगत लेन-देन नहीं है।
रोलबैक परिवहन;
- लॉग फ़ाइल 100% पूर्ण है?
DBCC SQLPERF (LOGSPACE);
- fn_dblog () के साथ कितने रिकॉर्ड दिखाई दे रहे हैं?
चुनते हैं *
Fn_dblog (NULL, NULL) से; - मेरे मामले में लगभग 91,926
जाओ
- fn_dblog () द्वारा दिखाया गया कुल लॉग रिजर्व?
SUM ([लॉग रिजर्व]) का चयन करें [कुल लॉग रिजर्व]
Fn_dblog (NULL, NULL) से; - 88.72MB
जाओ