Sql सर्वर में वेब सर्वर लॉग के 'n' दिनों को कैसे स्टोर करें?


18

तीव्र रिपोर्टिंग और प्रदर्शन विश्लेषण के लिए, हम अपने वेब सर्वर लॉग को Sql सर्वर में डालना चाहते हैं। यह हमें वास्तविक समय के पास ट्रैफिक पैटर्न, मुद्दों, मंदी को देखने की अनुमति देगा।

हमारे पास एक डेमन है जो डेटाबेस में हमारे लोड बैलेंसर और थोक आवेषण से अनुरोध / प्रतिक्रिया की घटनाओं को सुनता है।

हालांकि, हमें प्रति दिन लगभग 1 जीबी लॉग मिलता है और हमें केवल एक सप्ताह के आसपास (कम से कम इस कच्चे रूप में) रखने की आवश्यकता होती है।

इस डेटा को संग्रहीत करने का सबसे अच्छा तरीका और पुरानी प्रविष्टियों को हटाने का सबसे अच्छा तरीका क्या है?

हमने प्रत्येक दिन के डेटा को अपनी तालिका में संग्रहीत करने के बारे में बात की है, उदाहरण के Log_2011_04_07लिए उस दिन की सभी प्रविष्टियाँ होंगी, और फिर सबसे पुरानी तालिका को छोड़ दिया जाएगा। आसान क्वेरी के लिए पूरे दिन की तालिकाओं को देखने के लिए एक दृश्य बनाया जा सकता है। संभव है?


यह एक बहुत ही समान प्रश्न है, लेकिन ओरेकल के लिए; वाक्यविन्यास अलग हो जाएगा, लेकिन यह तारीख तक विभाजन का एक क्लासिक अनुप्रयोग है। पहिया को सुदृढ़ करने की आवश्यकता नहीं है :-)
गयूस

जवाबों:


17

आपको विभाजन में देखना चाहिए।

http://technet.microsoft.com/en-us/library/dd578580%28SQL.100%29.aspx

विभाजन के बारे में अच्छी बात यह है कि आपके पास सिर्फ एक तालिका का नाम है (जैसा कि कई तालिका दृष्टिकोण के विपरीत है) ताकि आपके सम्मिलित कथन स्थिर रहें। यह हर एप्लिकेशन के साथ काम करता है - यह प्रश्नों के लिए पूरी तरह से पारदर्शी है। आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि यदि आप प्रत्येक टेबल पर अलग-अलग इंडेक्स या आँकड़ों के साथ समाप्त होते हैं, तो क्या होता है।

आप एक विभाजन फ़ंक्शन बनाते हैं जो यह तय करता है कि दृश्य के पीछे तालिका को कई तालिकाओं में कैसे विभाजित किया जाए। फ़ंक्शन केवल एक इनपुट पैरामीटर / फ़ील्ड ले सकता है, और आपके मामले में, यह एक दिनांक फ़ील्ड होगा। फ़ंक्शन दिनांक, सप्ताह, महीने या वर्ष तक तालिका को तोड़ सकता है - आपके मामले में, आप दिनांक, 24-घंटे की अवधि चाहते हैं।

फिर हर दिन अंतिम विभाजन को स्वैप करने के लिए T-SQL का उपयोग करने वाले SQL सर्वर एजेंट कार्य का निर्माण करें। डिलीट मेटाडेटा ऑपरेशन बन जाता है, और यह तेजी से धधक रहा है। विभाजन को स्वैप करें, फिर पुराने को बाहर छोड़ दें।


मैं उस पर गौर करूंगा - क्या यह अलग-अलग विभाजनों को छोड़ने की अनुमति देता है, इसलिए हटाए जाने की जल्दी हो सकती है?
जारोड डिक्सन

3
हां, आपको विशेष रूप से "स्वचालित स्लाइडिंग विंडो विभाजन" अवधारणा को देखना चाहिए। लेखों की एक अच्छी श्रृंखला आप SQLServerCentral: part1 , part2 और part3 पर पा सकते हैं ।
मैरियन

7

हमने 6 साल पहले एक वेबस्टैटिस्टिक लॉगिंग उत्पाद विकसित किया था जो हमें उपयोगकर्ताओं की हर क्लिक पर नज़र रखने की अनुमति देता है।

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

उत्पाद के हमारे अगले संस्करण के लिए, हम थोक-कलेक्टरों को वेबसाइटों पर अलग-अलग वितरित करेंगे और फिर डेटा एकत्र करने के लिए डेमन का उपयोग करेंगे और बाद में बल्क-सर्विस को कमांड जारी करके सफाई करेंगे।

इस तरह हम बिना डेटा खोए एक "शेड्यूल किए गए रखरखाव" को संभाल सकते हैं।

केंद्र सर्वर पर सफाई मुद्दे के बारे में, हमारी वर्तमान योजना उदाहरण के लिए डेटा संग्रह करने में सक्षम होने के लिए "टाइमस्टैम्प" जोड़ने की है। तीन माह।

हमने इसे 3D गेम / रेंडरिंग में MIP-MAP बनावट की तरह ही सोचा है। आप जितने करीब आते हैं, उतना ही विस्तृत डेटा, आगे दूर, अधिक "समूहीकृत" और कम विस्तृत।

इसलिए दिन-प्रतिदिन के आधार पर, हम विज़िटर पैटर्न का निरीक्षण कर सकते हैं, लेकिन 3 महीने के बाद वे डेटा वास्तव में प्रासंगिक हो जाते हैं और हम डेटा को कम विवरण में संपीड़ित करते हैं।

हमने निर्णय लिया कि यदि हम डेटाबेस को "विस्तार स्तर" अलग रखने के लिए विखंडू में तोड़ देंगे। डेटाबेस। लेकिन हम बस हो सकता है, क्योंकि कुछ नामकरण मुद्दे हैं यदि हम एक ही डेटाबेस में विभिन्न स्तरों को संग्रहीत करते हैं।

आशा है कि आप कुछ के लिए इस का उपयोग कर सकते हैं? मैं आपको हमारी कंपनी के उत्पाद के हिस्से के रूप में उदाहरण कोड प्रदान नहीं कर सकता।


1

दो स्तंभों के साथ एक और तालिका Daily_tables बनाएं: Table_name और Date_table_created। आपके कोड में जो एक नया डेली टेबल बनाता है (जो वेब लॉग्स को लोड करता है), डेली_टैबल्स टेबल को बनाए गए टेबल के नाम और टाइमस्टैम्प (वर्तमान तिथि समय) के साथ पॉप्युलेट करने के लिए एक और प्रविष्टि जोड़ें। SQL एजेंट कार्य बनाएँ जो हर सप्ताह TSQL स्क्रिप्ट चलाएगा। TSQL को Date_table_created टाइमस्टैम्प के साथ Daily_tables से सभी तालिकाओं के नाम (Table_name) को छोड़ देना चाहिए जो कि 7 दिन पुराना है।

आशा है कि आपको इसी की तलाश थी :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.