HADR_SYNC_COMMIT का उत्सुक मामला प्रतीक्षा करता है


11

हम HADR_SYNC_COMMITअपने वातावरण में प्रतीक्षा के लिए एक दिलचस्प पैटर्न देख रहे हैं । हमारे पास तीन प्रतिकृति हैं; डेटासेंटर में एक प्राथमिक, एक सिंक सेकेंडरी और एक एसिंक्स सेकेंडरी और हमने दूसरे डेटासेंटर (~ 2400 मील अलग) में तीन और ASYNC प्रतिकृतियां जोड़ीं

जब से, हमने वेट में भारी वृद्धि को नोटिस करना शुरू किया है HADR_SYNC_COMMIT। जब हम सक्रिय सत्रों को देखते हैं, तो हम COMMIT TRANSACTIONSYNC प्रतिकृति पर प्रतीक्षा कर रहे प्रश्नों का एक समूह देखते हैं

स्क्रीनशॉट से, हम स्पष्ट रूप से देख सकते हैं कि HADR_SYNC_COMMIT29 जून को प्रतीक्षा में एक छलांग है , और हमने अंततः 1 जुलाई को दोपहर में दूरदराज के डाटासेंटर में तीन async प्रतिकृति के 'दो' को गिरा दिया। इसके साथ प्रतीक्षा समय काफी कम हो गया।

छवि

हमने अब तक क्या जाँच की है - लॉग रे कतार, रेडो कतार, अंतिम कठोर समय और दूरस्थ प्रतिकृतियों पर अंतिम प्रतिबद्ध समय। हमारे पास व्यापार के घंटों के दौरान छोटे लेन-देन के निरंतर फटने हैं, और इसलिए एक निश्चित टाइमस्टैम्प (60KB और 1 एमबी के बीच कहीं भी) पर कतारें बहुत छोटी हैं।
दूरस्थ प्रतिकृतियां लगभग सिंक में हैं, प्रतिकृतियों पर किसी भी व्यक्तिगत lsn के लिए अंतिम प्रतिबद्ध समय और अंतिम कठोर समय के बीच बहुत कम अंतर है।

नेटवर्क पाइप 10G है और हमने प्रेषित बफर आकार को 256 मेगाहर्ट्ज से 2 गीगा तक संशोधित किया है, यह इस धारणा के तहत किया गया था कि नेटवर्क पैकेट को गिरा रहा था और उन्हें फिर से प्रसारित कर रहा था; किसी भी तरह से मदद करने के लिए नहीं लग रहा था।

तो, मैं सोच रहा हूँ कि ASYNC प्रतिकृतियों का वेट के साथ क्या करना है HADR_SYNC_COMMIT? क्या SYNC प्रतिकृति को इस प्रतीक्षा प्रकार पर निर्भर नहीं करना चाहिए , मैं यहां क्या याद कर रहा हूं?


1
तो क्या वास्तव में कोई समस्या है? बहुत सारे लोग बस उनके इंतजार को देखते हैं और कहते हैं, अरे, यह सबसे ज्यादा इंतजार है, यह एक समस्या होनी चाहिए! प्रतीक्षा बस एक संख्या है और हमेशा उच्चतम संख्या के साथ एक होने जा रहा है - इसका मतलब यह नहीं है कि हल करने के लिए एक प्रदर्शन समस्या है। इस प्रतीक्षा विशेष रूप से के लिए, ऐसा लगता है कि आप की संभावना से इनकार किया है सबसे आम कारण है, और अपने द्वितीयक पिछड़ने नहीं कर रहे हैं के बाद से, मैं पर इस "समस्या" जब तक ऊर्जा का एक बहुत खर्च नहीं होगा
हारून बर्ट्रेंड

आपको प्रतीक्षा काउंटर में एक उच्च संख्या के साथ कुछ अन्य लक्षण मिले हैं, और आप उच्च प्रतीक्षा काउंटर के साथ सहसंबंधित कर सकते हैं।
हारून बर्ट्रेंड

@AaronBertrand हाँ, वहाँ है। प्राथमिक प्रतिकृति पर सक्रिय स्पिड लॉग सेकेंडर्स को सिंक सेकेंडरी पर सख्त करने के लिए प्रतीक्षा करता है, यह देरी / प्रतीक्षा बदले में एप्लिकेशन को काफी धीमा कर देती है। Pagelatch_up 9 जुलाई को प्रतीक्षा करता है जो आप स्क्रीनशॉट में देख रहे हैं, क्योंकि tempdb विवाद (पृष्ठ पर प्रतीक्षा करता है), हमने dba की ओर से और फ़ाइलें जोड़ी हैं और अनुप्रयोग के लोगों ने संग्रहीत प्रक्रिया को ट्यून किया है जिससे कि इस समस्या को कम करने के लिए tempdb पर बहुत ही चालाकी से प्रहार किया गया है। Hadr_sync_waits पर वापस, पहले स्थान पर async को प्रभावित करने वाले asr_sync_commits को प्रभावित क्यों करता है? धन्यवाद।
अरुण गोपीनाथ

1
मुझे लगता है कि प्रतीक्षा समय में स्थानांतरण समय भी शामिल है, और डेटा को एक साथ स्थानांतरित किया जाता है, एसिंक्स को अभी कमिट के लिए इंतजार नहीं करना पड़ता है। तो आपके पास जितनी अधिक सैकंडरी हैं, चाहे सिंक हो या असिंक्स, जितना अधिक समय लॉग गतिविधि को स्थानांतरित करने में खर्च होने वाला है (यह आवश्यक रूप से घड़ी का समय नहीं है, क्योंकि इसमें से कुछ समवर्ती हो सकता है)। आप नेटवर्क के लोगों को यह देखने की कोशिश कर सकते हैं कि क्या कोई अनुचित विलंबता सामान्य रूप से चल रही है या आप अधिक सेकंड जोड़ते हैं।
हारून बर्ट्रेंड

जवाबों:


7

पहले प्रतीक्षा घटना का वर्णन है कि आपका सवाल है:

लॉग को कठोर करने के लिए सिंक्रनाइज़ किए गए द्वितीयक डेटाबेस के लिए ट्रांज़ैक्शन कमेटी प्रोसेसिंग की प्रतीक्षा की जा रही है। यह प्रतीक्षा ट्रांजैक्शन विलंब प्रदर्शन काउंटर द्वारा भी परिलक्षित होती है। यह प्रतीक्षा प्रकार सिंक्रनाइज़ किए गए उपलब्धता समूहों के लिए अपेक्षित है और माध्यमिक डेटाबेस में लॉग भेजने, लिखने और स्वीकार करने के समय को इंगित करता है।

https://msdn.microsoft.com/en-us/library/ms179984.aspx

इस प्रतीक्षा के यांत्रिकी में खोदने से आपके पास लॉग ब्लॉक संचारित और कठोर हो जाते हैं लेकिन दूरस्थ सर्वर पर पुनर्प्राप्ति पूरी नहीं होती है। इस मामले के होने और यह देखते हुए कि आपने अतिरिक्त प्रतिकृतियां जोड़ी हैं, यह इस कारण से है कि बैंडविड्थ आवश्यकताओं में वृद्धि के कारण आपका HADR_SYNC_COMMIT बढ़ सकता है। इस मामले में हारून बर्ट्रेंड सवाल पर अपनी टिप्पणी में बिल्कुल सही है।

स्रोत: http://blogs.msdn.com/b/psssql/archive/2013/04/26/alwayson-hadron-learning-series-hadr-sync-commit-vs-writelog-wait.aspx

आपके प्रश्न के दूसरे भाग में खुदाई करना कि यह प्रतीक्षा आवेदन की मंदी से कैसे संबंधित हो सकती है। मेरा मानना ​​है कि यह एक करणीय मुद्दा है। आप अपने इंतजार को बढ़ रहे हैं और हाल ही में उपयोगकर्ता की शिकायत और निष्कर्ष को गलत तरीके से चित्रित कर रहे हैं कि दोनों में एक संबंध है जब यह बिल्कुल भी नहीं हो सकता है। तथ्य यह है कि आपने tempdb फ़ाइलों को जोड़ा और आपका एप्लिकेशन मेरे लिए अधिक संवेदनशील हो गया, यह दर्शाता है कि आपके पास कुछ अंतर्निहित विवाद मुद्दे हो सकते हैं, जो कि किसी उपलब्धता समूह में डेटाबेस के अतिरिक्त स्नैपशॉट आइसोलेशन स्तर ओवरहेड के अतिरिक्त ओवरहेड द्वारा बढ़ाए जा सकते हैं। यह आपके HADR_SYNC_COMMIT प्रतीक्षा के साथ बहुत कम या कुछ भी नहीं हो सकता है।

यदि आप इसका परीक्षण करना चाहते हैं, तो आप अपनी प्राथमिक प्रतिकृति पर Hadr_db_commit_mgr_update_harden XEvent को देखने वाले एक विस्तारित ईवेंट ट्रेस का उपयोग कर सकते हैं और एक आधार रेखा प्राप्त कर सकते हैं। एक बार जब आपके पास अपनी आधार रेखा होती है तो आप एक बार में अपने प्रतिकृतियों को वापस जोड़ सकते हैं और देख सकते हैं कि ट्रेस कैसे बदलता है। मैं आपको एक ऐसी फ़ाइल का उपयोग करने के लिए जोरदार तरीके से प्रोत्साहित करूंगा जो एक ऐसे वॉल्यूम पर रहती है जिसमें कोई डेटाबेस नहीं होता है और रोलओवर और अधिकतम आकार सेट किया जाता है। कृपया अवधि फ़िल्टर को अपने प्रतीक्षा के साथ मेल खाने वाली घटनाओं को इकट्ठा करने के लिए आवश्यक रूप से समायोजित करें ताकि आप इसे किसी अन्य टीम के साथ समस्या निवारण और सहसंबंधित कर सकें जिसमें शामिल होना आवश्यक है।

CREATE EVENT SESSION [HADR_SYNC_COMMIT-Monitor] ON SERVER  -- Run this on the primary replica 
ADD EVENT sqlserver.hadr_db_commit_mgr_update_harden(
    WHERE ([delay]>(10))) -- I strongly encourage you to use the delay filter to avoid getting too many events back, this is measured in milliseconds
ADD TARGET package0.event_file(SET filename=N'<YourFilePathHere>')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.