SQL सर्वर 2012 में कई लाइसेंसिंग परिवर्तन पेश किए गए थे; सबसे महत्वपूर्ण था एंटरप्राइज़ संस्करण के लिए सॉकेट-आधारित लाइसेंसिंग से कोर-आधारित लाइसेंसिंग की ओर बढ़ना। Microsoft को इस परिवर्तन के साथ जिन चुनौतियों का सामना करना पड़ा, उनमें से एक उन ग्राहकों के लिए माइग्रेशन पथ प्रदान करना था जो पहले SQL Server 2012 से पहले एंटरप्राइज़ संस्करण के लिए सर्वर + CAL आधारित लाइसेंसिंग का उपयोग करते थे। सॉफ़्टवेयर एश्योरेंस के तहत ग्राहक SQL सर्वर 2012 एंटरप्राइज़ संस्करण में अपग्रेड कर सकते हैं और अभी भी सर्वर का उपयोग कर सकते हैं। +CAL लाइसेंसिंग ("ग्रैंडफादरिंग" के रूप में भी जाना जाता है) लेकिन 20 तार्किक प्रोसेसर तक सीमित है, जैसा कि SQL Server 2012 लाइसेंसिंग गाइड में प्रलेखित है। यह लाइसेंसिंग एंटरप्राइज़ सर्वर + सीएएल लाइसेंस द्वारा कवर किए जा रहे 4 वीएम की सीमा के साथ वीएम तक भी विस्तारित है, लेकिन अभी भी उसी 20 लॉजिकल प्रोसेसर सीमा के साथ है जैसा कि SQL सर्वर 2012 वर्चुअलाइजेशन लाइसेंसिंग गाइड में प्रलेखित है।
20 तार्किक प्रोसेसर सीमा द्वारा बहुत से लोगों को गार्ड से पकड़ा गया है, भले ही इसे लाइसेंसिंग गाइड में प्रलेखित किया गया हो।
ERRORLOG फ़ाइल में एक प्रविष्टि की जाती है जब इंस्टेंस शुरू होता है, तार्किक प्रोसेसर की संख्या निर्दिष्ट करता है और 20 प्रोसेसर सीमा लागू की जा रही है:
दिनांक 11/14/2012 8:15:08 अपराह्नलॉग SQL सर्वर (वर्तमान - 11/14/2012 8:17:00 अपराह्न)
स्रोत सर्वर
संदेश
SQL सर्वर ने 16 कोर प्रति सॉकेट के साथ 2 सॉकेट और प्रति सॉकेट 16 लॉजिकल प्रोसेसर, 32 कुल लॉजिकल प्रोसेसर का पता लगाया; SQL सर्वर लाइसेंसिंग पर आधारित 20 तार्किक प्रोसेसर का उपयोग करना। यह एक सूचनाप्रद संदेश है; कोई उपयोगकर्ता कार्रवाई की आवश्यकता नहीं है।
डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ जो SQL सर्वर सर्वर + CAL का उपयोग करते हुए 20 तार्किक प्रोसेसर सीमा के तहत लागू होता है, पहले 20 शेड्यूलर ऑनलाइन दिखाई देते हैं और शेष शेड्यूलर ऑफ़लाइन दिखाई देते हैं। परिणामस्वरूप, NUMA नोड शेड्यूलर असंतुलन के कारण, उदाहरण के लिए, प्रदर्शन समस्याएं हो सकती हैं। इसे प्रदर्शित करने के लिए मैंने अपने Dell R720 परीक्षण सर्वर पर एक VM बनाया है जिसमें दो सॉकेट और Intel Xeon E5-2670 प्रोसेसर स्थापित हैं, प्रत्येक में 8 कोर और हाइपरथ्रेडिंग सक्षम है, जो विंडोज सर्वर 2012 डेटासेंटर संस्करण के तहत उपलब्ध कुल 32 तार्किक प्रोसेसर प्रदान करता है। VM को 32 वर्चुअल CPU के लिए कॉन्फ़िगर किया गया था जिसमें 16 वर्चुअल प्रोसेसर दो vNUMA नोड्स में आवंटित किए गए थे।
चित्र 1 - vNUMA सेटिंग्स
एंटरप्राइज़ सर्वर + सीएएल लाइसेंसिंग मॉडल के तहत SQL सर्वर में, इसका परिणाम शेड्यूलर कॉन्फ़िगरेशन में होता है जो निम्न के जैसा होता है:
का चयन करें parent_node_id, [status], scheduler_id, [cpu_id], is_idle, current_tasks_count, runnable_tasks_count, active_workers_count, load_factorFROM sys.dm_os_schedulers;
चित्र 2 - एंटरप्राइज़ सर्वर+CAL के अंतर्गत शेड्यूलर असाइनमेंट
जैसा कि आप देख सकते हैं, पहले NUMA नोड में सभी 16 लॉजिकल प्रोसेसर और दूसरे NUMA नोड में केवल चार लॉजिकल प्रोसेसर इंस्टेंस द्वारा उपयोग किए जाते हैं। इसके परिणामस्वरूप दो NUMA नोड्स के बीच शेड्यूलर का एक महत्वपूर्ण असंतुलन होता है जो लोड के तहत महत्वपूर्ण प्रदर्शन समस्याओं का कारण बन सकता है। इसे प्रदर्शित करने के लिए, मैंने उदाहरण के लिए एडवेंचरवर्क्स बुक्स ऑनलाइन वर्कलोड चलाने वाले 300 कनेक्शन बनाए और फिर निम्नलिखित क्वेरी का उपयोग करके दृश्य ऑनलाइन शेड्यूलर के लिए शेड्यूलर जानकारी को कैप्चर किया:
का चयन करें parent_node_id, शेड्यूलर_आईडी, [cpu_id], is_idle, current_tasks_count, runnable_tasks_count, active_workers_count, load_factorFROM sys.dm_os_schedulersWHERE [status] =N'VISIBLE ONLINE';
लोड के तहत इस क्वेरी का एक उदाहरण आउटपुट नीचे चित्र 3 में दिखाया गया है।
चित्र 3 - एंटरप्राइज़ सर्वर+CAL के साथ लोड किए गए शेड्यूलरउन्हें>
आप इस लक्षण को SQL संतरी प्रदर्शन सलाहकार जैसे निगरानी उपकरणों में भी देख सकते हैं:
चित्र 4 - NUMA असंतुलन जैसा कि SQL संतरी प्रदर्शन सलाहकार में दिखाया गया है
यह जानकारी एक महत्वपूर्ण असंतुलन दिखाती है और परिणामस्वरूप प्रदर्शन प्रभावित होने वाला है। यह दूसरे NUMA नोड में चार अनुसूचकों के लिए चलने योग्य कार्यों की संख्या में स्पष्ट रूप से स्पष्ट है, जो पहले NUMA नोड में अनुसूचकों के आकार के तीन से चार गुना हैं। तो वास्तव में समस्या क्या है और ऐसा क्यों होता है?
पहली नज़र में आप सोच सकते हैं कि यह SQL सर्वर में एक बग है, लेकिन ऐसा नहीं है। यह कुछ ऐसा है जो डिज़ाइन द्वारा होता है, हालांकि मुझे संदेह है कि यह परिदृश्य अपेक्षित था जब 20 तार्किक प्रोसेसर सीमा मूल रूप से लागू की गई थी। NUMA-आधारित सिस्टम पर, राउंड-रॉबिन फैशन में NUMA नोड्स को नए कनेक्शन असाइन किए जाते हैं, और फिर NUMA नोड के अंदर कनेक्शन लोड के आधार पर शेड्यूलर को असाइन किया जाता है। यदि हम इस डेटा को देखने के तरीके को बदलते हैं और parent_node_id के आधार पर डेटा एकत्र करते हैं तो हम देखेंगे कि कार्य वास्तव में NUMA नोड्स में संतुलित हो रहे हैं। ऐसा करने के लिए हम निम्नलिखित क्वेरी का उपयोग करेंगे, जिसका आउटपुट चित्र 5 में दिखाया गया है।
का चयन करें parent_node_id, SUM(current_tasks_count) as current_tasks_count, SUM(runnable_tasks_count) as runnable_tasks_count, SUM(active_workers_count) as active_workers_count, AVG(load_factor) as avg_load_factorFROM sys.dmW_UP_LE; /पूर्व>
चित्र 5 - NUMA नोड राउंड-रॉबिन बैलेंसयह व्यवहार SQL सर्वर (http://msdn.microsoft.com/en-us/library/ms180954(v=sql.105).aspx) के लिए ऑनलाइन पुस्तकें में प्रलेखित है। SQLOS, SQL सर्वर और हार्डवेयर के बारे में मुझे जो पता है उसे जानना, यह समझ में आता है। सर्वर + सीएएल लाइसेंसिंग के साथ SQL सर्वर 2012 एंटरप्राइज़ संस्करण में 20 तार्किक प्रोसेसर सीमा से पहले, यह एक दुर्लभ परिदृश्य था कि SQL सर्वर में उत्पादन सर्वर में NUMA नोड्स के बीच शेड्यूलर असंतुलन होगा। इस विशिष्ट मामले में समस्याओं में से एक यह है कि वर्चुअल NUMA को VM के माध्यम से पारित किया गया था। भौतिक हार्डवेयर पर ठीक उसी इंस्टॉलेशन को करने से सभी शेड्यूलर ऑनलाइन दिखाई दे सकते हैं क्योंकि हाइपरथ्रेड्स द्वारा प्रस्तुत अतिरिक्त लॉजिकल प्रोसेसर SQL और फ्री द्वारा अलग-अलग होते हैं।
दूसरे शब्दों में, 20-लॉजिकल प्रोसेसर की सीमा वास्तव में 40 शेड्यूलर ऑनलाइन में परिणत होती है यदि (ए) यह वर्चुअल मशीन नहीं है, (बी) प्रोसेसर इंटेल हैं, और (सी) हाइपर-थ्रेडिंग सक्षम है। मजबूत>
इसलिए हमें यह संदेश त्रुटि लॉग में दिखाई देता है:
दिनांक 11/14/2012 10:36:18 अपराह्न
लॉग SQL सर्वर (वर्तमान – 11/14/2012 10:36:00 अपराह्न)
स्रोत सर्वर
संदेश
SQL सर्वर ने 8 कोर प्रति सॉकेट के साथ 2 सॉकेट और प्रति सॉकेट 16 लॉजिकल प्रोसेसर, 32 कुल लॉजिकल प्रोसेसर का पता लगाया; SQL सर्वर लाइसेंसिंग पर आधारित 32 तार्किक प्रोसेसर का उपयोग करना। यह एक सूचनाप्रद संदेश है; कोई उपयोगकर्ता कार्रवाई की आवश्यकता नहीं है।और ऊपर दी गई क्वेरी के परिणामस्वरूप सभी 32 प्रोसेसर ऑनलाइन दिखाई दे रहे हैं:
का चयन करें parent_node_id, [status], scheduler_id, [cpu_id], is_idle, current_tasks_count, runnable_tasks_count, active_workers_count, load_factorFROM sys.dm_os_schedulersWHERE [status] =N'VISIBLE ONLINE';
चित्र 6 - भौतिक हार्डवेयर पर समान विन्यासइस मामले में, चूंकि केवल 32 तार्किक प्रोसेसर हैं, 20 (अच्छी तरह से, 40) कोर सीमा हमें बिल्कुल भी प्रभावित नहीं करती है, और काम सभी कोर में समान रूप से वितरित किया जाता है।
उन परिदृश्यों में जहां 20 प्रोसेसर की सीमा शेड्यूलर के NUMA संतुलन को प्रभावित करती है,
ALTER SERVER CONFIGURATION
के उपयोग के माध्यम से प्रत्येक NUMA नोड्स में दृश्यमान ऑनलाइन शेड्यूलर की संख्या को संतुलित करने के लिए सर्वर कॉन्फ़िगरेशन को मैन्युअल रूप से बदलना संभव है। . प्रदान किए गए VM उदाहरण में, निम्न आदेश प्रत्येक NUMA नोड में पहले 10 तार्किक प्रोसेसर को ऑनलाइन दृश्यमान करने के लिए कॉन्फ़िगर करेगा।सर्वर कॉन्फ़िगरेशन सेट प्रक्रिया एफ़िनिटी CPU =0 से 9, 16 से 25;इस नए कॉन्फ़िगरेशन के साथ, 300 सत्रों के समान कार्यभार और एडवेंचरवर्क्स बुक्स ऑनलाइन वर्कलोड को चलाकर, हम देख सकते हैं कि लोड असंतुलन अब नहीं होता है।
चित्र 7 - मैन्युअल कॉन्फ़िगरेशन के साथ संतुलन बहालऔर फिर से SQL संतरी प्रदर्शन सलाहकार का उपयोग करके हम देख सकते हैं कि CPU लोड दोनों NUMA नोड्स में समान रूप से वितरित किया गया है:
चित्र 8 - NUMA बैलेंस जैसा कि SQL संतरी प्रदर्शन सलाहकार में दिखाया गया हैयह समस्या सख्ती से VMs तक सीमित नहीं है और जिस तरह से वर्चुअल CPU को OS में प्रस्तुत किया जाता है। भौतिक हार्डवेयर के साथ इस समस्या में भाग लेना भी संभव है। उदाहरण के लिए, एक पुराना Dell R910 जिसमें चार सॉकेट और आठ कोर प्रति सॉकेट, या यहां तक कि एक AMD Opteron 6200 इंटरलागोस आधारित सर्वर जिसमें दो सॉकेट और 16 कोर प्रति सॉकेट है, जो स्वयं को आठ कोर के साथ चार NUMA नोड्स के रूप में प्रस्तुत करता है। इनमें से किसी भी कॉन्फ़िगरेशन के तहत, प्रक्रिया असंतुलन के परिणामस्वरूप NUMA नोड्स में से एक को पूरी तरह से ऑफ़लाइन सेट किया जा सकता है। नतीजतन, अन्य साइड इफेक्ट जैसे कि उस नोड से मेमोरी को ऑनलाइन नोड्स में वितरित किया जा रहा है जिससे विदेशी मेमोरी एक्सेस समस्याएँ भी प्रदर्शन को ख़राब कर सकती हैं।
सारांश
सर्वर + सीएएल के लिए एंटरप्राइज़ संस्करण लाइसेंसिंग का उपयोग कर SQL सर्वर 2012 का डिफ़ॉल्ट कॉन्फ़िगरेशन सभी NUMA कॉन्फ़िगरेशन के तहत आदर्श नहीं है जो SQL सर्वर के लिए मौजूद हो सकते हैं। जब भी Enterprise Server+CAL लाइसेंसिंग का उपयोग किया जा रहा हो, तो यह सुनिश्चित करने के लिए कि SQL सर्वर इष्टतम प्रदर्शन के लिए कॉन्फ़िगर किया गया है, NUMA नोड प्रति NUMA कॉन्फ़िगरेशन और शेड्यूलर स्थितियों की समीक्षा करने की आवश्यकता है। कोर-आधारित लाइसेंसिंग के अंतर्गत यह समस्या उत्पन्न नहीं होती है क्योंकि सभी अनुसूचक लाइसेंसीकृत होते हैं और ऑनलाइन दिखाई देते हैं।