Concurrency in SQL Server 2008 -
एक संग्रहीत कार्यविधि है:
सृजित प्रक्रिया [dbo]। [TestProc] AS शुरू से ही सेट करें; तालिका # थिस्टेबल (छुटकारा हुआ चार (32)) # थिस्टेबल (रिक्त) में डालें एटीआरआईडी को टीएलसीडीबीए 0 से (एनओलोक) के साथ चुनें
जब प्रक्रिया अकेले क्रियान्वित होती है तो यह 400-500 एमएस , लेकिन जब 10 थ्रेड समान प्रक्रिया को समानांतर में क्रियान्वित कर रहे हैं, तो पहले धागा 1300 एमएस में खत्म हो गया है, अंतिम - 6000 एमएस में और औसत 4800 एमएस है। जैसा कि आप देख सकते हैं कि कोई लॉकिंग नहीं है, जहां थ्रेड्स की प्रतीक्षा होती है जब दूसरे खत्म करने के लिए निष्पादित होते हैं। इसके अलावा, सर्वर सीपीयू कम से कम 100% पर लोड होता है, अर्थात एक ही समय में उन्हें निष्पादित करने के लिए पर्याप्त संसाधन हैं। यह कैसे हो सकता है?
संपादित करें: समवर्ती आवेषण के बारे में एक अच्छा लेख मिला:
शुरू करने के लिए, सीपीयू डेटाबेस में एकमात्र संसाधन नहीं है जो प्रश्न आपने #temp तालिका में tempdb में सम्मिलित किया है, जिसमें संसाधनों की आवश्यकता होगी जैसे:
- tempdb SGAM / GAM आवंटन।
- tempdb लॉग
- बफर पूल
- tempdb IO
इसलिए यदि आपके पास एक थ्रेड के लिए 400-500 एमएस है और 6 धागा 6000 एमएस में समाप्त होता है, तो मुझे आश्चर्य नहीं होता है आप 10 गुना अधिक काम (10 गुना अधिक IO डिस्क पर उन #temp टेबल लिखने के लिए) का अनुरोध करते हैं, इसलिए 4000-5000 एमएस अपेक्षित हैं। अतिरिक्त 1000 एमएस विवाद से हो सकता है (उसी संसाधन के लिए प्रतिस्पर्धा कर रहे धागे)।
अंततः, आपको यह पता लगाने की आवश्यकता है कि समय कहाँ बिताया गया है, इस मुद्दे का विश्लेषण करने के लिए एक अच्छी कार्यप्रणाली देखें।
Comments
Post a Comment