ক্যোয়ারী এক্সপ্লেইন সহ ক্যোয়ারী এক্সিকিউশন বিশ্লেষণ করুন

শুধুমাত্র ক্লাউড ফায়ারস্টোর এন্টারপ্রাইজ সংস্করণের জন্য প্রাসঙ্গিক।

এই পৃষ্ঠাটি বর্ণনা করে যে কিভাবে আপনি একটি কোয়েরি কার্যকর করার সময় কোয়েরি কার্যকর করার তথ্য পুনরুদ্ধার করবেন।

কোয়েরি ব্যাখ্যা ব্যবহার করুন

আপনার কোয়েরিগুলি কীভাবে কার্যকর করা হচ্ছে তা বোঝার জন্য আপনি কোয়েরি ব্যাখ্যা ব্যবহার করতে পারেন। এটি আপনার কোয়েরিগুলি অপ্টিমাইজ করার জন্য ব্যবহার করা যেতে পারে এমন বিশদ সরবরাহ করে।

আপনি গুগল ক্লাউড কনসোল অথবা explain কমান্ডের মাধ্যমে কোয়েরি এক্সপ্লেইন ব্যবহার করতে পারেন।

কনসোল

কোয়েরি এডিটরে একটি কোয়েরি সম্পাদন করুন এবং ব্যাখ্যা ট্যাবটি খুলুন:

  1. গুগল ক্লাউড কনসোলে, ডাটাবেস পৃষ্ঠায় যান।

    ডাটাবেসে যান

  2. ডাটাবেসের তালিকা থেকে, MongoDB সামঞ্জস্যপূর্ণ ডাটাবেস সহ একটি ক্লাউড ফায়ারস্টোর নির্বাচন করুন। গুগল ক্লাউড কনসোলটি সেই ডাটাবেসের জন্য ফায়ারস্টোর এক্সপ্লোরার খুলবে।
  3. কোয়েরি এডিটরে একটি কোয়েরি লিখুন এবং রান এ ক্লিক করুন।
  4. ক্যোয়ারী বিশ্লেষণ আউটপুট দেখতে ব্যাখ্যা ট্যাবে ক্লিক করুন।

    কনসোলে "কোয়েরি ব্যাখ্যা করুন" ট্যাব
মঙ্গোডিবি এপিআই

MongoDB API-তে Query Explain explain কমান্ডের মাধ্যমে সমর্থিত যা আপনি Mongo Shell এবং Compass-এর মতো টুলগুলিতে ব্যবহার করতে পারেন।

explain কমান্ডটি aggregate , find , distinct , এবং count কমান্ডের সাথে সমর্থিত, উদাহরণস্বরূপ:

db.collection.explain('executionStats').find(...)

আপনি explain() পদ্ধতিটিও ব্যবহার করতে পারেন, উদাহরণস্বরূপ:

db.collection.find({QUERY}).explain('executionStats')
সীমাবদ্ধতা
নিম্নলিখিত সীমাবদ্ধতা এবং পার্থক্যগুলি লক্ষ্য করুন:
  • Query Explain এমন কমান্ড সমর্থন করে না যা কার্সার ফেরত দেয়। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি সরাসরি কল করে explain আহ্বান করা সমর্থিত নয়:

    db.collection.aggregate(..., explain: true)
  • Query Explain শুধুমাত্র find , aggregate , count এবং distinct কমান্ডের ক্ষেত্রে সমর্থিত।

  • Query Explain-এর Verbosity এবং Comment অপশনগুলি MongoDB API-এর মাধ্যমে সমর্থিত নয়। আচরণটি executionStats অপশনের সাথে মিলে যায়। allPlansExecution এবং queryPlanner অপশনগুলি প্রদান করা হলে তা উপেক্ষা করা হয়।

    যদি কোনও ভার্বোসিটি প্রদান করা না থাকে, তাহলে শেলটি queryPlanner ভার্বোসিটি ব্যবহার করে এবং এক্সিকিউশন স্ট্যাটাস ফিল্টার করে। সম্পূর্ণ আউটপুট দেখতে আপনাকে executionStats অথবা allPlansExecution ভার্বোসিটি ব্যবহার করতে হবে।

বিশ্লেষণ

Query Explain এর আউটপুটে দুটি প্রধান উপাদান রয়েছে - Summary Statistics এবং Execution Tree। এই কোয়েরিকে উদাহরণ হিসেবে বিবেচনা করুন:

db.order.aggregate(
 [
   { "$match": { "user_id": 1234 } },
   { "$sort": { "date_placed": 1 } }
 ]
)

সারাংশ পরিসংখ্যান

ব্যাখ্যা করা আউটপুটের উপরে এক্সিকিউশন পরিসংখ্যানের একটি সারসংক্ষেপ রয়েছে। এই পরিসংখ্যানগুলি ব্যবহার করে কোনও কোয়েরির উচ্চ বিলম্বিতা বা খরচ আছে কিনা তা নির্ধারণ করুন। এতে মেমরি পরিসংখ্যানও রয়েছে যা আপনাকে জানাবে যে আপনার কোয়েরি মেমরি সীমার কতটা কাছাকাছি।

Billing Metrics:
read units: 1

Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 1

এক্সিকিউশন ট্রি

এক্সিকিউশন ট্রি ক্যোয়ারী এক্সিকিউশনকে নোডের একটি সিরিজ হিসেবে বর্ণনা করে। নীচের নোডগুলি (লিফ নোড) স্টোরেজ লেয়ার থেকে ডেটা পুনরুদ্ধার করে যা ট্রির উপরে উঠে একটি কোয়েরি রেসপন্স তৈরি করে।

প্রতিটি এক্সিকিউশন নোড সম্পর্কে বিস্তারিত জানার জন্য, এক্সিকিউশন রেফারেন্স দেখুন।

আপনার কোয়েরিগুলি অপ্টিমাইজ করার জন্য এই তথ্য কীভাবে ব্যবহার করবেন তার বিশদ বিবরণের জন্য, অপ্টিমাইজ কোয়েরি এক্সিকিউশন দেখুন।

নিচে একটি এক্সিকিউশন ট্রির উদাহরণ দেওয়া হল:

• Compute
|  $out_1: map_set($record_1, "__id__", $__id___1, "__key__", $__key___1, "__row_id__", $__row_id___1, "__$0__", $__$0___2)
|  is query result: true
|
|  Execution:
|   records returned: 1
|
└── • Compute
    |  $__$0___2: UNSET
    |
    |  Execution:
    |   records returned: 1
    |
    └── • Compute
        |  $__key___1: UNSET
        |  $__row_id___1: UNSET
        |
        |  Execution:
        |   records returned: 1
        |
        └── • Compute
            |  $__id___1: _id($record_1.__key__)
            |
            |  Execution:
            |   records returned: 1
            |
            └── • MajorSort
                |  fields: [$v_5 ASC]
                |  output: [$record_1]
                |
                |  Execution:
                |   records returned: 1
                |   peak memory usage: 4.00 KiB (4,096 B)
                |
                └── • Compute
                    |  $v_5: array_get($v_4, 0L)
                    |
                    |  Execution:
                    |   records returned: 1
                    |
                    └── • Compute
                        |  $v_4: sortPaths(array($record_1.date_placed), [date_placed ASC])
                        |
                        |  Execution:
                        |   records returned: 1
                        |
                        └── • Filter
                            |  expression: $eq($user_id_1, 1,234)
                            |
                            |  Execution:
                            |   records returned: 1
                            |
                            └── • TableScan
                                   source: **/my_collection
                                   order: STABLE
                                   properties: * - { __create_time__, __update_time__ }
                                   output record: $record_1
                                   output bindings: {$user_id_1=user_id}
                                   variables: [$record_1, $user_id_1]

                                   Execution:
                                    records returned: 1
                                    records scanned: 1

এরপর কি?