2008-11-10 14 views
22

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

लॉग इन और लॉगआउट घटनाओं जा सर्वर पर नहीं उठाया जाएगा, जब एक कनेक्शन से प्राप्त की है या में लौटे कनेक्शन पूल ऐसा इसलिए है क्योंकि कनेक्शन वास्तव में बंद नहीं होता है जब यह कनेक्शन पूल में वापस कर दिया जाता है। अधिक जानकारी के लिए, ऑडिट लॉग इन इवेंट क्लास और ऑडिट लॉगआउट इवेंट SQL सर्वर पुस्तकें ऑनलाइन में कक्षा देखें।

http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

इसके अलावा, किसी को भी निर्धारित करने कितना प्रभावी कनेक्शन पूलिंग एक दिया एसक्यूएल सर्वर के लिए है के लिए कोई सुझाव है? मेरे पास एक सर्वर पर बहुत सारे डेटाबेस हैं और मुझे पता है कि इसका एक बड़ा प्रभाव हो सकता है, लेकिन मुझे आश्चर्य है कि मेरे कनेक्शन पूलिंग की प्रभावशीलता पर मीट्रिक प्राप्त करने का कोई आसान तरीका है या नहीं। अग्रिम में धन्यवाद!

उत्तर

14

याद रखें कि कनेक्शन प्रति कनेक्शनस्ट्रिंग द्वारा पूल किए जाते हैं। यदि आपके पास कई डेटाबेस हैं और कई कनेक्शनस्ट्रिंग का उपयोग करके कनेक्ट हैं, तो आपका ऐप एक नया कनेक्शन बनाएगा जब सही कनेक्शनस्ट्रिंग के साथ कोई भी मौजूद न हो। फिर यह उस कनेक्शन को पूल करेगा और यदि पूल भरा हुआ है, तो मौजूदा कनेक्शन को टक्कर दें। डिफ़ॉल्ट Max Pool Size 100 कनेक्शन है, इसलिए यदि आप नियमित रूप से 100 से अधिक डेटाबेस के माध्यम से उछाल रहे हैं, तो आप हर समय कनेक्शन बंद और खोलेंगे।

यह आदर्श नहीं है, लेकिन आप हमेशा एक डेटाबेस (एक कनेक्शन स्ट्रिंग) से कनेक्ट करके समस्या का समाधान कर सकते हैं और फिर डीबी संदर्भ 'उपयोग [डीबीएनएएम]' स्विच कर सकते हैं। कमियां हैं:

  • आप उपयोगकर्ता/पास प्रति कनेक्शन स्ट्रिंग निर्दिष्ट करने की क्षमता खो देते हैं (आपके ऐप उपयोगकर्ता को सभी डेटाबेस की अनुमति की आवश्यकता होती है)।
  • आपका एसक्यूएल अधिक जटिल हो जाता है (विशेष रूप से यदि आप आउट ऑफ़ द बॉक्स ओआरएम या संग्रहीत प्रोसेस का उपयोग कर रहे हैं)।

यदि आपका डेटाबेस गिनती बड़ी नहीं है तो आप अधिकतम पूल आकार बढ़ाने के साथ प्रयोग कर सकते हैं। अन्यथा, यदि कुछ डेटाबेस अक्सर उपयोग नहीं किए जाते हैं, जबकि अन्य नहीं होते हैं, तो आप कमजोर डीबीएस पर पूलिंग बंद कर सकते हैं। दोनों आइटम connectionstring के माध्यम से कॉन्फ़िगर किए गए हैं।

मेट्रिक्स तक, SQL सर्वर पर लॉगिन और लॉगआउट ईवेंट की निगरानी करना एक अच्छी शुरुआत है। यदि आपका ऐप अच्छी तरह से पूल कर रहा है तो आपको उनमें से बहुत कुछ नहीं देखना चाहिए।

+0

यह मेरे लिए बहुत स्पष्ट किया गया। धन्यवाद। हो सकता है कि आप इस के साथ मेरी मदद कर सकें: ऐप के बीच पूल पूल कनेक्शन को अधिकतम पूल आकार बनाते समय एक अपवाद फेंकने के बीच क्या अंतर है कि "अधिकतम पूल आकार तक पहुंच गया"? – motto

+0

@motto - कनेक्शन बंद होने पर आपको "अधिकतम पूल आकार ..." अपवाद दिखाई देगा। यहां तक ​​कि पूल के साथ, आपको पूल में लौटने के लिए कनेक्शन बंद करना होगा। एक अपवाद आपके को रोक सकता है। अगर कॉल "अंत में" या "उपयोग" ब्लॉक में नहीं है, तो कॉल से कॉल करें: http://blogs.msdn.com/tolong/archive/2006/11/21/max-pool-size- था-reached.aspx। याद रखें कि कुछ कमांड या एडाप्टर कॉल एक अंतर्निहित कनेक्शन का उपयोग करते हैं और साथ ही सुरक्षित रूप से बंद होने की आवश्यकता होती है। इसके अलावा, लूप में डीबी ऑब्जेक्ट सृजन से सावधान रहें। –

+3

मैं यह भी जोड़ूंगा कि "exec sp_reset_connection" निष्पादित करते समय LOGIN/LOGOUT ऑडिट ईवेंट निष्पादित किए जाते हैं, भले ही कनेक्शन वास्तव में डिस्कनेक्ट नहीं किया गया हो। – Martin

30

MSDN लेख का कहना है कि घटना केवल गैर पुन: उपयोग किया कनेक्शन के लिए बढ़ा दी जाएगी, एसक्यूएल सर्वर प्रलेखन इस बयान के विपरीत है:

"ऑडिट लॉग घटना वर्ग इंगित करता है कि एक उपयोगकर्ता को सफलतापूर्वक माइक्रोसॉफ्ट में लॉग इन किया है एसक्यूएल सर्वर। इस वर्ग में घटनाओं को नए कनेक्शन या कनेक्शन कनेक्शन से पुन: उपयोग किए जाने वाले कनेक्शन द्वारा निकाल दिया जाता है। "

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

यदि आप ऑडिट लॉगऑन ईवेंट को ट्रैक करना चाहते हैं, तो आप EventSubClass डेटा कॉलम का उपयोग कर सकते हैं कि लॉगिन एक पुन: उपयोग कनेक्शन या नया कनेक्शन है या नहीं। मान वास्तविक कनेक्शन के लिए 1 होगा और पूल से एक पुन: उपयोग कनेक्शन के लिए 2 होगा। आवेदन।

+0

जब मैं एक एसक्यूएल प्रोफाइलर ट्रेस बनाता हूं तो EventSubClass कॉलम ऑडिट लॉगिन और ऑडिट लॉगआउट ईवेंट के लिए प्रकट नहीं होता है .... किसी को भी पता है क्यों? – Rory

+2

ट्रेस सेट करते समय एक चेकबॉक्स "सभी कॉलम दिखाएं" है, फिर EventSubClass ऑडिट लॉग और ऑडिट लॉगआउट ईवेंट दोनों पर एक विकल्प बन जाता है। –

+0

rotary_engine: आप एसएसएमएस और एसक्यूएल सर्वर का किस संस्करण का उपयोग कर रहे हैं? मैं कॉलम EventSubClass देख सकता हूं, लेकिन यह "ऑडिट लॉगिन" का विकल्प नहीं है। धन्यवाद – motto

संबंधित मुद्दे