पिछले महीने के टी-एसक्यूएल मंगलवार के लिए, मैंने कुछ अनिर्दिष्ट ट्रेस फ़्लैग्स के बारे में लिखा था जो आपको लंबे समय तक चलने वाले बैकअप और संचालन को बहाल करने में मदद करते हैं। इस महीने, जेस बोरलैंड का विषय है विस्तारित घटनाएँ, और मैंने सोचा कि मैं SQL सर्वर 2016 में नई क्षमताएँ दिखाऊँगा जो बड़े पैमाने पर इन ट्रेस फ़्लैग्स को अप्रचलित बना देती हैं।
यदि आप CTP2 के साथ खेल रहे हैं (आप इसे यहां डाउनलोड कर सकते हैं), तो आपको एक नई श्रेणी दिखाई दे सकती है backup_restore
और नया इवेंट backup_restore_progress_trace
:
CTP2 के नए सत्र संवाद में एक नई घटना की खोज करना
इस घटना के लिए डेटा कैप्चर करने के लिए यहां एक त्वरित और गंदा XE सत्र है (मैंने केवल बैकअप के लिए फ़िल्टरिंग के लिए टिप्पणियां जोड़ दी हैं या केवल संचालन को पुनर्स्थापित किया है; डिफ़ॉल्ट रूप से, दोनों शामिल हैं):
CREATE EVENT SESSION [Backup progress] ON SERVER ADD EVENT sqlserver.backup_restore_progress_trace ( ACTION(package0.event_sequence) -- to only capture backup operations: --WHERE [operation_type] = 0 -- to only capture restore operations: --WHERE [operation_type] = 1 ) ADD TARGET package0.event_file ( SET filename = N'C:\temp\BackupProgress.xel' ); -- default options are probably ok GO ALTER EVENT SESSION [Backup progress] ON SERVER STATE = START; GO
अब, मान लें कि मैं निम्नलिखित ऑपरेशन चलाता हूं - एक डेटाबेस बनाएं, उसमें थोड़ा सा डेटा डालें, उसे छोड़ दें, और इसे पुनर्स्थापित करें:
USE [master]; GO CREATE DATABASE floob; GO SELECT s1.* INTO floob.dbo.what FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects; GO BACKUP DATABASE floob TO DISK = 'c:\temp\floob.bak' WITH INIT, COMPRESSION, STATS = 30; GO DROP DATABASE floob; GO RESTORE DATABASE floob FROM DISK = 'c:\temp\floob.bak' WITH REPLACE, RECOVERY;
अब, हम ईवेंट लक्ष्य फ़ाइल से डेटा को क्वेरी कर सकते हैं:
;WITH x AS ( SELECT ts,op,db,msg,es FROM ( SELECT ts = x.value(N'(event/@timestamp)[1]', N'datetime2'), op = x.value(N'(event/data[@name="operation_type"]/text)[1]', N'nvarchar(32)'), db = x.value(N'(event/data[@name="database_name"])[1]', N'nvarchar(128)'), msg = x.value(N'(event/data[@name="trace_message"])[1]', N'nvarchar(max)'), es = x.value(N'(event/action[@name="event_sequence"])[1]', N'int') FROM ( SELECT x = CONVERT(XML, event_data) FROM sys.fn_xe_file_target_read_file (N'c:\temp\Backup--Progress*.xel', NULL, NULL, NULL) ) AS y ) AS x WHERE op = N'Backup' -- N'Restore' AND db = N'floob' AND ts > CONVERT(DATE, SYSUTCDATETIME()) ) SELECT /* x.db, x.op, x.ts, */ [Message] = x.msg, Duration = COALESCE(DATEDIFF(MILLISECOND, x.ts, LEAD(x.ts, 1) OVER(ORDER BY es)),0) FROM x ORDER BY es;
बैकअप के लिए, ट्रेस फ्लैग 3226 एक्सटेंडेड इवेंट्स द्वारा कैप्चर किए गए किसी भी आउटपुट को नहीं दबाता है। मैंने आउटपुट कॉलम छोड़े हैं, फ़िल्टर के कारण, संक्षिप्तता के लिए:
संदेश | अवधि (मिलीसेकंड) |
---|---|
बैकअप डेटाबेस प्रारंभ | 0 |
एस लॉक के साथ डेटाबेस खोलना | 0 |
डेटाबेस पर बल्क-ऑप लॉक प्राप्त करना | 0 |
डेटाबेस पर अन्य कार्यों के साथ सिंक्रनाइज़ करना पूरा हो गया है | 19 |
बैकअप मीडिया सेट खोलना | 7 |
बैकअप मीडिया सेट खुला है | 0 |
लिखने के लिए मीडिया सेट तैयार करना | 0 |
मीडिया सेट बैकअप के लिए तैयार है | 0 |
प्रभावी विकल्प:Checksum=0, Compression=1, Encryption=0, BufferCount=7, MaxTransferSize=1024 KB | 0 |
डिफरेंशियल बिटमैप्स को साफ़ करना | 4 |
अलग-अलग बिटमैप साफ़ कर दिए गए हैं | 0 |
चेकपॉइंट लिखना | 6 |
चेकपॉइंट पूरा हो गया है (बीता हुआ =6 एमएस) | 0 |
LSN प्रारंभ करें:101:111920:43, SERepl LSN:0:0:0 | 0 |
आवंटन बिटमैप्स को स्कैन करना | 4 |
आवंटन बिटमैप्स को स्कैन करना पूरा हो गया है | 0 |
कुल डेटा के अपेक्षित आकार की गणना करना | 0 |
FID=1, ExpectedExtents=10047, IsDifferentialMapAccurate=0 | 0 |
TotalSize=658440192 बाइट्स | 0 |
अनुमानित कुल आकार =658460672 बाइट्स (डेटा आकार =658440192 बाइट्स, लॉग आकार =20480 बाइट्स) | 0 |
कार्य अनुमान पूरा हो गया है | 0 |
अंतिम एलएसएन:101:111960:1 | 0 |
प्रमुख मेटाडेटा लिखना | 0 |
बैकअपस्ट्रीम(0):डिवाइस के लिए अग्रणी मेटाडेटा लिखना c:\temp\floob.bak | 1 |
कुल डेटा के अपेक्षित आकार की गणना करना | 0 |
FID=1, ExpectedExtents=10047, IsDifferentialMapAccurate=0 | 0 |
TotalSize=658440192 बाइट्स | 1 |
डेटा फ़ाइलों की प्रतिलिपि बनाना | 2 |
डेटा फ़ाइल पाठकों की संख्या =1 | 0 |
डेटा फ़ाइल पढ़ना D:\SQL Server\MSSQL13.SQL16\DATA\floob.mdf | 0 |
बैकअपस्ट्रीम(0):एमएसडीए आकार 10048 विस्तार लिखना | 391 |
30 प्रतिशत (198180864/658460672 बाइट्स) संसाधित | 554 |
60 प्रतिशत (395313152/658460672 बाइट्स) संसाधित | 576 |
90 प्रतिशत (593494016/658460672 बाइट्स) संसाधित | 184 |
डेटा फ़ाइल को पढ़ना पूरा किया D:\SQL Server\MSSQL13.SQL16\DATA\floob.mdf | 2 |
बैकअपस्ट्रीम(0):MSDA को 65536 बाइट्स के साथ पैडिंग | 0 |
बैकअपस्ट्रीम(0):कुल MSDA आकार =10048 विस्तार | 0 |
InitialExpectedSize=658440192 बाइट्स, फ़ाइनलसाइज़=658440192 बाइट्स, ExcessMode=0 | 0 |
अंतिम एलएसएन:101:111960:1 | 0 |
डेटा फ़ाइलों की प्रतिलिपि बनाना पूर्ण | 0 |
लेन-देन लॉग कॉपी करना | 0 |
MediaFamily(0):FID=2, VLFID=101, DataStreamSize=65536 बाइट्स | 4 |
लेन-देन लॉग को कॉपी करना पूरा हो गया है | 0 |
पिछला मेटाडेटा लिखना | 0 |
बैकअपस्ट्रीम(0):डिवाइस पर पिछला मेटाडेटा लिखना c:\temp\floob.bak | 0 |
बैकअप सेट का अंत लिखना | 30 |
इतिहास रिकॉर्ड लिखना | 12 |
इतिहास रिकॉर्ड लिखना पूरा हो गया है (बीता हुआ =11 एमएस) | 0 |
बैकअप डेटाबेस समाप्त | 0 |
बैकअप कार्रवाई के लिए ईवेंट डेटा
पुनर्स्थापित करने के लिए, आपको ये पंक्तियाँ दिखाई देंगी:
संदेश | अवधि (मिलीसेकंड) |
---|---|
डेटाबेस पुनर्स्थापित करना प्रारंभ | 0 |
बैकअप सेट खोलना | 3 |
प्रमुख मेटाडेटा संसाधित किया जा रहा है | 0 |
योजना शुरू | 23 |
प्रभावी विकल्प:Checksum=0, Compression=1, Encryption=0, BufferCount=6, MaxTransferSize=1024 KB | 0 |
योजना पूरी हो गई है | 0 |
ऑफ़लाइन पुनर्स्थापना प्रारंभ करना | 0 |
डेटाबेस को DB_ID=5 के रूप में संलग्न किया गया | 1 |
कंटेनर तैयार करना | 534 |
कंटेनर तैयार हैं | 1097 |
बैकअप सेट को पुनर्स्थापित करना | 0 |
स्थानांतरित करने के लिए अनुमानित कुल आकार =658460672 बाइट्स | 0 |
डेटा स्थानांतरित करना | 1 |
बैकअपस्ट्रीम(0):10048 विस्तार आकार के MSDA को संसाधित करना | 3282 |
बैकअपस्ट्रीम(0):पूर्ण MSDA | 0 |
लॉग शून्यिंग पूर्ण होने की प्रतीक्षा कर रहा है | 3 |
लॉग शून्यिंग पूर्ण | 0 |
बैकअपस्ट्रीम(0):प्रोसेसिंग MSTL (FID=2, VLFID=101, size=65536 बाइट्स) | 1024 |
डेटा स्थानांतरण पूरा हो गया है | 14 |
बैकअप सेट बहाल हो गया है | 45 |
ऑफ़लाइन रोल-फ़ॉरवर्ड प्रारंभ | 1 |
68 VLF शीर्षलेख संसाधित किए जा रहे हैं | 69 |
वीएलएफ हेडर को प्रोसेस करना पूरा हो गया है | 11 |
पहला एलएसएन:101:111920:43, आखिरी एलएसएन:101:111960:1 | 0 |
स्टॉप एलएसएन:101:111960:1 | 4 |
ऑफ़लाइन रोल-फ़ॉरवर्ड पूरा हो गया है | 17 |
डेटाबेस सुधार पूरा हो गया है | 2 |
डेटाबेस को ऑनलाइन में स्थानांतरित करना | 2 |
ऑनलाइन के लिए डेटाबेस पुनः प्रारंभ करना | 87 |
PostRestoreContainerFixups शुरू होता है | 5 |
PostRestoreContainerFixups पूरा हो गया है | 2 |
PostRestoreReplicationFixup शुरू होता है | 107 |
PostRestoreReplicationFixup पूरा हो गया है | 2 |
डेटाबेस पुनः प्रारंभ | 9 |
किसी भी रुके हुए पूर्ण टेक्स्ट क्रॉल को फिर से शुरू करना | 6 |
इतिहास रिकॉर्ड लिखना | 13 |
इतिहास रिकॉर्ड लिखना पूरा हो गया है (बीता हुआ =13 एमएस) | 2 |
MSDB रखरखाव पूरा हो गया है | 2 |
डेटाबेस पुनर्स्थापित करें समाप्त | 0 |
पुनर्स्थापन कार्रवाई के लिए ईवेंट डेटा
यदि आप धीमे बैकअप या पुनर्स्थापना कार्रवाई का समस्या निवारण कर रहे हैं, तो आप आसानी से अवधि को फ़िल्टर कर सकते हैं, ताकि आप केवल n मिलीसेकंड से अधिक समय लेने वाले ईवेंट देख सकें, उदाहरण के लिए। केवल एक चीज जो मुझे इस आउटपुट में दिखाई नहीं दे रही है, वह यह बताने का कोई तरीका है कि क्या पुनर्स्थापना के दौरान तत्काल फ़ाइल आरंभीकरण प्रभाव में था - आपको अभी भी ट्रेस फ़्लैग 3004 की आवश्यकता हो सकती है, जैसा कि पिछले महीने के टी-एसक्यूएल मंगलवार के लिए मेरी पोस्ट में वर्णित है।पी>
सत्र को रोकना न भूलें (लेकिन सर्वर पर सत्र की परिभाषा रखने के लिए स्वतंत्र महसूस करें, ताकि आप इसे फिर से उपयोग कर सकें):
ALTER EVENT SESSION [Backup progress] ON SERVER STATE = STOP;
मैंने कोई प्रदर्शन परीक्षण या प्रभाव विश्लेषण नहीं किया, लेकिन सामान्य तौर पर, मैं कहूंगा कि - ट्रेस फ़्लैग्स की तरह - यह ऐसा कुछ नहीं है जिसे आप हर समय चलाना चाहते हैं, लेकिन केवल एक विशिष्ट ऑपरेशन का समस्या निवारण करते समय। ट्रेस फ़्लैग चालू करने और SQL सर्वर के त्रुटि लॉग से सभी आउटपुट को पार्स करने की तुलना में इस सत्र को सेट करना और डेटा, IMHO को क्वेरी करना थोड़ा आसान है।