रैम डिस्क पर SQL सर्वर टेम्पर्डब?


11

हमारे विक्रेता अनुप्रयोग डेटाबेस बहुत TempDB गहन है।

SQL 2012 एंटरप्राइज़ SP3 चलाने वाले 40 कोर और 768GB रैम के साथ सर्वर वर्चुअल (VMWare) है।

TempDB सहित सभी डेटाबेस सैन में टियर 1 एसएसडी पर हैं। हमारे पास 10 tempdb डेटा फाइलें हैं, जिनमें से प्रत्येक 1GB तक बढ़ी हुई हैं और वे कभी भी ऑटो नहीं बढ़ती हैं। 70GB लॉग फ़ाइल के साथ भी। ट्रेस फ्लैग्स 1117 और 1118 पहले से ही सेट हैं।

sysinos_io_virtual_file_stats पिछले महीने में टेम्परेब डेटा और लॉग फ़ाइलों पर पढ़े / लिखे गए 50 से अधिक टेराबाइट्स दिखाता है, जिसमें 250 घंटे या 10 दिनों का संचयी io_stall है।

हम पहले से ही पिछले 2 वर्षों में विक्रेता के कोड और एसपी को ट्यून कर चुके हैं।

अब, हम रैम ड्राइव पर tempdb फाइल रखने की सोच रहे हैं क्योंकि हमारे पास एक टन मेमोरी है। जब से सर्वर रिबूट किया जाता है तो tempdb नष्ट हो जाता है / फिर से तैयार हो जाता है, यह अस्थिर मेमोरी पर रखने के लिए एक आदर्श उम्मीदवार है जो सर्वर रिबूट होने पर भी फ्लश हो जाता है।

मैंने इसे कम वातावरण पर परीक्षण किया है और इसका परिणाम तेजी से क्वेरी समय में हुआ है, लेकिन सीपीयू उपयोग में वृद्धि हुई है, क्योंकि सीपीयू धीमी गति से ड्राइव करने के लिए और अधिक काम कर रहा है।

क्या किसी और ने उच्च ऑल्टेप उत्पादन प्रणाली में रैम पर अपना टेम्पर्डबेड रखा है? क्या कोई बड़ा नुकसान है? क्या कोई विक्रेता विशेष रूप से चुनने या बचने के लिए हैं?


शायद आप विक्रेता बहुत अधिक अस्थायी का उपयोग कर रहे हैं?
paparazzo

@ मोम, यह सवाल केवल इस मुद्दे का हिस्सा है कि 'क्या tempdb डिस्क पर जाता है' .. tempdb से नहीं पढ़ रहा है
d -_- b

1
SAN स्तर पर SSD का उपयोग करना वास्तव में नेटवर्क विलंबता के कारण आपको अधिक लाभ नहीं पहुँचा रहा है। एक NVMe SSD को SQL सर्वर में डालें और उस पर tempdb चलाएं।
मैक्स वर्नोन

मैंने अभी-अभी 'nvme ssd बनाम ramdisk' को गॉगल किया है, और पहला परिणाम एक रेडिट पोस्ट है जो दावा करता है कि बाद में ~ 3 गुना तेज है। इसके अलावा डेटासेंटर को चलाना और इसे ब्लेड में स्थापित करना आसान है :)
d -_- b

2
Microsoft अपने कुछ समूहों में पीसीआई-ई फ्यूजनियो कार्ड का उपयोग करता है (इसमें एक मामूली बदलाव है जहां आप अभी भी स्थानीय डिस्क्स के साथ उपयोग कर सकते हैं)। पीसीआई-ई इंटरफेस जैसा कि मैक्स ने बताया है कि यह काफी तेज है। यदि आप प्रति सेकंड अधिक अनुरोध प्राप्त कर रहे हैं, तो आप माप करने के लिए प्रति सेकंड CPU इंटरप्ट को मापना चाहते हैं। आपको कम विलंब अनुरोधों (SQL समय नहीं) के मुख्य कारणों में से एक के रूप में होना चाहिए।
अली रज़ेगी

जवाबों:


7

सबसे पहले, पैच: सुनिश्चित करें कि आप 2012 सर्विस पैक 1 संचयी अद्यतन 10 या नए पर हैं। SQL 2014 में, Microsoft ने TempDB को डिस्क में लिखने के लिए कम उत्सुक होने के लिए बदल दिया , और उन्होंने इसे 2012 SP1 CU10 के लिए अवगत कराया, ताकि बहुत से TempDB लिखने का दबाव कम हो सके।

दूसरा, अपने विलंबता पर सटीक संख्या प्राप्त करें। चेक sys.dm_io_virtual_file_stats अपने tempdb फ़ाइलों के लिए औसत लिखने स्टाल को देखने के लिए। ऐसा करने का मेरा पसंदीदा तरीका है:

sp_BlitzFirst @ExpertMode = 1, @Seconds = 30 /* Checks for 30 seconds */
sp_BlitzFirst @SinceStartup = 1 /* Shows data since startup, but includes overnights */

फ़ाइल आँकड़े अनुभाग देखें, और भौतिक लिखों पर ध्यान केंद्रित करें। चूंकि स्टाकअप डेटा थोड़ा भ्रामक हो सकता है क्योंकि इसमें वह समय भी शामिल है जब CHECKDB चल रहा है, और यह वास्तव में आपके TempDB को हथौड़ा कर सकता है।

यदि आपका औसत लेखन विलंबता 3ms से अधिक है, तो हाँ, आपके SAN में ठोस स्थिति संग्रहण हो सकता है, लेकिन यह अभी भी तेज़ नहीं है।

पहले TempDB के लिए स्थानीय SSDs पर विचार करें। अच्छे स्थानीय एसएसडी (जैसे इंटेल के PCIe NVMe कार्ड, जो $ 2k यूएसडी के तहत विशेष रूप से आपके द्वारा बताए गए आकारों में हैं) में कम विलंबता है, जितना कम आप साझा भंडारण के साथ प्राप्त कर सकते हैं। हालांकि, वर्चुअलाइजेशन के तहत, यह एक खामी के साथ आता है: आप लोड करने के लिए या हार्डवेयर समस्याओं पर प्रतिक्रिया करने के लिए अतिथि को एक होस्ट से दूसरे में नहीं भेज सकते हैं।

एक रैम ड्राइव पर विचार करें। इस दृष्टिकोण के साथ दो बड़े गोत्र हैं:

सबसे पहले, अगर आपके पास वास्तव में भारी TempDB लेखन गतिविधि है, तो स्मृति पर परिवर्तन दर इतनी अधिक हो सकती है कि आप अतिथि को एक होस्ट से दूसरे होस्ट में सभी को देखे बिना नहीं कर पाएंगे। VMotion के दौरान, आपको RAM की सामग्री को एक होस्ट से दूसरे होस्ट में कॉपी करना होगा। यदि यह वास्तव में तेजी से बदल रहा है, तो आप जितनी तेजी से इसे अपने vMotion नेटवर्क पर कॉपी कर सकते हैं, आप मुद्दों में चला सकते हैं (विशेषकर यदि यह बॉक्स मिररिंग, एजीएस या एक विफलता क्लस्टर के साथ शामिल है।)

दूसरा, रैम ड्राइव सॉफ्टवेयर हैं। लोड परीक्षण में जो मैंने किया है, मैं वास्तव में भारी TempDB गतिविधि के तहत उनकी गति से प्रभावित नहीं हुआ हूं। यदि यह इतना भारी है कि एंटरप्राइज-ग्रेड SSD नहीं रख सकता है, तो आप रैम ड्राइव सॉफ्टवेयर पर भी कर लगाने जा रहे हैं। आप वास्तव में लाइव जाने से पहले इस भारी परीक्षण को लोड करना चाहते हैं - विभिन्न अनुक्रमितों पर बहुत सारे एक साथ अनुक्रमित चीज़ों को आज़माएं, सभी तरह के टेम्पर्डडब का उपयोग करते हुए।


1

रैम ड्राइव बनाना तुच्छ होना चाहिए। कई बूट करने योग्य लिनक्स थंब ड्राइव और ऑप्टिकल ड्राइव एक रैम ड्राइव बनाते हैं और वहां ओएस फाइलों को स्टोर करते हैं। रूट फ़ाइल सिस्टम तो स्मृति में है। विंडोज़ में, दिन में वापस, रैम ड्राइव को config.sys में डिवाइस ड्राइवर के रूप में लोड किया गया था। आमतौर पर ड्राइवर को उच्च मेमोरी में लोड किया गया था। मेरी राय में, यह एक बहुत अच्छा और सरल उपाय है। अगर आपने रैम ड्राइव का उपयोग करके अपना समाधान बनाया है तो मैं इसे सुनना चाहूंगा। मैं ऐसा ही कुछ करना चाहता हूं, लेकिन स्थायी स्टोरेज को लिखना चाहता हूं और रैम में डीबी स्टोर करना चाहता हूं। मेरे मामले में हमारे पास ऐसी मशीनें हैं जो ओएस से अधिक रैम स्थापित कर सकती हैं। OS के लोड होने से पहले RAM डिस्क बनाना RAM के उपयोग की अनुमति देगा अन्यथा OS दिखाई नहीं देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.