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

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

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

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

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

আপনি Google ক্লাউড কনসোল বা explain কমান্ডের মাধ্যমে কোয়েরি ব্যাখ্যা ব্যবহার করতে পারেন।

কনসোল

ক্যোয়ারী এডিটরে একটি ক্যোয়ারী চালান এবং ব্যাখ্যা ট্যাব খুলুন:

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

    ডাটাবেসে যান

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

    ক্যোয়ারী ব্যাখ্যা ট্যাব কনসোলে
MongoDB API

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

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

db.collection.explain.find(...)

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

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

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

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

বিশ্লেষণ

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

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

এরপর কি