सरल प्रश्न
SQL सर्वर क्वांटम (4 एमएस) सर्वर ओएस क्वांटम (सामान्य रूप से: 187.5 एमएस) के साथ कैसे सिंक्रनाइज़ किया जाता है?
सरल प्रश्न समझाया
184 एमएस के बाद ओएस क्वांटम का उपयोग किया जा रहा है (जो 46 पूर्ण SQL क्वांटम से मेल खाता है) ओएस क्वांटम के पास 3.5 एमएस समय है इससे पहले कि इसे एक अलग प्रक्रिया के लिए शेड्यूल को सौंपना होगा। एसक्यूएल ओएस एक क्वांटम (4 एमएस) शुरू करता है और 3.5 एमएस के बाद, ओएस क्वांटम ने वर्तमान एसक्यूएल ओएस थ्रेड को रोकने का फैसला किया है जो अभी भी 0.5 एमएस है इससे पहले कि यह शेड्यूल प्राप्त होगा। अब क्या हुआ?
ओएस क्वांटम पर गहरा गोता
अगले कुछ खंडों में मैं लिखूंगा कि मैंने ओएस क्वांटम के बारे में अब तक क्या पाया है और एक क्वांटम की अवधि की गणना कैसे की जा सकती है। एक OS "क्वांटम" की अवधि "टिक्स" पर आधारित होती है और "टिक" की अवधि स्वयं "क्लॉक अंतराल" पर आधारित होती है, जो सामान्य रूप से 15.625000 एमएस है। लेकिन मुझे थोड़ा विस्तार दें ...
टिकटिक
ब्लॉग लेख नो थिक टिक में लेखक जिम घड़ी अंतराल (उर्फ "टिक्स") की मूल बातें बताते हैं और वे किस लिए हैं।
जब मैंने कुछ पढ़ा जैसे "घड़ी का अंतराल ... अधिकांश x86 मल्टीप्रोसेसर के लिए लगभग 15 मिलीसेकंड है" तो मैं अपनी घड़ी के मूल्य, या "टिक", अंतराल को निर्धारित करने के लिए मजबूर हूं। सौभाग्य से, मैं जिस पुस्तक में यह उद्धरण पढ़ता हूं, विंडोज इंटर्ल्स फोर्थ एडिशन मुझे मेरे दुःख में मदद करने के लिए एक संदर्भ प्रदान करता है। ... उपरोक्त पुस्तक के लेखक, मार्क रोसिनोविच ने बड़े ही विनम्रता से उपयोगिताएँ बनाई हैं । इस उपयोगिता को चलाने पर, मैं यह निर्धारित करने में सक्षम था कि मेरे x86 मल्टीप्रोसेसर पीसी पर घड़ी का अंतराल 15.625000 एमएस है। दिलचस्प है, लेकिन मेरा जिज्ञासु मन अधिक जानना चाहता है।
मात्रा
लेख का लेखक अपने दूसरे लेख में व्याख्या करता है उस...
बेशक वास्तविक कारण क्यों टिक अंतराल महत्वपूर्ण है कि यह थ्रेड शेड्यूलिंग को प्रभावित करता है । विंडोज शेड्यूलर प्रत्येक थ्रेड को "प्राथमिकता" को एक ही कार्य को करने के लिए, उसी प्राथमिकता के स्तर पर, चलाने के लिए "क्वांटम" समय देता है। शेड्यूलर द्वारा थ्रेड को असाइन किया गया क्वांटम टिक अंतराल का एक बहु है । एक विशिष्ट थ्रेड के लिए चुना गया विशिष्ट क्वांटम मान जहां इस लेख के साथ जाना चाहता है, उससे थोड़ा परे है।
ठीक है, तो मुझे पता है कि क्वांटम क्या है, लेकिन क्वांटम कब तक चलेगा।
अभी के लिए, आइए एक्सपी में अग्रभूमि धागे के लिए डिफ़ॉल्ट क्वांटम मान की जांच करें। इस मामले में विंडोज शेड्यूलर 18 या 6 टिक अंतरालों की मात्रा प्रदान करता है। (हाँ, क्वांटम को टिक अंतराल में बदलने के लिए, किसी को 3. से विभाजित करना होगा ... लेकिन, कई का कारण अनुसूचक को एक ऑपरेशन करने के लिए एक थ्रेड "चार्ज" करने की क्षमता प्रदान करने की अनुमति देता है जो इसे निलंबित करने का कारण बनता है।)
अब हम जानते हैं कि एक घड़ी अंतराल (टिक) लगभग 15.625000 एमएस और विंडोज डेस्कटॉप ओएस पर होना चाहिए, जहां डिफ़ॉल्ट क्वांटम 18 है, जिसके परिणामस्वरूप 6 टिक या 93.750000 एमएस (18/3 * 15.625000 एमएस) होंगे।
Windows सर्वर OS पर डिफ़ॉल्ट क्वांटम अलग है। "प्रोसेसर शेड्यूलिंग" सेटिंग "पृष्ठभूमि सेवाओं" पर सेट है
यह सेटिंग "सिस्टम सेटिंग्स | एडवांस्ड (टैब) | परफॉर्मेंस (सेक्शन) | सेटिंग्स ..." के माध्यम से पाई जा सकती है, जो "पेरोप्रमेंस ऑप्शंस: एडवांस्ड (टैब) ओपन करेगी। प्रोसेसर शेड्यूलिंग"
डिफ़ॉल्ट क्वांटम सेटिंग्स 36 (पृष्ठभूमि) से 36 (फोरग्राउंड) हैं। क्वांटम बड़ा है और इसलिए लंबा है। यह विंडोज डेस्कटॉप ओएस पर 18 (6 टिक) क्वांटम अग्रभूमि सेटिंग के 93.750000 एमएस की मात्रा दोगुनी है, जो पृष्ठभूमि सेवाओं के लिए सेट किए गए सर्वर ओएस पर लगभग 187.500000 एमएस है।
अवलोकन / स्पष्टीकरण
जब आप किसी सर्वर या डेस्कटॉप पर "बैकग्राउंड सर्विसेज" से सेटिंग को "एप्लीकेट्स" में बदलते हैं, तो रजिस्ट्री में HKLM \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparit को 0x18 से 0x02 में बदल दिया जाता है। 0x02 के लिए डिफ़ॉल्ट क्वांटम मान क्या है? यह एक टिप्पणी में पाया जा सकता है:
0x02 मान का अर्थ है कि "लघु बनाम दीर्घ" और "परिवर्तनीय बनाम निश्चित" फ़ील्ड OS के लिए डिफ़ॉल्ट हैं।
XPe & XP प्रो के लिए इन क्षेत्रों के लिए डिफ़ॉल्ट है: लघु और परिवर्तनीय जो निम्न बिट्स अतिरिक्त बिट्स सेट करने के समान है: 02424।
इस मान को 0x02 के साथ रखने से आपको 0x26 मिलता है, जो आपको लेख में तालिका में मिलेगा।
संदर्भ: "मास्टर योर क्वांटम" (MSDN ब्लॉग) पर टिप्पणी करें
एक ही लेख से क्वांटम सेटिंग्स की व्याख्या करने वाली तालिका:
Win32PrioritySeparation Foreground Background
0x28, 0x29, 0x2A 18 18
0x18, 0x19, 0x1A 36 36
0x24 6 6
0x25, 0x14 12 6
0x26 18 6
0x15 24 6
0x16 36 6
ओएस क्वांटम का संक्षिप्त सारांश
उपरोक्त जानकारी और लेख के उद्धरणों के आधार पर, हम जानते हैं कि एक क्वांटम एक निश्चित आकार नहीं है, बल्कि सिस्टम गुणों में एक ओएस सेटिंग से लिया गया है। एक क्वांटम Win32PrioritySeparation
रजिस्ट्री में सेटिंग के आधार पर भिन्न होती है जो सामान्य रूप से "सिस्टम गुण" (या तो "पृष्ठभूमि सेवाओं" या "एप्लिकेशन") में से एक से मेल खाती है।
OS स्तर पर एक क्वांटम है
- "एप्लिकेशन" सेटिंग के लिए
- अग्रभूमि अनुप्रयोगों के लिए 18 (जो 6 टिक्स हैं) (93.75 एमएस)
- पृष्ठभूमि अनुप्रयोगों के लिए 6 (जो 2 टिक है) (31.25 एमएस)
- "पृष्ठभूमि सेवा" सेटिंग के लिए
- अग्रभूमि अनुप्रयोगों के लिए 36 (जो कि 18 टिक है)
- पृष्ठभूमि अनुप्रयोगों के लिए 36 (जो 18 टिक है)
तो अब हम जानते हैं कि बैकग्राउंड सर्विसेज के लिए ऑप्टिमाइज़ होने के लिए विंडोज सर्वर सेटअप पर एक ओएस क्वांटम है ...
36 / 3 * 15.625000 ms = 187.5 ms
एसक्यूएल ओएस क्वांटम
इस अनुभाग में सूचीबद्ध है कि मैंने SQL OS क्वांटम पर क्या पाया है ...
SOS_SCHEDULER_YIELD प्रतीक्षा प्रकार
SOS_SCHEDULER_YIELD प्रतीक्षा प्रकार पर पॉल रान्डेल के विवरण से:
यह प्रतीक्षा प्रकार तब होता है जब कोई थ्रेड अपने पूर्ण थ्रेड क्वांटम (SQL सर्वर के सभी संस्करणों में 4 मिलीसेकंड, अपरिवर्तनीय ) के लिए निष्पादित करने में सक्षम था , और इसलिए शेड्यूलर से स्वेच्छा से, शेड्यूलर कतार के निचले भाग में जा रहा है।
संदर्भ: SOS_SCHEDULER_YIELD (SQLSkills.com प्रतीक्षा प्रकार)
SQL सर्वर DMV में शेड्यूलर
SQL सर्वर DMV पर sysinos_os_schedulers DMV के स्पष्टीकरण में।
[...] विंडोज प्रीमेप्टिव शेड्यूलिंग मैकेनिज्म का उपयोग करता है और प्रत्येक थ्रेड को सीपीयू समय का एक क्वांटम असाइन करता है, जब एक थ्रेड अपने क्वांटम का उपभोग करता है तो इसे एक कतार में भेजा जाता है और अन्य थ्रेड्स को निष्पादन प्रदान किया जाता है।
विरोध में, SQL सर्वर सहकारी शेड्यूलिंग तंत्र का उपयोग करता है, जब थ्रेड स्वैच्छिक रूप से अपने समय की मात्रा प्राप्त कर सकते हैं (आप इस व्यवहार को तब देख सकते हैं जब आपके पास SOS_SCHEDULER_YIELD प्रतीक्षा प्रकार है)। यह SQL सर्वर को CPU उपयोग को अनुकूलित करने की अनुमति देता है, क्योंकि जब किसी थ्रेड को निष्पादन के लिए संकेत दिया जाता है, लेकिन इसे चलाने के लिए तैयार नहीं होता है, तो यह अन्य थ्रेड्स के पक्ष में अपने समय की मात्रा प्राप्त कर सकता है ।
संदर्भ: SQL सर्वर शेड्यूलर, वर्कर्स और टास्क (MSSQLTips.com) को समझना
SQL सर्वर CPU दबाव का पता लगाएं
यह SQL सर्वर में CPU दबाव के बारे में एक लेख का एक बहुत छोटा खंड है।
तब होता है जब कोई कार्य स्वेच्छा से अन्य कार्यों को निष्पादित करने के लिए अनुसूचक का उत्पादन करता है। इस प्रतीक्षा के दौरान यह कार्य अपने परिमाण के नवीनीकरण की प्रतीक्षा कर रहा है ।
संदर्भ: SQL सर्वर CPU दबाव (MSSQLTips.com) का पता लगाएं
sysinos_os_schedulers (Microsoft डॉक्स)
मुझे लगता है कि निम्नलिखित उद्धरण SQL OS क्वांटम के बारे में सबसे महत्वपूर्ण जानकारी है जो मुझे मिल सकती है:
quantum_length_us bigint Identified for informational purposes only. Not supported. Future compatibility is not guaranteed. Exposes the scheduler quantum used by SQLOS.
संदर्भ: sysinos_os_schedulers (Transact-SQL) (Microsoft | डॉक्स)
मेरे कोन्ड्रम
सर्वर OS क्वांटम यह बताता है कि "कार्य" को निष्पादित करने के लिए SQL सर्वर सेवा को कितना समय दिया गया है। SQL सर्वर OS क्वांटम 4 एमएस के रूप में परिभाषित किया गया है। यदि मैं 187.5 एमएस को 4 एमएस से विभाजित करता हूं तो मुझे 3.5 एमएस के साथ छोड़ दिया जाता है।
और हमने यह चर्चा भी शुरू नहीं की है कि क्लॉक इंटरवल 15.625000 एमएस के डिफ़ॉल्ट के अलावा किसी और चीज़ के लिए कब सेट है।
सरल प्रश्न
SQL सर्वर क्वांटम (4 एमएस) सर्वर ओएस क्वांटम (सामान्य रूप से: 187.5 एमएस) के साथ कैसे सिंक्रनाइज़ किया जाता है?
सरल प्रश्न समझाया
184 एमएस के बाद ओएस क्वांटम का उपयोग किया जा रहा है (जो 46 पूर्ण SQL क्वांटम से मेल खाता है) ओएस क्वांटम के पास 3.5 एमएस समय है इससे पहले कि इसे एक अलग प्रक्रिया के लिए शेड्यूल को सौंपना होगा। एसक्यूएल ओएस एक क्वांटम (4 एमएस) शुरू करता है और 3.5 एमएस के बाद, ओएस क्वांटम ने वर्तमान एसक्यूएल ओएस थ्रेड को रोकने का फैसला किया है जो अभी भी 0.5 एमएस है इससे पहले कि यह शेड्यूल प्राप्त होगा। अब क्या हुआ?