কম্পিউটার

কেন আমার ইলাস্টিক সার্চ ক্যোয়ারী ধীর?

মূলত 29 মে, 2018-এ ObjectRocket.com/blog-এ প্রকাশিত৷

একটি ঘন ঘন Elasticsearch® সমর্থন অনুরোধ Rackspace Technology প্রাপ্ত হয় "আপনি কি আমার প্রতিক্রিয়া সময় সাহায্য করতে পারেন?" অথবা "আমার প্রশ্ন অনেক সময় নিচ্ছে, আমি কি করতে পারি?"

কেন আমার ইলাস্টিক সার্চ ক্যোয়ারী ধীর?

দুটি পন্থা

যখনই আমরা এই ধরনের প্রশ্ন পাই, আমরা দুটি প্রধান ক্ষেত্র দেখে শুরু করি:

  • অপারেশন সাইড – বর্তমান সিস্টেম রিসোর্স এবং ডিফল্ট ইলাস্টিক সার্চ অপশন দেখুন।
  • উন্নয়নের দিক - আপনি যে ডেটা অনুসন্ধান করছেন তার প্রশ্ন, তাদের গঠন এবং ম্যাপিং দেখুন৷

ইলাস্টিকসার্চ অপ্টিমাইজেশানের ব্লগ পোস্টগুলির একটি সিরিজে এই প্রথমটিতে, আমরা এই দুটি ক্ষেত্রের পরবর্তীতে ফোকাস করি। আমরা ধীরগতির প্রশ্নগুলি পাই, ডোমেন স্পেসিফিক ল্যাঙ্গুয়েজ (DSL) ক্যোয়ারী ল্যাঙ্গুয়েজ নিয়ে আলোচনা করি এবং আপনার ইলাস্টিক সার্চ ক্যোয়ারীগুলিকে উন্নত করতে সাহায্য করতে পারে এমন বিকল্পগুলির উপর যান৷

আপনার প্রশ্নগুলি কতটা ধীর?

প্রথম ধাপ হল ক্লাস্টারে একটি ক্যোয়ারী পাঠাতে কত সময় লাগে তা দেখা৷ ইলাস্টিকসার্চ ডক্সগুলি কীভাবে ধীর লগগুলি চালু করতে হয় সে সম্পর্কে স্পষ্ট নয়, তাই আমি এই পোস্টে কিছু উদাহরণ দেখাচ্ছি৷

প্রথমত, ইলাস্টিকসার্চে ধীরগতির লগের দুটি সংস্করণ রয়েছে:সূচী ধীর লগ এবং অনুসন্ধান ধীর লগ। কারণ আমরা যে সমস্যাটি সমাধান করার চেষ্টা করছি তাতে ধীরগতির প্রশ্ন জড়িত, আমরা ধীর লগে অনুসন্ধানের উপর ফোকাস করি। যাইহোক, যদি এটি নথিগুলিকে সূচীকরণ বা যোগ করার সময় কর্মক্ষমতা সংক্রান্ত সমস্যাগুলির বিষয়ে হয় তবে আমরা সূচী ধীর লগগুলি দেখব৷

ইলাস্টিকসার্চের সমস্ত সংস্করণ ডিফল্টরূপে ধীরগতির লগগুলি বন্ধ করে দেয়, তাই আপনাকে ক্লাস্টার সেটিংস এবং সূচক সেটিংস উভয়েই কিছু আপডেট করতে হবে৷ নিম্নলিখিত উদাহরণগুলি ইলাস্টিকসার্চ 6.2 এর সাথে ডিল করে, তবে আপনি এখানে পূর্ববর্তী সংস্করণগুলি সম্পর্কে তথ্য পেতে পারেন৷ এর সাথে $ES_version প্রতিস্থাপন করুন আপনি যে সংস্করণে কাজ করছেন, উদাহরণস্বরূপ, সংস্করণ 5.5।

  • একটি PUT পাঠান _cluster কে অনুরোধ করুন আপনি যে ধীর লগ্নের স্তরটি চালু করতে চান তা নির্ধারণ করতে API:সতর্কতা, তথ্য, ডিবাগ এবং ট্রেস। (লগিং স্তরের উপর আরও তথ্য।)

    curl -XPUT https://localhost:$ES_PORT/_cluster/settings -H ‘Content-Type:application/json’ -d’

      {
    

    “ক্ষণস্থায়ী” :{“logger.index.search.slowlog” :“DEBUG”, “logger.index.indexing.slowlog” :“DEBUG”}}'

কারণ ইলাস্টিকসার্চ সূচক স্তরে সমস্ত ধীর লগিং সক্ষম করে, আপনি সূচীতে একটি অনুরোধ পাঠাতে পারেন _সেটিংস API এটি চালু করতে। আপনি যদি মাসিক, ত্রৈমাসিক, এবং আরও অনেক কিছু আপনার সূচীগুলি ঘোরান তবে আপনাকে আপনার সূচী টেমপ্লেটে যোগ করতে হবে৷

  • আপনি আঘাত করতে চান এমন ধীর লগ টাইম থ্রেশহোল্ডের সাথে মেলে সূচক সেটিংসে API কলটি সামঞ্জস্য করুন৷ আপনি দৃষ্টান্তটি প্রোফাইল করতে মানটিকে শূন্যে সেট করতে পারেন এবং ধীরগতির লগটি বন্ধ করতে সমস্ত এইসেন্ট প্রশ্ন বা -1 সংগ্রহ করতে পারেন৷

  • আপনি _clustersettings-এ ব্যবহার করেছেন একই লগ-লেভেল সেটিং ব্যবহার করুন। এই উদাহরণে, DEBUG . ES_PORT একটি স্থায়ী পরিবেশগত পরিবর্তনশীল।

    curl -XPUT https://localhost:$ES_PORT/*/_settings?pretty -H 'Content-Type:application/json' -d '{“index.search.slowlog.threshold.query.debug”:“-1” ,“index.search.slowlog. threshold.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>)

আমরা খুব বেশি সময় নিচ্ছে বলে শনাক্ত করা প্রশ্নটি পাওয়ার পরে, আমরা এটিকে ভেঙে ফেলার জন্য নিম্নলিখিত সরঞ্জামগুলি ব্যবহার করতে পারি:

_প্রোফাইল API

_প্রোফাইল API আপনার অনুসন্ধান সম্পর্কে তথ্যের পৃষ্ঠাগুলি সরবরাহ করে এবং প্রতিটি অনুসন্ধান উপাদানের পৃথক সময় অনুসারে প্রতিটি শার্ডে যা ঘটেছিল তা ভেঙে দেয় — অনুসন্ধানটি আরও বিশদ, _প্রোফাইল আউটপুট তত বেশি শব্দযুক্ত।

কিবানা প্রোফাইলিং টুল

Kibana® টুলটি _profile এর সাথে হাত মিলিয়ে যায় API এটি পৃথক অনুসন্ধানের উপাদানগুলির একটি চমৎকার ভিজ্যুয়াল জলপ্রপাতের উপস্থাপনা দেয় এবং সেগুলি সম্পূর্ণ করতে কত সময় নেয়। আবার, এটি আপনাকে কোয়েরির সমস্যা এলাকা বাছাই করতে দেয়।

ইলাস্টিক সার্চের দুটি পর্যায়:ক্যোয়ারী তারপর আনুন

এখন, আমরা একটি ধীরগতির ক্যোয়ারী শনাক্ত করেছি, এবং আমরা এটি একটি প্রোফাইলারের মাধ্যমে চালনা করেছি৷ যদিও স্বতন্ত্র উপাদান সময়ের ফলাফলের দিকে তাকানো আপনার অনুসন্ধানকে দ্রুততর করেনি৷ এখন কি? কোয়েরিগুলি কীভাবে কাজ করে তা বোঝা, নিম্নলিখিত দুটি ধাপের মধ্য দিয়ে যাওয়া, আপনাকে এমনভাবে আপনার ক্যোয়ারীকে নতুনভাবে ডিজাইন করতে দেয় যা ইলাস্টিকসার্চ থেকে - গতি এবং প্রাসঙ্গিকতা উভয় ক্ষেত্রেই সেরা ফলাফল পায়৷

কোয়েরি পর্ব

  • কোঅর্ডিনেটর নোড প্রশ্নটি গ্রহণ করে।
  • সমন্বয়কারী সূচক (বা সূচক) সনাক্ত করে যা অনুসন্ধান করা হচ্ছে।
  • কোঅর্ডিনেটর নোডের একটি তালিকা তৈরি করে যাতে সূচকের জন্য শার্ড থাকে (প্রাথমিক এবং প্রতিলিপি উভয়ের মিশ্রণে)।
  • কোঅর্ডিনেটর নোডগুলিতে প্রশ্ন পাঠায়।
  • নোডের শার্ডগুলি কোয়েরি প্রক্রিয়া করে৷
  • প্রশ্নগুলি শীর্ষ 10 নথিতে (ডিফল্টরূপে) স্কোর করা হয়৷
  • তালিকাটি সমন্বয়কারী নোডে ফেরত পাঠানো হয়।

ফেজ আনুন

  • আনয়ন পর্বটি সমন্বয়কারী নোড দিয়ে শুরু হয়, যা প্রতিটি শার্ড দ্বারা প্রেরিত 50টি (5 শার্ড x 10) ফলাফলের মধ্যে শীর্ষ 10টি নথি নির্ধারণ করে৷
  • সমন্বয়কারী শীর্ষ 10টি নথির জন্য শার্ডগুলিতে একটি অনুরোধ পাঠান৷ (এটি এমন একটি শার্ড হতে পারে যাতে শীর্ষ-স্কোরিং ডক্স রয়েছে, অথবা সেগুলি বিভিন্ন শার্ডগুলিতে ছড়িয়ে ছিটিয়ে থাকতে পারে৷)

একটি তালিকা ফেরত দেওয়ার পরে, মাস্টার ক্যোয়ারী প্রতিক্রিয়ার _হিট বিভাগে নথিগুলি উপস্থাপন করেন৷

ফলাফলের স্কোর

ফলাফলের স্কোর ইলাস্টিকসার্চে গুরুত্বপূর্ণ। সাধারণত, আপনি যখন অনুসন্ধান ইঞ্জিন ব্যবহার করেন, আপনি সবচেয়ে সঠিক ফলাফল চান। উদাহরণস্বরূপ, আপনি যদি কিউই, ফলের জন্য গবেষণা করছেন, আপনি ফলাফলগুলিতে কিউই জুতার পালিশ অন্তর্ভুক্ত করতে চান না৷ আপনার সরবরাহ করা প্যারামিটারগুলির উপর ভিত্তি করে ইলাস্টিক সার্চ কোয়েরির ফলাফল স্কোর করে৷ আমরা একটি সম্পূর্ণ ভিন্ন ব্লগ পোস্টে প্রশ্নের প্রাসঙ্গিকতা কভার করি৷ ,এখানে উল্লেখ করা গুরুত্বপূর্ণ কারণ আপনার যদি একটি দ্রুত অনুসন্ধান থাকে কিন্তু আপনি যা খুঁজছেন তা না হয়, পুরো অনুসন্ধানটি ছিল সময়ের অপচয়। তাই, আপনি কীভাবে আপনার অনুসন্ধানের গতি বাড়াবেন?

ফিল্টার

আপনার অনুসন্ধানের কর্মক্ষমতা উন্নত করার একটি উপায় হল ফিল্টার। ফিল্টার করা প্রশ্ন আপনার সেরা বন্ধু হতে পারে। প্রথমে ফিল্টার করা গুরুত্বপূর্ণ কারণ অনুসন্ধানে ফিল্টার ডকুমেন্ট স্কোরের ফলাফলকে প্রভাবিত করে না, তাই আপনি অনুসন্ধান ক্ষেত্র কমাতে খুব কম সংস্থান ব্যবহার করেন।

একটি ফিল্টার করা ক্যোয়ারী দিয়ে, বুলিয়ান ম্যাচের সাথে কাজ করে, আপনি Y আছে কিনা তা স্কোর করার আগে X ধারণ করে এমন সমস্ত নথি অনুসন্ধান করতে পারেন। এছাড়াও, আপনি ফিল্টার ক্যাশে করতে পারেন।

ইলাস্টিক সার্চ ক্যোয়ারী দ্রুত করার একমাত্র উপায় ফিল্টার নয়। ভবিষ্যতের ব্লগে ক্যোয়ারী কর্মক্ষমতা উন্নত করতে আপনি ব্যবহার করতে পারেন এমন আরও পদ্ধতি আমরা কভার করব।

সারাংশ

আপনি কয়েকটি সহজ ধাপে আপনার প্রশ্নগুলি অপ্টিমাইজ করতে পারেন:

  • ধীরগতির লগিং সক্ষম করুন যাতে আপনি দীর্ঘকাল ধরে চলমান প্রশ্নগুলি সনাক্ত করতে পারেন
  • ব্যক্তিগত উপাদানের সময় দেখতে _profiling API এর মাধ্যমে চিহ্নিত অনুসন্ধান চালান
  • ফিল্টার, ফিল্টার, ফিল্টার

Elasticsearch পরিচালনার বিষয়ে প্রশ্ন আছে? আমরা আমাদের ডেটাবেস অ্যাডমিনিস্ট্রেটরদের কাছে অ্যাক্সেস অন্তর্ভুক্ত করি গভীর ইলাস্টিকসার্চ দক্ষতার সাথে প্রতিটি উদাহরণের সাথে, এমনকি বিনামূল্যে ট্রায়াল সহ। উন্নয়নের উপর ফোকাস করা শুরু করুন এবং আমাদের ইলাস্টিকসার্চ ব্যবস্থাপনা পরিচালনা করতে দিন।

কিবানার সাথে ইলাস্টিকসার্চ 6 এর একটি বিনামূল্যের ট্রায়াল নিয়ে খেলতে চান? শুরু করুন এবং আপনার কোন প্রশ্ন থাকলে আমাদের জানান।

কোনো মন্তব্য করতে বা প্রশ্ন জিজ্ঞাসা করতে প্রতিক্রিয়া ট্যাব ব্যবহার করুন। এছাড়াও আপনি সেলস চ্যাট এ ক্লিক করতে পারেন এখন চ্যাট করতে এবং কথোপকথন শুরু করতে।


  1. আমার ল্যাপটপ ধীর কেন? এটি ঠিক করার জন্য এখানে একটি সহজ ধাপে ধাপে পদ্ধতি রয়েছে

  2. এই কারণে আপনার ম্যাক ধীর গতিতে চলছে

  3. কেন আমার ম্যাক ধীর গতিতে সাড়া দিচ্ছে?

  4. আমার বাড়ির ইন্টারনেট এত ধীর কেন এবং এর গতি বাড়াতে কী করতে হবে?