Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> डेटाबेस

मेरी इलास्टिक्स खोज क्वेरी धीमी क्यों है?

मूल रूप से 29 मई, 2018 को ObjectRocket.com/blog पर प्रकाशित हुआ।

एक लगातार Elasticsearch® समर्थन अनुरोध रैकस्पेस टेक्नोलॉजी प्राप्त करता है "क्या आप मेरी प्रतिक्रिया समय में मदद कर सकते हैं?" या“मेरे प्रश्नों में बहुत समय लग रहा है, मैं क्या कर सकता हूँ?”

मेरी इलास्टिक्स खोज क्वेरी धीमी क्यों है?

दो दृष्टिकोण

जब भी हमें इस प्रकार के प्रश्न मिलते हैं, तो हम दो मुख्य क्षेत्रों पर एक नज़र डालते हैं:

  • संचालन पक्ष - मौजूदा सिस्टम संसाधनों और डिफ़ॉल्ट इलास्टिक्स खोज विकल्पों को देखें।
  • विकास पक्ष - आप जिस डेटा को खोज रहे हैं उसकी क्वेरी, उनकी संरचना और मैपिंग देखें।

इलास्टिक्स खोज ऑप्टिमाइज़ेशन पर ब्लॉग पोस्ट की श्रृंखला में पहली बार, हम इन दो क्षेत्रों के उत्तरार्द्ध पर ध्यान केंद्रित करते हैं। हम धीमी क्वेरी प्राप्त करते हैं, डोमेन विशिष्ट भाषा (डीएसएल) क्वेरी भाषा पर चर्चा करते हैं, और उन विकल्पों पर विचार करते हैं जो आपकी इलास्टिक्स खोज क्वेरी को बेहतर बनाने में मदद कर सकते हैं।

आपकी क्वेरी कितनी धीमी हैं?

पहला कदम यह देखना है कि क्लस्टर को एक क्वेरी भेजने में कितना समय लगता है। इलास्टिक्स खोज दस्तावेज़ इस बारे में स्पष्ट नहीं हैं कि धीमे लॉग को कैसे चालू किया जाए, इसलिए मैं इस पोस्ट में कुछ उदाहरण दिखाता हूँ।

सबसे पहले, Elasticsearch में धीमे लॉग के दो संस्करण हैं:धीमे लॉग को अनुक्रमित करें और धीमे लॉग खोजें। क्योंकि हम जिस समस्या को हल करने का प्रयास कर रहे हैं उसमें धीमी क्वेरी शामिल हैं, हम खोज धीमे लॉग पर ध्यान केंद्रित करते हैं। हालांकि, अगर यह दस्तावेज़ों को अनुक्रमित करने या जोड़ने के दौरान प्रदर्शन के मुद्दों के बारे में था, तो हम इंडेक्स स्लो लॉग्स को देखेंगे।

इलास्टिक्स खोज के सभी संस्करण डिफ़ॉल्ट रूप से धीमे लॉग को बंद कर देते हैं, इसलिए आपको क्लस्टर सेटिंग्स और इंडेक्स सेटिंग्स दोनों में कुछ अपडेट करने होंगे। निम्नलिखित उदाहरण इलास्टिक्स खोज 6.2 से संबंधित हैं, लेकिन आप यहां पिछले संस्करणों के बारे में जानकारी पा सकते हैं। $ES_version को इसके साथ बदलें जिस संस्करण पर आप काम कर रहे हैं, उदाहरण के लिए, संस्करण 5.5।

  • एक पुट भेजें _क्लस्टर . से अनुरोध करें धीमी लॉग के स्तर को परिभाषित करने के लिए एपीआई जिसे आप चालू करना चाहते हैं:चेतावनी, जानकारी, डीबग और ट्रेस। (लॉगिंग स्तरों पर अधिक जानकारी।)

    कर्ल -XPUT https://localhost:$ES_PORT/_cluster/settings -H 'सामग्री-प्रकार:एप्लिकेशन/json' -d'

      {
    

    “क्षणिक” :{“logger.index.search.slowlog” :“DEBUG”,“logger.index.indexing.slowlog” :“DEBUG”}}'

चूंकि इलास्टिक्स खोज इंडेक्स स्तर पर सभी धीमी लॉगिंग को सक्षम करता है, आप इंडेक्स _सेटिंग्स को एक अनुरोध भेज सकते हैं इसे चालू करने के लिए एपीआई। यदि आप अपनी अनुक्रमणिका को मासिक, त्रैमासिक, इत्यादि घुमा रहे हैं तो आपको अपने अनुक्रमणिका टेम्पलेट में भी जोड़ना होगा।

  • धीमी लॉग समय सीमा से मेल खाने के लिए एपीआई कॉल को इंडेक्स सेटिंग्स में समायोजित करें जिसे आप हिट करना चाहते हैं। आप इंस्टेंस को प्रोफाइल करने के लिए मान को शून्य पर सेट कर सकते हैं और सभी भेजे गए प्रश्नों को एकत्र कर सकते हैं या धीमे लॉग को बंद करने के लिए -1।

  • उसी लॉग-स्तरीय सेटिंग का उपयोग करें जिसका उपयोग आपने _clustersettings में किया था। इस उदाहरण में, DEBUG . ES_PORT एक स्थायी पर्यावरण चर है।

    कर्ल -XPUT https://localhost:$ES_PORT/*/_settings?pretty -H 'सामग्री-प्रकार:application/json' -d '{"index.search.slowlog.threshold.query.debug":"-1" , "index.search.slowlog. दहलीज.fetch.debug":"-1",}'

अब, आपको लॉग एकत्र करने की आवश्यकता है। धीमे लॉग प्रति शार्प उत्पन्न होते हैं और प्रति डेटा नोड एकत्र किए जाते हैं। यदि आपके पास केवल एक डेटा नोड है जिसमें पाँच प्राथमिक शार्क (डिफ़ॉल्ट मान) हैं, तो आप धीमे लॉग में एक क्वेरी के लिए पाँच प्रविष्टियाँ देखते हैं। चूंकि इलास्टिक्स खोज में खोज प्रत्येक शार्क के अंदर होती है, आप प्रत्येक शार्क के लिए एक देखते हैं। धीमे लॉग निम्न डिफ़ॉल्ट स्थान में प्रति डेटा नोड संग्रहीत किए जाते हैं:/var/log/elasticsearch/$ClusterID_index_slowlog_query और /var/log/elasticsearch/$ClusterID_index_slowlog_fetch जैसा कि आप देख सकते हैं, खोज के धीमे लॉग को फिर से खोज के चरण के आधार पर अलग-अलग लॉग फ़ाइलों में विभाजित किया जाता है:फ़ेच और क्वेरी।

अब जब हमारे पास लॉग में परिणाम हैं, तो हम एक प्रविष्टि खींच सकते हैं और इसे अलग कर सकते हैं।

[2018-05-21T12:35:53,352][DEBUG ][index.search.slowlog.query] [DwOfjJF] [blogpost-slowlogs][4] took[1s],    took_millis[0], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"match":{"name":    {"query":"hello world", "operator":"OR","prefix_length":0,"max_expansions":50,"fuzzy_transpositions" :true, "lenient":false,"zero_terms_query": "NONE","boost":1.0}}},"sort":[{"price": {"order":"desc"}}]}],

यहाँ, आप देखते हैं:

  • दिनांक टाइमस्टैम्प
  • लॉग स्तर
  • धीमा प्रकार
  • नोड नाम
  • सूचकांक
  • शार्ड नंबर
  • समय लगा
  • क्वेरी का मुख्य भाग (_source>)

जब हमें वह प्रश्न प्राप्त हो जाता है जिसे हम बहुत अधिक समय लेने के रूप में पहचानते हैं, तो हम इसे तोड़ने के लिए निम्नलिखित टूल का उपयोग कर सकते हैं:

_profile API

_प्रोफ़ाइल एपीआई आपकी खोज के बारे में जानकारी के पृष्ठ प्रदान करता है और प्रत्येक शार्क में क्या हुआ, प्रत्येक खोज घटक के अलग-अलग समय तक टूट जाता है-खोज को जितना विस्तृत किया जाता है, _प्रोफाइल आउटपुट उतना ही अधिक क्रियात्मक होता है।

किबाना प्रोफाइलिंग टूल

Kibana® टूल _profile . के साथ हाथ से जाता है एपीआई। यह अलग-अलग खोज घटकों और उन्हें पूरा करने में लगने वाले समय का एक अच्छा दृश्य जलप्रपात प्रतिनिधित्व देता है। फिर से, यह आपको क्वेरी के समस्या क्षेत्र को चुनने की अनुमति देता है।

लोचदार खोज के दो चरण:फिर क्वेरी करें

अब, हमने एक धीमी क्वेरी की पहचान की है, और हमने इसे एक प्रोफाइलर के माध्यम से चलाया है। अलग-अलग घटक समय परिणामों को देखते हुए, आपकी खोज तेज़ नहीं हुई है। अब क्या? निम्नलिखित दो चरणों से गुजरते हुए, यह समझना कि क्वेरी कैसे काम करती है, आपको अपनी क्वेरी को इस तरह से फिर से डिज़ाइन करने की अनुमति देती है, जो गति और प्रासंगिकता दोनों के मामले में इलास्टिक्स खोज से सर्वोत्तम परिणाम प्राप्त करती है।

क्वेरी चरण

  • समन्वयक नोड क्वेरी को स्वीकार करता है।
  • समन्वयक खोजे जा रहे इंडेक्स (या इंडेक्स) की पहचान करता है।
  • समन्वयक नोड्स की एक सूची तैयार करता है जिसमें इंडेक्स के लिए शार्क होते हैं (प्राथमिक और प्रतिकृति दोनों के मिश्रण में)।
  • समन्वयक नोड को क्वेरी भेजता है।
  • नोड्स पर मौजूद शार्क क्वेरी को प्रोसेस करती हैं।
  • प्रश्नों को शीर्ष 10 दस्तावेज़ों में (डिफ़ॉल्ट रूप से) स्कोर किया जाता है।
  • सूची समन्वयक नोड को वापस भेज दी जाती है।

फ़ेच चरण

  • कोऑर्डिनेटर नोड के साथ लाने का चरण शुरू होता है, जो प्रत्येक शार्ड द्वारा भेजे गए 50 (5 शार्क x 10) परिणामों में से शीर्ष 10 दस्तावेज़ों को निर्धारित करता है।
  • समन्वयक शीर्ष 10 दस्तावेज़ों के लिए एक अनुरोध भेजता है।

सूची वापस आने के बाद, मास्टर क्वेरी प्रतिक्रिया के _hits अनुभाग में दस्तावेज़ प्रस्तुत करता है।

परिणाम स्कोर

Elasticsearch में परिणाम स्कोर महत्वपूर्ण हैं। आमतौर पर, जब आप एक खोज इंजन का उपयोग करते हैं, तो आप सबसे सटीक परिणाम चाहते हैं। उदाहरण के लिए, यदि आप कीवी, फल की खोज कर रहे हैं, तो आप नहीं चाहते कि परिणामों में कीवी शू पॉलिश शामिल हो। इलास्टिक्स खोज आपके द्वारा प्रदान किए गए मापदंडों के आधार पर क्वेरी परिणामों को स्कोर करता है। जबकि हम पूरी तरह से अलग ब्लॉग पोस्ट में क्वेरी प्रासंगिकता को कवर करते हैं। , यहां उल्लेख करना महत्वपूर्ण है क्योंकि यदि आपके पास एक तेज़ खोज है लेकिन परिणाम वह नहीं हैं जो आप खोज रहे हैं, तो पूरी खोज समय की बर्बादी थी। तो, आप अपनी खोजों को कैसे तेज करते हैं?

फ़िल्टर

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

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

इलास्टिक्स खोज क्वेरी को तेज़ करने का एकमात्र तरीका फ़िल्टर नहीं हैं। हम भविष्य के ब्लॉग में क्वेरी के प्रदर्शन को बेहतर बनाने के लिए आपके द्वारा उपयोग की जा सकने वाली और विधियों को शामिल करेंगे।

सारांश

आप कुछ आसान चरणों में अपने प्रश्नों को अनुकूलित कर सकते हैं:

  • धीमी लॉगिंग सक्षम करें ताकि आप लंबे समय तक चलने वाली क्वेरी की पहचान कर सकें
  • अलग-अलग घटकों के समय को देखने के लिए _profiling API के माध्यम से पहचानी गई खोजों को चलाएं
  • फ़िल्टर करें, फ़िल्टर करें, फ़िल्टर करें

क्या आपके पास इलास्टिक्स खोज के प्रबंधन के बारे में प्रश्न हैं? हम हर उदाहरण के साथ, यहां तक ​​कि निःशुल्क परीक्षणों के साथ, गहन इलास्टिक्स खोज विशेषज्ञता वाले अपने डेटाबेस व्यवस्थापकों तक पहुंच शामिल करते हैं। विकास पर ध्यान देना शुरू करें और आइए हम इलास्टिक्स खोज प्रबंधन को संभालें।

Kibana के साथ Elasticsearch 6 के नि:शुल्क परीक्षण के साथ खेलना चाहते हैं? आरंभ करें और यदि आपके कोई प्रश्न हैं तो हमें बताएं।

कोई टिप्पणी करने या प्रश्न पूछने के लिए प्रतिक्रिया टैब का उपयोग करें। आप विक्रय चैट . पर भी क्लिक कर सकते हैं अभी चैट करने और बातचीत शुरू करने के लिए।


  1. यही कारण है कि आपका मैक धीमा चल रहा है

    हां, प्रत्येक मैक वास्तव में समय पर हार्डवेयर समस्याओं से मिलता है जो इसके प्रदर्शन को धीमा कर देता है। लेकिन, जब आप समय से पहले अचानक इस बदलाव का अनुभव करना शुरू करते हैं, तो शायद यह आपके मैक के प्रति आपकी उपेक्षा है जिसने इस चिंता को आपके डेस्क पर लाया है। आपके मैक को धीमा करने के कई कारण हैं जिन्

  1. मेरा मैक धीमी गति से प्रतिक्रिया क्यों कर रहा है?

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

  1. मेरे घर का इंटरनेट इतना धीमा क्यों है और इसके स्पीडअप के लिए क्या करना चाहिए?

    क्या आप इंटरनेट की धीमी गति से परेशान हैं और खरीदे गए प्लान के साथ ठगा हुआ महसूस कर रहे हैं? क्या आपने इसे ऑनलाइन स्पीड टेस्ट का उपयोग करके चेक किया है और घोंघे के समान रवैये की पुष्टि की है? चिंता न करें, इसके कई कारण हो सकते हैं और हो सकता है कि आपका इंटरनेट सेवा प्रदाता हर बार डिफॉल्ट करने वाला ए