एक ओर, यह अच्छा है कि आपने एक नया प्रश्न खोला है। लेकिन दूसरी ओर, एक प्रश्न को निकालने और यह पूछने पर कि क्या यह तेजी से प्रदर्शन करता है, पिछले प्रश्न का संदर्भ खो देता है, नया प्रश्न बहुत अलग है। जैसा कि मुझे यकीन है कि आप जानते हैं, डेटाबेस का प्रबंधन, संसाधनों का प्रबंधन (मेमोरी/कैश, डिस्क, सीपीयू चक्र), उन संसाधनों का उपयोग करने वाले कोड (अच्छे या खराब) का प्रबंधन, सभी पूरी तस्वीर का हिस्सा हैं। प्रदर्शन एक व्यापारिक खेल है, कुछ भी मुफ़्त नहीं है।
-
मेरे पास सबसे महत्वपूर्ण मुद्दा एंडडेट कॉलम का दोहराव था, जिसे आसानी से प्राप्त किया जा सकता है। डुप्लिकेट किए गए कॉलम अपडेट विसंगतियों के बराबर होते हैं। स्मिरकिंगमैन ने क्लासिक उदाहरण प्रदान किया है:कुछ प्रश्नों को एक परिणाम मिलेगा और अन्य प्रश्नों को दूसरा मिलेगा। यह केवल स्वीकार्य नहीं है बड़े संगठन हैं; या बैंकों में (कम से कम विकसित देशों में) जहां डेटा का ऑडिट और संरक्षण किया जाता है। आपने सामान्यीकरण के एक बुनियादी नियम को तोड़ा है, और इसके लिए दंड का भुगतान करना होगा।
-
अद्यतन विसंगतियाँ; दो संस्करण (पहले से ही विस्तृत)। ऑडिटर सिस्टम पास नहीं कर सकते हैं।
-
तालिका का आकार
किसी भी बड़ी तालिका में यह एक समस्या है, और विशेष रूप से समय श्रृंखला या अस्थायी डेटा में, जहां स्तंभों की संख्या कम होती है, और पंक्तियों की संख्या बहुत अधिक होती है। तो क्या, कुछ लोग कहेंगे, डिस्क स्थान सस्ता है। हाँ, एसटीडी भी हैं। महत्वपूर्ण यह है कि इसका उपयोग किस लिए किया जाता है, और कोई इसकी देखभाल कितनी अच्छी तरह करता है।-
डिस्क स्थान
पीसी पर सस्ता हो सकता है, लेकिन उत्पादन सर्वर में ऐसा नहीं है। मूल रूप से आपने पंक्ति आकार में 62% जोड़ा है (13 जमा 8 बराबर 21) और इसलिए तालिका का आकार। बैंक में मुझे वर्तमान में सौंपा गया है, प्रत्येक विभाग जो डेटा का मालिक है, उससे निम्नानुसार शुल्क लिया जाता है, सैन-आधारित भंडारण सब कुछ है। आंकड़े प्रति जीबी प्रति माह के लिए हैं (यह एक उच्च अंत ऑस्ट्रेलियाई बैंक नहीं है):RAID5 अनमिरर के लिए $1.05(हम जानते हैं कि यह धीमा है, लेकिन यह सस्ता है, बस इस पर महत्वपूर्ण जानकारी न डालें, क्योंकि अगर यह टूट जाता है, तो नई डिस्क के गर्म या ठंडे-स्वैप होने के बाद, इसमें कई दिन लगते हैं इसे खुद को फिर से सिंक करने के लिए।)
RAID5 मिरर के लिए $2.10
सैन में, यानी।RAID1+0 के लिए $4.40
उत्पादन डेटा के लिए न्यूनतम, लेन-देन लॉग का बैकअप, और रात्रिकालीन डेटाबेस डंप।RAID1+0 के लिए $9.80 प्रतिकृति
एक समान SAN लेआउट के लिए दूसरे, बम प्रूफ, साइट पर। उत्पादन में कटौती मिनटों में; लगभग शून्य लेनदेन हानि। -
मेमोरी/कैश
ठीक है, Oracle के पास यह नहीं है लेकिन गंभीर बैंकिंग dbs में कैश होता है, और वे प्रबंधित होते हैं। किसी भी विशिष्ट कैश आकार को देखते हुए, केवल 62% पंक्तियाँ समान कैश आकार में फ़िट होंगी। -
तार्किक और भौतिक I/O
जिसका अर्थ है तालिका को पढ़ने के लिए 50% अधिक I/O; कैश और डिस्क में स्ट्रीमिंग दोनों पढ़ता है।
-
-
-
इसलिए, प्रश्न अलगाव में बेहतर या खराब प्रदर्शन करता है या नहीं, यह एक अकादमिक मुद्दा है। उपरोक्त के संदर्भ में, तालिका धीमा है, और हर एक्सेस पर, हर समय, 62% खराब प्रदर्शन कर रहा है। और यह सर्वर पर हर दूसरे उपयोगकर्ता को प्रभावित कर रहा है। अधिकांश डीबीए परवाह नहीं करेंगे (मैं निश्चित रूप से नहीं करूंगा) अगर सबक्वेरी फॉर्म आधी गति से प्रदर्शन करता है, क्योंकि उनका बोनस ऑडिट स्वीकृति से जुड़ा है, न कि केवल कोड प्रदर्शन से।
-
इसके अलावा, अद्यतन विसंगतियों के कारण कभी भी कोड पर दोबारा न जाने और लेन-देन को ठीक करने का अतिरिक्त लाभ है।
-
और लेन-देन में अद्यतन करने के लिए कम अंक होते हैं, इसलिए वे छोटे होते हैं; कम अवरुद्ध ताले, आदि।
-
-
सहमत हूं, टिप्पणियों में वह चर्चा कठिन है। मेरे उत्तर में, मैंने दो उपश्रेणियों को विस्तृत और समझाया है। एक गलतफहमी थी:आप इस सबक्वेरी के बारे में बात कर रहे थे (WHERE क्लॉज में, एक टेबल सबक्वेरी ) और मैं अन्य सबक्वेरी के बारे में बात कर रहा था (कॉलम सूची में, एक स्केलर सबक्वेरी ) जब मैंने कहा कि यह तेज़ या तेज़ प्रदर्शन करता है। अब जब इसे साफ़ कर दिया गया है, तो मैं यह नहीं कह सकता कि ऊपर की पहली क्वेरी (WHERE क्लॉज में सबक्वेरी, एक टेबल) दूसरी क्वेरी (डुप्लिकेट कॉलम के साथ) जितनी तेजी से प्रदर्शन करेगी; पहले को 3 स्कैन करने होते हैं, जबकि दूसरा केवल 2 स्कैन करता है। (मैं कहने की हिम्मत करता हूं कि दूसरा टेबल स्कैन करेगा।)
मुद्दा यह है कि अलगाव के मुद्दे के अलावा, यह उचित तुलना नहीं है, मैंने स्केलर सबक्वायरीज़ के बारे में टिप्पणी की है। मैं यह सुझाव नहीं दूंगा कि 3-स्कैन क्वेरी 2-स्कैन क्वेरी की तुलना में तेज़ या तेज़ है।
3-स्कैन टेबल सबक्वेरी (जो मैं यहां उद्धृत करता हूं) के बारे में मैंने जो बयान दिया है, उसे पूर्ण संदर्भ में लिया जाना चाहिए (या तो वह पोस्ट पूरी तरह से, या ऊपर)। मैं इससे पीछे नहीं हट रहा हूं।
मैं अपना आधा जीवन डुप्लिकेट कॉलम जैसे अवैध विकल्पों को हटाने में बिताता हूं, जो प्रदर्शन के मुद्दे पर आधारित हैं, रचनाकारों ने मंत्र का जाप करते हुए तालिका धीमी है, इसलिए उन्होंने "प्रदर्शन के लिए विकृत" किया है। परिणाम, मेरे शुरू करने से पहले अनुमान लगाया जा सकता है, आधे आकार की एक तालिका है, जो समग्र से दोगुना तेज़ प्रदर्शन करती है . टाइम्स सीरीज़ यहां सबसे आम प्रश्न है (किसी अन्य प्रश्न का लिंक लिंक; जो दूसरे से लिंक करता है), लेकिन बैंकिंग डेटाबेस में समस्या की कल्पना करें:दैनिक
OpeningExposure
औरClosingExposure
प्रतिSecurity
प्रतिHolding
प्रतिUnitTrust
प्रतिPortfolio
। -
लेकिन मुझे एक ऐसे प्रश्न का उत्तर देना चाहिए जो अभी तक नहीं पूछा गया है। आंतरिक विकास टीमों के साथ काम करते समय इस प्रकार की बातचीत सामान्य है, असामान्य नहीं है; यह महीने में कम से कम एक बार आता है। एक क्रैश हॉट डेवलपर ने पहले से ही अपने कोड को लिखा और परीक्षण किया है, एक डुप्लिकेट कॉलम वाली तालिका का उपयोग करके, यह उड़ जाता है, और अब यह रुक गया है क्योंकि मैं इसे डीबी में नहीं डालूंगा।
नहीं, मैं इसका पूरे सिस्टम के संदर्भ में परीक्षण करूंगा और:
-
आधा समय, तालिका एंडडेट कॉलम के बिना चली जाती है क्योंकि अब एक सेकंड में आधे सेकंड की क्वेरी के बारे में कोई बड़ी बात नहीं है।
-
दूसरे आधे समय में, [टेबल सबक्वेरी] प्रदर्शन स्वीकार्य नहीं है, इसलिए मैं
IsCurrent
की पहचान करने के लिए एक बूलियन (बिट) संकेतक लागू करता हूं . यह डुप्लीकेट कॉलम से काफी बेहतर है, और 2-स्कैन गति प्रदान करता है। -
एक लाख वर्षों में नहीं तुम मुझे एक कॉलम की नकल करवाओगे; तालिका के आकार में 62% जोड़ना; तालिका को धीमा करना पूर्ण बहु-उपयोगकर्ता संदर्भ में 62% से; और एक लेखापरीक्षा में विफल होने का जोखिम। और मैं कर्मचारी नहीं हूं, मुझे बोनस नहीं मिलता है।
अब यह परीक्षण के लायक होगा:डुप्लीकेट कॉलम वाली क्वेरी बनाम
IsCurrent
वाली क्वेरी संकेतक, समग्र संसाधन उपयोग के पूर्ण संदर्भ में। -
-
स्मिरकिंगमैन ने एक अच्छा मुद्दा उठाया है। और मैं इसे स्पष्ट रूप से दोहराऊंगा, ताकि यह खंडित न हो और फिर एक या दूसरे टुकड़े पर हमला हो। कृपया इसे न तोड़ें:
एक रिलेशनल डेटाबेस,
एक अनुभवी रिलेशनल मॉडेलर द्वारा सामान्य, सही पांचवें सामान्य फॉर्म के लिए
(कोई अद्यतन विसंगति नहीं; कोई डुप्लीकेट कॉलम नहीं),
पूर्ण संबंधपरक अनुपालन के साथ
(IDEF1X, विशेष रूप सेId
. को कम करने से संबंधित है प्राथमिक कुंजी; और इस प्रकार रिलेशनल इंजन की शक्ति को अपंग नहीं करना)
परिणामस्वरूप अधिक, छोटी तालिकाएं, एक छोटा डेटाबेस,
कम सूचकांकों के साथ,
कम जुड़ाव की आवश्यकता होगी
(यह सही है, अधिक टेबल लेकिन कम जुड़ते हैं),
और यह उन नियमों को तोड़ने वाली किसी भी चीज़ से बेहतर प्रदर्शन करेगा
उसी हार्डवेयर और उद्यम पर डीबी मंच
(फ्रीवेयर, एमएस, ऑरेकल को छोड़कर, लेकिन इसे अपने आप पर हावी न होने दें),
उत्पादन OLTP उपयोग के पूर्ण संदर्भ में
परिमाण के कम से कम एक क्रम से,
और इसका उपयोग करना बहुत आसान हो जाएगा
और बदलना
(कभी भी "रिफैक्टरिंग" की आवश्यकता नहीं है)।मैंने इसे कम से कम 80 बार किया है। परिमाण के दो क्रम असामान्य नहीं हैं, अगर मैं इसे स्वयं करता हूं, बजाय इसके कि किसी और को इसे करने के लिए ढांचा प्रदान किया जाए।
न तो मैं, न ही वे लोग जिनके साथ मैं काम करता हूं या जो मुझे भुगतान करते हैं, इस बात की परवाह करते हैं कि एक प्रश्न अलगाव में क्या करेगा।