क्या TempDB के लिए लिखता है हमेशा डिस्क के लिए एक वास्तविक शारीरिक लेखन में परिणाम, या TempDB SQL सर्वर द्वारा कैश की गई देरी के लिए लिखी जाती है जैसे Windows फ़ाइल सिस्टम कैश में?
क्या वे हमेशा? सबसे निश्चित रूप से नहीं। क्या वे कभी? हां, लेकिन ठेठ तंत्र के परिणामस्वरूप नहीं। यहाँ संदर्भ है कि क्या जांच चौकी के लिए है? ।
एक "अच्छी तरह से व्यवहार किया गया" प्रणाली में, एक उपयोगकर्ता डेटाबेस फ़ाइल चेकपॉइंट पर होती है। एक बुरी तरह से व्यवहार किए गए सिस्टम में, लेखन तब भी होगा जब आलसी लेखक को अन्य पृष्ठों के लिए जगह बनाने के लिए बफर पूल से पृष्ठों को फ्लश करने की आवश्यकता होती है।
एक चेकपॉइंट केवल tempdb के लिए किया जाता है जब tempdb लॉग फ़ाइल 70% तक पहुँच जाती है - यह tempdb लॉग को बढ़ने से रोकने के लिए है यदि संभव हो तो (ध्यान दें कि लंबे समय तक चलने वाला लेन-देन अभी भी अनिवार्य रूप से लॉग बंधक को पकड़ सकता है और इसे साफ़ करने से रोक सकता है। , उपयोगकर्ता डेटाबेस में पसंद है)।
लेकिन डिस्क में टेम्पर्डड को फ्लश करने की कोई आवश्यकता नहीं है, क्योंकि टेम्पर्ड पर कभी भी क्रैश रिकवरी नहीं होती है, इसे हमेशा स्टार्टअप पर रीक्रिएट किया जाता है।
दुर्घटना की स्थिति में टेंपडीब बरामद नहीं किया जाता है, और इसलिए गंदे टेम्पपेड पृष्ठों को डिस्क पर लगाने की आवश्यकता नहीं होती है, सिवाय उस स्थिति के जहां आलसी लेखक प्रक्रिया (बफर पूल का हिस्सा) को अन्य डेटाबेस के लिए पृष्ठों के लिए जगह बनाना पड़ता है।
यह उल्लेखनीय रूप से (यह मेरे लिए आश्चर्य की बात थी) एकमात्र ऐसा तंत्र है जिसके द्वारा टेम्पपेड पृष्ठों को डिस्क पर लिखा जाएगा। यदि बफ़र पूल दबाव है, तो tempdb पेज डिस्क में फ्लश किए जा सकते हैं। अगर वहाँ नहीं है, यह नहीं होना चाहिए।
संपादित करें: डिबेटेबल चाहे "बुरी तरह से व्यवहार किया गया" उपयोगकर्ता डेटाबेस के लिए एक उपयुक्त विवरण है जो चेकपॉइंट के बाहर पृष्ठ लिख रहा है। असामान्य, असामान्य, या सिर्फ आदर्श नहीं हो सकता है?
अतिरिक्त संपादन (निम्न टिप्पणियाँ (@PaulWhite के साथ चैट करें):
ऊपर चमकती चूक यह है कि अस्थायी टेबल टेम्पर्ड ट्रैफिक का एकमात्र स्रोत नहीं हैं। अंडरस्टैंडिंग हैश, सॉर्ट एंड एक्सचेंज स्पिल इवेंट्स से उद्धरण :
कुछ SQL सर्वर क्वेरी निष्पादन संचालन मध्यवर्ती मेमोरी के रूप में (कुछ) बड़ी मात्रा में मेमोरी का उपयोग करके सर्वश्रेष्ठ प्रदर्शन करने के लिए कैलिब्रेट किए जाते हैं। क्वेरी ऑप्टिमाइज़र एक योजना का चयन करेगा और इस मेमोरी स्क्रैच-पैड का उपयोग करके इन ऑपरेटरों पर आधारित लागत का अनुमान लगाएगा। लेकिन यह निश्चित रूप से, केवल एक अनुमान है। निष्पादन पर अनुमान गलत साबित हो सकते हैं और पर्याप्त मेमोरी नहीं होने के बावजूद योजना जारी रखनी चाहिए। ऐसी घटना में, ये ऑपरेटर डिस्क पर फैल जाते हैं।
मैंने गलत तरीके से मान लिया था कि एक स्पिल ऑपरेशन के लिए एक शारीरिक लिखने के पीछे का तंत्र ठीक उसी तरह था जैसा पहले बताया गया था। लेज़राइटर ने टेंपर्ड पूल (दबाव के कारण) पर दबाव के परिणामस्वरूप डिस्क को टेम्पर्ड पेज बनाने के लिए मजबूर किया था।
@PaWWite ने बताया कि मैं कहां गलत था (धन्यवाद पॉल!):
मुझे लगता है कि आप पूछ रहे हैं कि जब कोई क्वेरी अपने कार्यक्षेत्र मेमोरी अनुदान से अधिक हो जाती है, तो केवल टेम्पर्डब-इन-मेमोरी का उपयोग करने के बजाय, यदि यह ऐसा होता है, तो क्वेरी अपने अनुदान से अधिक मेमोरी का उपयोग कर रही होगी, स्मृति को सीमित करने के बिंदु को हरा देती है। पहली जगह में अनुदान।
स्पिल वास्तव में भंडारण के माध्यम से लेखन में विशेष हैं। शारीरिक टेंपडब गतिविधि एक स्पिल पर देखी जाती है, यहां तक कि फ्री मेमोरी के ऑडल्स और टेम्पर्डब पर शून्य दबाव भी।
पॉल ने मुझे अपने ब्लॉग पोस्ट एडवांस्ड TSQL ट्यूनिंग की ओर भी इशारा किया : क्यों इंटर्न नॉलेज मैटर्स जिसमें स्पिल्ट को प्रदर्शित करने के लिए उदाहरण स्क्रिप्ट शामिल हैं, उन लोगों के लिए जो अधिक गहरा करना चाहते हैं।