मेरे पास कोड का एक टुकड़ा है जो आवेषण को अत्यधिक असामान्य तालिकाओं में करता है। तालिकाओं में स्तंभों की संख्या ~ 100 से 300+ तक होती है। यह SQL Server 2008 R2 है, जो Windows Server 2008 पर चल रहा है।
प्रत्येक इंसर्ट में एक ही ट्रांजेक्शन के तहत कई टेबल्स सम्मिलित की जाती हैं। कुछ आवेषण NHibernate द्वारा बैच किए जाते हैं, लेकिन कुछ नहीं हो सकते हैं, लेकिन वे सभी समान लेनदेन के तहत हैं।
जब मैं बार-बार कोड डालने वाले कोड को कॉल करके 500 बार कहने के लिए आवेषण करता हूं, तो मुझे औसतन ~ 360 एमएस मिलता है।
अजीब सा है, जब मैं एक साथ 4 प्रक्रियाओं (विंडोज़ सर्वर 2008 के तहत 4 अलग-अलग कमांड प्रॉम्प्ट से एक ही exe रन) का उपयोग करके परीक्षण कोड चलाता हूं, तो प्रति कॉल प्रविष्टि का प्रदर्शन बहुत बेहतर हो जाता है। मैं फटने को देखता हूं जो 90 एमएस के रूप में तेजी से जाता है (लगभग X4 तेज)। मैं कोड से प्रविष्टि समय को माप रहा हूं।
चूंकि 4 प्रक्रियाएं एक-दूसरे के बारे में कुछ नहीं जानती हैं, इसलिए मैं यह मान रहा हूं कि इसका SQL सर्वर के साथ कुछ लेना-देना है, लेकिन मेरे पास कोई सुराग नहीं है। मैं जानना चाहता हूं कि ऐसा क्यों हो रहा है और यदि कोई कॉन्फ़िगरेशन है जो मुझे आवेषण नहीं होने पर उसी प्रदर्शन को प्राप्त करने की अनुमति देगा।
डीबी स्तर पर क्या हो रहा है यह समझने के लिए SQL सर्वर निगरानी विधियों के बारे में सुझाव समान रूप से स्वागत करते हैं।