2013-02-04 11 views
22

मैं एमवीसी मिनीप्रोफाइलर के परिणामों को एक एसक्यूएल सर्वर डेटाबेस में सहेजना चाहता हूं। मैं एक कठिन प्रदर्शन समस्या को खोजने के लिए एक उच्च लोड एमवीसी 4 पेज प्रोफाइल करता हूं जो हमारे परीक्षण या विकास प्रणाली पर पुन: उत्पन्न नहीं होता है और केवल उत्पादन सर्वर पर स्पोरैडिक होता है।एमवीसी मिनीप्रोफाइलर परिणाम कैसे स्टोर करें

मिनी प्रोफाइलर में हुक करने का सबसे अच्छा तरीका क्या है? क्या ऐसा करने के लिए कोई मौजूदा विस्तार है?

+0

मुझे मिनी प्रोफाइलर स्रोतों में आईएसटीओएस इंटरफ़ेस मिला, लेकिन ऐसा लगता है कि यह बहुत अच्छी तरह से प्रलेखित नहीं है। – NickD

उत्तर

35

मैं एसक्यूएल एज़ूर में परिणामों को सहेजने के लिए बस MiniProfiler स्थापित कर रहा हूं, यह काफी आसान है। here वर्णित सभी तारों की देखभाल करने के लिए हम MiniProfiler.MVC3 का उपयोग कर रहे हैं। ताकि आप उस का उपयोग कर सकते

तालिका बनाने स्क्रिप्ट SqlServerStorage.TableCreationScript स्थिर क्षेत्र के साथ विधानसभा में अंतर्निहित है, है, लेकिन कोड की खुदाई करते समय मैंने पाया नवीनतम विकास शाखा कुछ अनुक्रमित जोड़कर थोड़ा स्क्रिप्ट में इजाफा किया है। तालिका संरचना अन्यथा अपरिवर्तित है, इसलिए यह अभी भी nuget पर उपलब्ध नवीनतम पैकेज के साथ काम करता है।

नवीनतम तालिका में here is direct link लिखने के समय स्क्रिप्ट बनाएं।

के बाद केवल एक चीज आपको बस इतना करना सेट अप MiniProfiler कोड की एक पंक्ति के साथ एसक्यूएल उपयोग करने के लिए है कि:

MiniProfiler.Settings.Storage = new SqlServerStorage("<your connection string>"); 

आप एसक्यूएल Azure उपयोग नहीं कर रहे हैं, तो यह है कि यह है, लेकिन मैं एक पाया मुद्दा जब हमने Azure में इसका उपयोग करने की कोशिश की। मैं निम्न अपवाद प्राप्त (आप ELMAH धन्यवाद) जब बचाने की कोशिश की रूपरेखा:

System.Data.SqlClient.SqlException

टेबल्स संकुल अनुक्रमणिका बिना एसक्यूएल सर्वर के इस संस्करण में समर्थित नहीं हैं। कृपया क्लस्टर्ड इंडेक्स बनाएं और पुनः प्रयास करें।

इसे हल करने के लिए मुझे MiniProfilers तालिका में एक अतिरिक्त (अप्रयुक्त) कॉलम जोड़ना पड़ा। यहाँ प्रश्न में तालिका बनाने के स्क्रिप्ट की शुरुआत है:

create table MiniProfilers 
(
    RowId integer not null identity constraint PK_MiniProfilers primary key clustered, -- Need a clustered primary key for SQL azure 
    Id uniqueidentifier not null, 
    Name nvarchar(200) not null, 

और चूंकि Guid आईडी स्तंभ नहीं रह गया है प्राथमिक कुंजी था, मैं यह सुनिश्चित करने के लिए एक अतिरिक्त सूचकांक जोड़ा लुकअप अभी भी तेजी से कर रहे हैं:

create unique nonclustered index IX_MiniProfilers_Id on MiniProfilers (Id) 

उम्मीद है कि मदद करता है।


अद्यतन

एसक्यूएल Azure समर्थन करने के लिए परिवर्तन एक Pull Request के रूप में प्रदान की है और स्वीकार किया गया है। धन्यवाद Jarrod

+0

उत्कृष्ट जवाब! –

+1

धन्यवाद !!! btw। क्या मैं प्रोफाइलर के प्रदर्शन को अक्षम कर सकता हूं? – NickD

+1

@ स्नोपी हां, [प्रारंभ में प्रोफाइलर परिणामों को छिपाने की क्षमता] (https://github.com/SamSaffron/MiniProfiler/commit/85609b6226eff71ac21dfa990dd1fa54aace237f) कल में चेक किया गया था; मैंने एक nuget अद्यतन नहीं किया है, लेकिन आप नवीनतम स्रोत प्राप्त कर सकते हैं और वहां से निर्माण कर सकते हैं। –

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