Query Explain ব্যবহার করে ক্যোয়ারী কর্মক্ষমতা বুঝুন

ক্যোয়ারী এক্সপ্লেইন আপনাকে ক্লাউড ফায়ারস্টোরের প্রশ্নগুলি ব্যাকএন্ডে জমা দিতে এবং বিনিময়ে ব্যাকএন্ড কোয়েরি সম্পাদনের বিস্তারিত কর্মক্ষমতা পরিসংখ্যান পেতে দেয়। এটি অনেক রিলেশনাল ডাটাবেস সিস্টেমে EXPLAIN [ANALYZE] অপারেশনের মত কাজ করে।

ফায়ারস্টোর সার্ভার ক্লায়েন্ট লাইব্রেরি ব্যবহার করে ক্যোয়ারী ব্যাখ্যা করার অনুরোধ পাঠানো যেতে পারে।

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

প্রশ্ন ব্যাখ্যা করুন:

  • ক্যোয়ারী পরিকল্পনা পর্যায়ে অন্তর্দৃষ্টি প্রদান করে যাতে আপনি আপনার ক্যোয়ারী সূচী সামঞ্জস্য করতে পারেন এবং দক্ষতা বাড়াতে পারেন।
  • বিশ্লেষণ বিকল্পটি ব্যবহার করে, আপনাকে প্রতি-কোয়েরি ভিত্তিতে আপনার খরচ এবং কর্মক্ষমতা বুঝতে সাহায্য করে এবং তাদের ব্যবহার অপ্টিমাইজ করার জন্য আপনাকে বিভিন্ন ক্যোয়ারী প্যাটার্নের মাধ্যমে দ্রুত পুনরাবৃত্তি করতে দেয়।

ক্যোয়ারী বুঝুন বিকল্প ব্যাখ্যা করুন: ডিফল্ট এবং বিশ্লেষণ

ডিফল্ট বিকল্প বা বিশ্লেষণ বিকল্প ব্যবহার করে Query Explain অপারেশন করা যেতে পারে।

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

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

প্রশ্ন ব্যাখ্যা খরচ কি?

আপনি যখন ডিফল্ট বিকল্পের সাথে Query Explain ব্যবহার করেন, তখন কোনো সূচক বা রিড অপারেশন করা হয় না। প্রশ্ন জটিলতা নির্বিশেষে, একটি পঠিত অপারেশন চার্জ করা হয়.

আপনি যখন বিশ্লেষণ বিকল্পের সাথে Query Explain ব্যবহার করেন, তখন সূচী এবং রিড অপারেশনগুলি সঞ্চালিত হয়, তাই আপনাকে যথারীতি প্রশ্নের জন্য চার্জ করা হয়। বিশ্লেষণ কার্যকলাপের জন্য কোন অতিরিক্ত চার্জ নেই, শুধুমাত্র অনুসন্ধান চালানোর জন্য স্বাভাবিক চার্জ।

ডিফল্ট বিকল্পের সাথে Query Explain ব্যবহার করুন

আপনি একটি ডিফল্ট বিকল্প অনুরোধ জমা দিতে ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে পারেন।

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

জাভা (প্রশাসন)

Query q = db.collection("col").whereGreaterThan("a", 1);
ExplainOptions options = ExplainOptions.builder().build();

ExplainResults<QuerySnapshot> explainResults = q.explain(options).get();
ExplainMetrics metrics = explainResults.getMetrics();
PlanSummary planSummary = metrics.getPlanSummary();

    
নোড (অ্যাডমিন)

const q = db.collection('col').where('country', '=', 'USA');
const options = { analyze : 'false' };

const explainResults = await q.explain(options);

const metrics = explainResults.metrics;
const plan = metrics.planSummary;

    

প্রত্যাবর্তিত ফলাফল JSON রূপান্তরিত করা যেতে পারে. উদাহরণ স্বরূপ:

{
    "indexes_used": [
        {"query_scope": "Collection", "properties": "(category ASC, __name__ ASC)"},
        {"query_scope": "Collection", "properties": "(country ASC, __name__ ASC)"},
    ]
}

আরও তথ্যের জন্য, কোয়েরি ব্যাখ্যা প্রতিবেদনের রেফারেন্স দেখুন।

বিশ্লেষণ বিকল্পের সাথে Query Explain ব্যবহার করুন

আপনি একটি বিশ্লেষণ বিকল্প অনুরোধ জমা দিতে ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে পারেন.

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

জাভা (প্রশাসন)

Query q = db.collection("col").whereGreaterThan("a", 1);

ExplainOptions options = ExplainOptions.builder().setAnalyze(true).build();

ExplainResults<QuerySnapshot> explainResults = q.explain(options).get();

ExplainMetrics metrics = explainResults.getMetrics();
PlanSummary planSummary = metrics.getPlanSummary();
List<Map<String, Object>> indexesUsed = planSummary.getIndexesUsed();
ExecutionStats stats = metrics.getExecutionStats();

    
নোড (অ্যাডমিন)

const q = db.collection('col').where('country', '=', 'USA');

const options = { analyze : 'true' };

const explainResults = await q.explain(options);

const metrics = explainResults.metrics;
const plan = metrics.planSummary;
const indexesUsed = plan.indexesUsed;
const stats = metrics.executionStats;

    

প্রত্যাবর্তিত ফলাফল JSON রূপান্তরিত করা যেতে পারে. নিম্নলিখিত উদাহরণটি stats বস্তুটি দেখায় যা আমরা এখন planInfo ছাড়াও পেতে পারি।

{
    "resultsReturned": "5",
    "executionDuration": "0.100718s",
    "readOperations": "5",
    "debugStats": {
               "index_entries_scanned": "95000",
               "documents_scanned": "5"
               "billing_details": {
                     "documents_billable": "5",
                     "index_entries_billable": "0",
                     "small_ops": "0",
                     "min_query_cost": "0",
               }
    }

}

আরও তথ্যের জন্য, কোয়েরি ব্যাখ্যা প্রতিবেদনের রেফারেন্স দেখুন।

ফলাফল ব্যাখ্যা করুন এবং সমন্বয় করুন

আসুন একটি উদাহরণের দৃশ্য দেখি যেখানে আমরা জেনার এবং প্রযোজনার দেশ অনুসারে চলচ্চিত্রগুলি জিজ্ঞাসা করি।

উদাহরণের জন্য, এই SQL ক্যোয়ারীটির সমতুল্য অনুমান করুন।

SELECT *
FROM /movies
WHERE category = 'Romantic' AND country = 'USA';

যদি আমরা বিশ্লেষণ বিকল্পটি ব্যবহার করি, তবে প্রত্যাবর্তিত মেট্রিক্স দেখায় যে ক্যোয়ারী দুটি একক-ক্ষেত্র সূচীতে চলে, (category ASC, __name__ ASC) এবং (country ASC, __name__ ASC) এটি 16500টি সূচক এন্ট্রি স্ক্যান করে, কিন্তু শুধুমাত্র 1200টি নথি প্রদান করে।

// Output query planning info
{
    "indexes_used": [
        {"query_scope": "Collection", "properties": "(category ASC, __name__ ASC)"},
        {"query_scope": "Collection", "properties": "(country ASC, __name__ ASC)"},
    ]
}

// Output query status
{
    "resultsReturned": "1200",
    "executionDuration": "0.118882s",
    "readOperations": "1200",
    "debugStats": {
               "index_entries_scanned": "16500",
               "documents_scanned": "1200"
               "billing_details": {
                     "documents_billable": "1200",
                     "index_entries_billable": "0",
                     "small_ops": "0",
                     "min_query_cost": "0",
               }
    }
}

ক্যোয়ারী চালানোর পারফরম্যান্স অপ্টিমাইজ করতে, আপনি একটি সম্পূর্ণ কভার কম্পোজিট সূচক তৈরি করতে পারেন (category ASC, country ASC, __name__ ASC)

এনালাইজ অপশন দিয়ে ক্যোয়ারীটি আবার চালালে আমরা দেখতে পাব যে এই ক্যোয়ারীটির জন্য সদ্য তৈরি সূচী নির্বাচন করা হয়েছে, এবং ক্যোয়ারীটি অনেক দ্রুত এবং আরও দক্ষতার সাথে চলে।

// Output query planning info
{
    "indexes_used": [
        {"query_scope": "Collection", "properties": "(category ASC, country ASC,  __name__ ASC)"}
    ]
}

// Output query stats
{
    "resultsReturned": "1200",
    "executionDuration": "0.026139s",
    "readOperations": "1200",
    "debugStats": {
               "index_entries_scanned": "1200",
               "documents_scanned": "1200"
               "billing_details": {
                     "documents_billable": "1200",
                     "index_entries_billable": "0",
                     "small_ops": "0",
                     "min_query_cost": "0",
               }
    }
}