क्वेरी की जानकारी का इस्तेमाल करके, क्वेरी की परफ़ॉर्मेंस को समझना

क्वेरी की जानकारी की मदद से, आप बैकएंड क्वेरी लागू करने पर, बैकएंड और परफ़ॉर्मेंस के आंकड़ों की पूरी जानकारी पाएं वापस किया जा सकता है. यह कई में EXPLAIN [ANALYZE] ऑपरेशन की तरह काम करता है रिलेशनल डेटाबेस सिस्टम.

क्वेरी की जानकारी के अनुरोध Firestore सर्वर क्लाइंट लाइब्रेरी का इस्तेमाल करके भेजे जा सकते हैं.

क्वेरी की पूरी जानकारी देने वाले नतीजों से यह समझने में मदद मिलती है कि आपकी क्वेरी कैसी हैं एक्ज़ीक्यूट किया गया, जो आपको गड़बड़ियां और संभावित सर्वर साइड की लोकेशन दिखाता है अड़चनें.

क्वेरी की जानकारी:

  • इससे आपको क्वेरी प्लानिंग के चरण के बारे में अहम जानकारी मिलती है, ताकि आप अपनी क्वेरी में बदलाव कर सकें इंडेक्स करने और क्षमता को बढ़ाने में मदद करता है.
  • विश्लेषण विकल्प का इस्तेमाल करके, आपको इन प्लैटफ़ॉर्म पर अपनी लागत और परफ़ॉर्मेंस को समझने में मदद मिलती है हर क्वेरी के मुताबिक आधार बनाया जाता है. इससे आपको अलग-अलग क्वेरी के हिसाब से तुरंत कार्रवाई करने की सुविधा मिलती है ताकि उनका इस्तेमाल किया जा सके.

क्वेरी की पूरी जानकारी देने वाले विकल्पों को समझना: डिफ़ॉल्ट तरीका और विश्लेषण करें

क्वेरी की पूरी जानकारी वाली कार्रवाइयां, default विकल्प का इस्तेमाल करके की जा सकती हैं या विश्लेषण विकल्प का इस्तेमाल करें.

डिफ़ॉल्ट विकल्प चुनने पर, क्वेरी की जानकारी में क्वेरी को प्लान किया जाता है, लेकिन वह क्वेरी को स्किप कर देता है के लेवल पर काम करते हैं. इससे प्लानर स्टेज की जानकारी मिलेगी. आप इसका इस्तेमाल यह पता लगाने के लिए करें कि क्वेरी में ज़रूरी इंडेक्स हैं या नहीं. साथ ही, इंडेक्स का इस्तेमाल किया जाता है. उदाहरण के लिए, इससे आपको यह सत्यापित करने में मदद मिलेगी कि कई अलग-अलग इंडेक्स करना.

विश्लेषण विकल्प की मदद से, क्वेरी की मदद से प्लान के बारे में बताएं और क्वेरी. ऐसा करने से, प्लानर की पहले से बताई गई जानकारी के साथ-साथ वह जानकारी भी वापस आ जाती है क्वेरी एक्ज़ीक्यूशन के रनटाइम के आंकड़े. इसमें बिलिंग किसी क्वेरी की जानकारी के साथ-साथ क्वेरी के लिए सिस्टम-लेवल की इनसाइट लागू करता है. इस टूल का इस्तेमाल करके, अलग-अलग क्वेरी और इंडेक्स की जांच की जा सकती है कॉन्फ़िगरेशन सेट करके, उनकी लागत और इंतज़ार के समय को ऑप्टिमाइज़ किया जा सकता है.

क्वेरी की पूरी जानकारी देने वाली सुविधा की कीमत क्या है?

जब डिफ़ॉल्ट विकल्प के साथ क्वेरी की जानकारी का इस्तेमाल किया जाता है, तो कोई इंडेक्स या रीड ऑपरेशन नहीं होता किए जाते हैं. क्वेरी की जटिलता पर ध्यान दिए बिना, एक रीड ऑपरेशन का शुल्क लिया जाता है.

जब विश्लेषण करने के विकल्प के साथ क्वेरी की जानकारी का इस्तेमाल किया जाता है, तो इंडेक्स और रीड ऑपरेशन किए जाते हैं, इसलिए आपसे हमेशा की तरह क्वेरी के लिए शुल्क लिया जाता है. कोई अतिरिक्त जानकारी नहीं है विश्लेषण गतिविधि के लिए शुल्क, क्वेरी के लिए केवल सामान्य शुल्क लागू किया गया.

डिफ़ॉल्ट विकल्प के साथ क्वेरी की जानकारी का इस्तेमाल करें

डिफ़ॉल्ट विकल्प का अनुरोध सबमिट करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है.

ध्यान दें कि अनुरोधों की पुष्टि IAM की मदद से की जाती है. इसके लिए, सामान्य क्वेरी कार्रवाइयों के लिए अनुमतियां. पुष्टि करने की अन्य तकनीकें, जैसे कि Firebase से पुष्टि करने की सुविधा को अनदेखा किया जाता है. ज़्यादा जानकारी के लिए, सर्वर क्लाइंट लाइब्रेरी के लिए IAM.

Java (एडमिन)

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)"},
    ]
}

ज़्यादा जानकारी के लिए, क्वेरी की जानकारी देने वाली रिपोर्ट का रेफ़रंस देखें.

विश्लेषण के विकल्प के साथ क्वेरी की जानकारी का इस्तेमाल करना

विश्लेषण के विकल्प का अनुरोध सबमिट करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है.

ध्यान दें कि अनुरोधों की पुष्टि IAM की मदद से की जाती है. इसके लिए, सामान्य क्वेरी कार्रवाइयों के लिए अनुमतियां. पुष्टि करने की अन्य तकनीकें, जैसे कि Firebase से पुष्टि करने की सुविधा को अनदेखा किया जाता है. ज़्यादा जानकारी के लिए, सर्वर क्लाइंट लाइब्रेरी के लिए IAM.

Java (एडमिन)

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;

    

इस उदाहरण में, planInfo के साथ-साथ stats ऑब्जेक्ट भी दिखाया गया है. रिस्पॉन्स का सटीक फ़ॉर्मैट, एक्ज़ीक्यूशन के एनवायरमेंट के हिसाब से तय होता है. कॉन्टेंट बनाने रिस्पॉन्स का उदाहरण JSON फ़ॉर्मैट में है.

{
    "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",
               }
    }

}

ज़्यादा जानकारी के लिए, क्वेरी की जानकारी देने वाली रिपोर्ट का रेफ़रंस देखें.

नतीजों को समझना और उनमें बदलाव करना

चलिए, एक उदाहरण देखते हैं. इसमें हम शैली और फ़िल्में के हिसाब से क्वेरी करते हैं उस देश में ही उपलब्ध कराया गया है.

उदाहरण के लिए, मान लें कि यह एसक्यूएल क्वेरी के बराबर है.

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

अगर हम विश्लेषण करने के विकल्प का इस्तेमाल करते हैं, तो नतीजे में दिखाई गई मेट्रिक में क्वेरी दो सिंगल-फ़ील्ड इंडेक्स, (category ASC, __name__ ASC) और (country ASC, __name__ ASC). यह 16,500 इंडेक्स एंट्री को स्कैन करता है, लेकिन सिर्फ़ 1,200 दस्तावेज़.

// 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",
               }
    }
}