क्या मैं फूला हुआ सिस्टम टेबल्स पर प्रदर्शन में सुधार कर सकता हूं?


12

पृष्ठभूमि:
मेरे पास कई डेटाबेस हैं जिनमें बड़ी संख्या में व्यू हैं, और SYNONYM की बहुत बड़ी संख्या है। उदाहरण के लिए, एक db में 10k से अधिक व्यू और 2+ मिलियन SYNONYM है।

सामान्य समस्या:
इसमें शामिल क्वेरीज़ sys.objects(और सामान्य रूप से सिस्टम टेबल) धीमी गति से होती हैं। शामिल क्वेरीज़ sys.synonymsहिमनद हैं। मैं सोच रहा हूं कि प्रदर्शन को बेहतर बनाने के लिए मैं क्या कर सकता हूं।

विशिष्ट उदाहरण
यह कमांड थर्ड पार्टी टूल द्वारा चलाया जाता है। यह ऐप और एसएसएमएस दोनों में धीमा है:

exec sp_tables_rowset;2 NULL,NULL

मेरा प्रश्न :
मैं इसे कैसे तेज़ बना सकता हूँ?

मैंने क्या प्रयास किया है :
अगर मुझे SET STATISTICS IO ONयह आउटपुट मिलता है:

(2201538 पंक्ति) प्रभावित
'तालिका' sysobjrdb '। स्कैन काउंट 1, लॉजिकल रीड 28, फिजिकल
रीड्स 0, रीड- फॉरवर्ड रीड्स 0, लॉब लॉजिकल रीड्स 0, लॉब फिजिकल रीड्स 0, लॉब रीड- फॉरवर्ड रीड्स 0. टेबल 'sysschobjs'। स्कैन काउंट 1, लॉजिकल रीड 53926, फिजिकल रीड्स 0, रीड-फॉरवर्ड रीड्स 0, लॉब लॉजिकल रीड्स 0, लॉब फिजिकल रीड्स 0, लॉब रीड-फॉरवर्ड रीड्स 0।

मैं अंतर्निहित सिस्टम तालिकाओं पर आंकड़े अपडेट करने में सक्षम रहा हूं। यह मेरी SQL 2008 R2 या नए वातावरण में काम किया है:

UPDATE STATISTICS sys.sysobjrdb WITH FULLSCAN
UPDATE STATISTICS sys.sysschobjs WITH FULLSCAN

मैं इंडेक्स मेंटेनेंस करने में भी सक्षम हूं। यह मेरी SQL 2012 या नए वातावरण में काम करता है। उदाहरण के लिए, रनिंग sp_help 'sys.sysschobjs'टेबल पर इंडेक्स को पहचानती है, और वहां से मैं ये कमांड बनाता और चलाता हूं:

ALTER INDEX clst ON sys.sysschobjs REORGANIZE
ALTER INDEX nc1 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc2 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc3 ON sys.sysschobjs REORGANIZE

आँकड़े अद्यतन करना और अनुक्रमणिका को पुनर्गठित करना मदद करता है, लेकिन बहुत अधिक नहीं।


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

2
बहु किरायेदार? दरअसल नहीं। यह नहीं है। बहुत गड़बड़ है, है ना? एफडब्ल्यूआईडब्ल्यू, यह मेरी समझ है कि प्रत्येक एप्लिकेशन उपयोगकर्ता के लिए, प्रत्येक तालिका के लिए 5 SYNONYMs बनाए गए हैं। मैं भाग्यशाली हूँ।
डेव मेसन

क्या उन वस्तुओं में से कुछ को हटाने से प्रदर्शन में वृद्धि होती है (ताकि संभावित उपयोग करने के लिए उनमें से कम है?) मुझे नहीं पता कि क्या उपयोगकर्ता के स्तर पर भी एक विकल्प है।
कॉन्स्टेंटाइनके

इस पर एक निष्पादन योजना देखना दिलचस्प होगा। हो सकता है कि आप sql संतरी योजना अन्वेषक से answer.sqlperformance.com और उससे लिंक करने के लिए एक पोस्ट कर सकते हैं , जब तक कि यह यहाँ भी एम्बेड करने का कोई तरीका नहीं है। मैं इसे देखने में दिलचस्प हूँ
शेल्डन

जवाबों:


1

यदि आपने पहले से ऐसा नहीं किया है, तो आप प्राथमिक डेटा फ़ाइल को शेष डेटा से स्पिंडल के एक अलग सेट में ले जाकर प्रदर्शन प्राप्त कर सकते हैं (केवल फाइल और फाइलग्रुप आर्किटेक्चर और एसक्यूएल सर्वर देखें: सिस्टम टेबल के लिए फाइलग्रुप? )।


मुझे लगता है कि यह ध्वनि सलाह है, हालांकि, यह बहुत प्रभावित करने पर नकारात्मक होगा यदि IO सेटअप संलग्न डिस्क के साथ एक मानक भौतिक सर्वर नहीं है, उदाहरण के लिए SAN के साथ आभासी उदाहरण, या SSD ड्राइव प्राथमिक वीडियो फ़ाइलों को अलग करने के ध्यान देने योग्य प्रभाव को कम करेगा एक अलग स्थान पर, है ना?
शेल्डन

1
यदि आपके पास हार्डवेयर का नियंत्रण है (यानी आप किसी तीसरे पक्ष द्वारा होस्ट नहीं किए जा रहे हैं), तो आपके पास सैन में स्पिंडल के विभिन्न सेट हो सकते हैं (जैसे दो या अधिक अलग-अलग RAID-10 वॉल्यूम)। यदि आप SSDs के साथ उपयोग (या होस्ट) कर रहे हैं, तो कोई स्पिंडल नहीं हैं, और IO मुख्य रूप से ड्राइव और मदरबोर्ड (यानी SATA, RAID, या NIC कार्ड, केबलिंग, राउटर / स्विच) के बीच की अड़चन द्वारा सीमित होगा। , SAN, SSDs गति), तो आप उस मामले में फ़ाइलों को अलग करके कुछ भी हासिल नहीं करेंगे।
जिग्गी क्रुएल्टीफ्री ज़ेतिगेस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.