पारंपरिक पुनर्प्राप्ति का अवलोकन
जैसा कि सभी रिलेशनल डेटाबेस सिस्टम के साथ होता है, SQL सर्वर क्रैश रिकवरी को लागू करके डेटा के स्थायित्व की गारंटी देता है। संक्षिप्त नाम ACID में स्थायित्व, जो संबंधपरक डेटाबेस में लेनदेन की विशेषताओं को संदर्भित करता है, का अर्थ है कि हमें आश्वस्त किया जा सकता है कि यदि डेटाबेस अचानक विफल हो जाता है, तो हमारा डेटा सुरक्षित है।
SQL सर्वर ट्रांजेक्शन लॉग का उपयोग करके इस क्षमता को लागू करता है। SQL सर्वर में सभी डेटा मैनिपुलेशन ऑपरेशंस द्वारा किए गए परिवर्तन डेटा फ़ाइलों (चेकपॉइंट प्रक्रिया के माध्यम से) पर लागू होने से पहले लेनदेन लॉग में कैप्चर किए जाते हैं, यदि इसे वापस रोल करने या आगे रोल करने की आवश्यकता होती है।
SQL सर्वर में तीन-चरण क्रैश पुनर्प्राप्ति प्रक्रिया इस प्रकार है:
विश्लेषण - SQL सर्वर लेन-देन लॉग को नवीनतम चेकपॉइंट से लेन-देन लॉग के अंत तक पढ़ता है
फिर से करें - SQL सर्वर लॉग को सबसे पुराने अनकमिटेड ट्रांजैक्शन से लॉग के अंत तक रीप्ले करता है
पूर्ववत करें - SQL सर्वर लॉग के अंत से सबसे पुराने अनकमिटेड ट्रांजेक्शन तक लॉग को पढ़ता है और क्रैश के दौरान सक्रिय सभी लेनदेन को वापस करता है
अनुभवी डीबीए को अपने करियर में किसी न किसी बिंदु पर एक बहुत बड़े डेटाबेस पर क्रैश रिकवरी को पूरा करने के लिए असहाय रूप से प्रतीक्षा करने का निराशाजनक अनुभव होता। लेन-देन रोलबैक क्रैश पुनर्प्राप्ति प्रक्रिया के समान तंत्र का उपयोग करता है। Microsoft ने SQL Server 2019 में पुनर्प्राप्ति प्रक्रिया को महत्वपूर्ण रूप से बढ़ाया है।
त्वरित डेटाबेस पुनर्प्राप्ति
त्वरित डेटाबेस पुनर्प्राप्ति संस्करण पर आधारित एक नई सुविधा है जो रोलबैक या क्रैश से पुनर्प्राप्ति के मामले में पुनर्प्राप्ति की दर में उल्लेखनीय रूप से वृद्धि करती है।
SQL Server 2019 में, SQL सर्वर इंजन के भीतर तीन नए तंत्र पुनर्प्राप्ति को संभालने के तरीके को संशोधित करते हैं और रोलबैक/रोलफॉरवर्ड करने के लिए आवश्यक समय को प्रभावी ढंग से कम करते हैं।
पर्सिस्टेंट वर्जन स्टोर (PVS) - विचाराधीन डेटाबेस के भीतर पंक्ति संस्करणों को कैप्चर करता है। परसिस्टेंट वर्जन स्टोर को प्रदर्शन या आकार के कारणों के लिए एक अलग फ़ाइल समूह में परिभाषित किया जा सकता है
लॉजिकल रिवर्ट - जब किसी विशेष लेनदेन के लिए रोलबैक का आह्वान किया जाता है या क्रैश रिकवरी के पूर्ववत चरण को लागू किया जाता है, तो रोलबैक करने के लिए पीवीएस में संग्रहीत पंक्ति संस्करणों का उपयोग करता है।
sLog - यह संभवतः माध्यमिक . के लिए है लॉग . यह एक इन-मेमोरी लॉग स्ट्रीम है जिसका उपयोग उन कार्यों को कैप्चर करने के लिए किया जाता है जिन्हें संस्करणित नहीं किया जा सकता है। जब डेटाबेस में ADR सक्षम होता है, तो क्रैश पुनर्प्राप्ति के विश्लेषण चरण के दौरान sLog को हमेशा फिर से बनाया जाता है। फिर से करें . के दौरान चरण, sLog का उपयोग वास्तविक लेनदेन लॉग के बजाय प्रक्रिया को तेज करने के लिए किया जाता है क्योंकि यह मेमोरी में बैठता है और इसमें कम लेनदेन होता है। पारंपरिक पुनर्प्राप्ति प्रक्रिया अंतिम चेकपॉइंट से लेनदेन को संभालती है। sLog का उपयोग पूर्ववत करें . के दौरान भी किया जाता है चरण।
क्लीनर - पीवीएस से अनावश्यक पंक्ति संस्करण निकालता है। Microsoft अनावश्यक पंक्ति संस्करणों की सफाई के लिए मैन्युअल रूप से बाध्य करने के लिए एक संग्रहीत कार्यविधि भी प्रदान करता है।
-- LISTING 1: INVOKE THE BACKGROUND CLEANER USE TSQLV4_ADR GO EXECUTE sys.sp_persistent_version_cleanup; USE master GO EXECUTE master.sys.sp_persistent_version_cleanup 'TSQLV4_ADR';
त्वरित डेटाबेस पुनर्प्राप्ति डिफ़ॉल्ट रूप से बंद है
तथ्य यह है कि डिफ़ॉल्ट रूप से SQL सर्वर 2019 में ADR को बंद कर दिया गया है, यह कुछ DBA के लिए आश्चर्यजनक लग सकता है, क्योंकि यह इतनी बड़ी विशेषता प्रतीत होती है। एडीआर उपयोगकर्ता डेटाबेस में वर्जनिंग का उपयोग करता है जिसमें यह सक्षम है। यह डेटाबेस आकार को महत्वपूर्ण रूप से प्रभावित कर सकता है। इसके अलावा, यदि एडीआर सक्षम है तो आपको अच्छा प्रदर्शन सुनिश्चित करने के लिए डेटाबेस वृद्धि के साथ-साथ पीवीएस के संभावित स्थान की योजना बनाने की आवश्यकता हो सकती है। इसलिए इस कार्यक्षमता को जानबूझकर सक्षम करना समझ में आता है।
प्रयोग:प्रारंभिक चरण
हमने नई सुविधा का पता लगाने और लेन-देन लॉग के आकार के साथ-साथ रोलबैक की गति पर ADR के प्रभाव को देखने के लिए एक प्रयोग की स्थापना की। हमारे प्रयोग में, हम एक बैकअप सेट का उपयोग करके दो समान डेटाबेस बनाते हैं और फिर हम इनमें से केवल एक डेटाबेस पर ADR को सक्षम करते हैं। सूची 2 कार्य के लिए प्रारंभिक चरणों को दर्शाती है।
[विस्तार शीर्षक ="कोड"]
-- LISTING 2: PREPARE THE DATABASES AND CONFIGURE ADR -- 2a. Backup a sample database and restore as two identical databases BACKUP DATABASE TSQLV4 TO DISK='TSQLV4.BAK' WITH COMPRESSION; -- Restore Database TSQLV4_NOADR (ADR will not be enabled) RESTORE DATABASE TSQLV4_NOADR FROM DISK='TSQLV4.BAK' WITH MOVE 'TSQLV4' TO 'C:\MSSQL\DATA\TSQLV4_NOADR.MDF', MOVE 'TSQLV4_log' TO 'E:\MSSQL\LOG\TSQLV4_NOADR_LOG.LDF'; -- Restore Database TSQLV4_ADR (ADR will be enabled) RESTORE DATABASE TSQLV4_ADR FROM DISK='TSQLV4.BAK' WITH MOVE 'TSQLV4' TO 'C:\MSSQL\DATA\TSQLV4_ADR.MDF', MOVE 'TSQLV4_log' TO 'E:\MSSQL\LOG\TSQLV4_ADR_LOG.LDF'; -- 2b. Enable ADR in TSQLV4_ADR USE [master] GO -- First create a separate filegroup and add a file to the filegroup ALTER DATABASE [TSQLV4_ADR] ADD FILEGROUP [ADR_FG]; ALTER DATABASE [TSQLV4_ADR] ADD FILE ( NAME = N'TSQLV4_ADR01', FILENAME = N'C:\MSSQL\Data\TSQLV4_ADR01.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ) TO FILEGROUP [ADR_FG] GO -- Enable ADR ALTER DATABASE TSQLV4_ADR SET ACCELERATED_DATABASE_RECOVERY = ON (PERSISTENT_VERSION_STORE_FILEGROUP = ADR_FG); GO -- 2c. Check if all ADR is enabled as planned SELECT name , compatibility_level , snapshot_isolation_state_desc , recovery_model_desc , target_recovery_time_in_seconds , is_accelerated_database_recovery_on FROM SYS.DATABASES WHERE name LIKE 'TSQLV4_%'; -- 2d. Check sizes of all files in the databases SELECT DB_NAME(database_id) AS database_name , name AS file_name , physical_name , (size * 8)/1024 AS [size (MB)] , type_desc FROM SYS.master_files WHERE DB_NAME(database_id) LIKE 'TSQLV4_%'; -- 2e. Check size of log used CREATE TABLE ##LogSpaceUsage (database_name VARCHAR(50) , database_id INT, total_log_size_in_bytes BIGINT , used_log_space_in_bytes BIGINT , used_log_space_in_percent BIGINT , log_space_in_bytes_since_last_backup BIGINT) INSERT INTO ##LogSpaceUsage EXEC sp_MSforeachdb @command1=' IF ''?'' LIKE ("TSQLV4_%") SELECT DB_NAME(database_id), * FROM ?.SYS.dm_db_log_space_usage;' SELECT * FROM ##LogSpaceUsage; DROP TABLE ##LogSpaceUsage;
[/विस्तार]
अंजीर। 1 लिस्टिंग 2 सेक्शन 2c में SQL स्टेटमेंट के आउटपुट को दिखाता है। हमने डेटाबेस फ़ाइलों के आकार और लेन-देन लॉग फ़ाइल के उपयोग पर भी कब्जा कर लिया। (अंजीर देखें। 3)।
अंजीर। 1 पुष्टि करें कि एडीआर कॉन्फ़िगर किया गया है
अंजीर। 2 डेटाबेस डेटा फ़ाइल आकार की समीक्षा करें
अंजीर। 3 दोनों डेटाबेस के लिए प्रयुक्त लॉग के आकार की जाँच करें
प्रयोग:निष्पादन चरण
एक बार जब हम विवरण प्राप्त कर लेते हैं तो हमें आगे बढ़ने की आवश्यकता होती है, फिर हम चरणों में लिस्टिंग 3 और 4 से SQL कोड निष्पादित करते हैं। दो लिस्टिंग समान हैं, लेकिन हम उन्हें दो समान डेटाबेस पर अलग-अलग निष्पादित कर रहे हैं। सबसे पहले, हम एक INSERT (लिस्टिंग 3, 3a) करते हैं, फिर हम एक DELETE (लिस्टिंग 3, 3b) करते हैं, जिसे हम बाद में रोल बैक करेंगे। ध्यान दें कि INSERT और DELETE दोनों में, हमने लेन-देन में संचालन को समझाया है। साथ ही, ध्यान दें कि INSERT को 50 बार निष्पादित किया जाता है। निष्पादन के प्रत्येक चरण में, यानी 3a, 3b और 3c के बीच, हम लिस्टिंग 2,2e में कोड की मदद से लेनदेन लॉग उपयोग को कैप्चर करते हैं। यह सेक्शन 4ए, 4बी, और 4सी के लिए समान है।
-- LISTING 3: EXECUTE DML IN TSQLV4_NOADR DATABASE -- 3a. Execute INSERT Statement in TSQLV4_NOADR Database USE TSQLV4_NOADR GO BEGIN TRAN SET STATISTICS IO ON; SET STATISTICS TIME ON; SELECT * INTO [Sales].[OrderDetails_noadr] FROM [Sales].[OrderDetails]; GO INSERT INTO [Sales].[OrderDetails_noadr] SELECT * FROM [Sales].[OrderDetails]; GO 50 COMMIT; -- 3b. Execute DELETE in TSQLV4_NOADR Database USE TSQLV4_NOADR GO BEGIN TRAN SET STATISTICS IO ON; SET STATISTICS TIME ON; DELETE FROM [Sales].[OrderDetails_noadr] GO -- 3c. Perform Rollback and Capture Time ROLLBACK;
अंजीर। 4 और 5 हमें दिखाते हैं कि TSQLV4_ADR डेटाबेस में सेलेक्ट INTO ऑपरेशन में 6 मिलीसेकंड अधिक लगे, जहाँ हमने त्वरित डेटाबेस रिकवरी को सक्षम किया। हम चित्र 6 में यह भी देखते हैं कि हमारे पास TSQLV4_ADR डेटाबेस में लेनदेन लॉग का अधिक उपयोग है। मुझे इस पर विशेष रूप से आश्चर्य हुआ, इसलिए मैंने यह सुनिश्चित करने के लिए कई बार प्रयोग दोहराया कि मुझे यह परिणाम लगातार मिल रहा है।
अंजीर। 4 TSQLV4_NOADR के लिए निष्पादन समय सम्मिलित करें
अंजीर। 5 TSQLV4_ADR के लिए निष्पादन समय सम्मिलित करें
अंजीर। निवेशन के बाद 6 लेन-देन लॉग का उपयोग
-- LISTING 4: EXECUTE DML IN TSQLV4_ADR DATABASE -- 4a. Execute INSERT Statement in TSQLV4_ADR Database USE TSQLV4_ADR GO BEGIN TRAN SET STATISTICS IO ON; SET STATISTICS TIME ON; SELECT * INTO [Sales].[OrderDetails_adr] FROM [Sales].[OrderDetails]; GO INSERT INTO [Sales].[OrderDetails_adr] SELECT * FROM [Sales].[OrderDetails]; GO 50 COMMIT; -- 4b. Execute DELETE in TSQLV4_ADR Database USE TSQLV4_ADR GO BEGIN TRAN SET STATISTICS IO ON; SET STATISTICS TIME ON; DELETE FROM [Sales].[OrderDetails_adr] GO -- 4c. Perform Rollback and Capture Time ROLLBACK;
अंजीर। 7 और 8 हमें दिखाते हैं कि DELETE ऑपरेशन को TSQLV4_ADR डेटाबेस में पूरा होने में काफी अधिक समय लगा, जहाँ हमने त्वरित डेटाबेस रिकवरी को सक्षम किया, भले ही दोनों डेटाबेस में समान पंक्तियों को हटा दिया गया हो। हालांकि, इस बार हमारे पास TSQLV4_NOADR डेटाबेस में लेनदेन लॉग का अधिक उपयोग है।
अंजीर। 7 TSQLV4_NOADR के लिए निष्पादन समय हटाएं
अंजीर। 8 TSQLV4_ADR के लिए निष्पादन समय हटाएं
अंजीर। 9 लेन-देन लॉग उपयोग हटाने के बाद
अब तक यह स्पष्ट हो रहा था कि एडीआर सक्षम डेटाबेस में डीएमएल संचालन अधिक समय लेता है। यह आंशिक रूप से बताता है कि सुविधा पहले स्थान पर क्यों बंद है। इसके बारे में गहराई से सोचते हुए, यह समझ में आता है क्योंकि SQL सर्वर को पीवीएस में पंक्ति संस्करणों को स्टोर करना चाहिए, जबकि एक सम्मिलित, अद्यतन या हटाने का ऑपरेशन चल रहा है। DML जितना भी समय लेता है, हम पाते हैं कि ADR चालू होने के साथ ROLLBACK जारी करने में 1 मिलीसेकंड से भी कम समय लगता है (चित्र 10 - 13 देखें)। कुछ मामलों में, त्वरित रोलबैक स्वयं DML के ऊपरी हिस्से की भरपाई कर सकता है, लेकिन सभी मामलों में नहीं!
अंजीर। TSQLV4_NOADR पर रोलबैक (हटाने के बाद) के लिए 10 निष्पादन समय
अंजीर। TSQLV4_ADR पर रोलबैक (हटाने के बाद) के लिए 11 निष्पादन समय
अंजीर। TSQLV4_NOADR पर रोलबैक (INSERT के बाद) के लिए 12 निष्पादन समय
अंजीर। TSQLV4_ADR पर रोलबैक (हटाने के बाद) के लिए 13 निष्पादन समय
निष्कर्ष
त्वरित डेटाबेस पुनर्प्राप्ति SQL सर्वर 2019 में जारी की गई महान विशेषताओं में से एक है। हालांकि, जीवन में सभी बहुत अच्छी चीजों के साथ, किसी को इसके लिए भुगतान करना पड़ता है। एडीआर कुछ परिदृश्यों में नकारात्मक प्रदर्शन प्रभाव डाल सकता है, इसलिए अपने उत्पादन डेटाबेस में एडीआर को लागू करने से पहले अपने परिदृश्य का सावधानीपूर्वक मूल्यांकन करना महत्वपूर्ण है। Microsoft विशेष रूप से बहुत लंबे समय तक चलने वाले लेन-देन, अत्यधिक लेन-देन लॉग वृद्धि, या लंबे समय से चलने वाली पुनर्प्राप्ति से संबंधित लगातार आउटेज के साथ कार्यभार का समर्थन करने वाले डेटाबेस के लिए त्वरित डेटाबेस पुनर्प्राप्ति की अनुशंसा करता है।
संदर्भ
त्वरित डेटाबेस पुनर्प्राप्ति
त्वरित डेटाबेस पुनर्प्राप्ति कैसे कार्य करता है?
त्वरित डेटाबेस पुनर्प्राप्ति