क्वेरी जीवनचक्र और प्लानर

PostgreSQL में क्वेरी प्रदर्शन सुधारना

Amy McCarty

Instructor

बेसिक क्वेरी जीवनचक्र

System Front end steps Back end processes
1 Parser क्वेरी डेटाबेस को भेजें सिंटैक्स जाँचे। सिस्टम में संग्रहीत नियमों के आधार पर SQL को अधिक कंप्यूटर-अनुकूल सिंटैक्स में बदले.
2 Planner & Optimizer क्वेरी कार्यों का आकलन और ऑप्टिमाइज़ करें डेटाबेस आँकड़ों से क्वेरी प्लान बनाए। लागत गिने और सर्वोत्तम प्लान चुने.
3 Executor क्वेरी परिणाम लौटाएँ क्वेरी प्लान का पालन करके क्वेरी चलाए.
PostgreSQL में क्वेरी प्रदर्शन सुधारना

क्वेरी प्लानर और ऑप्टिमाइज़र

SQL संरचना में बदलाव के प्रति संवेदनशील

  • प्लान ट्री जनरेट करता है
    • कदमों के अनुरूप नोड्स
    • EXPLAIN से विज़ुअलाइज़ करें
  • हर ट्री की लागत का अनुमान
    • आँकड़े pg_tables से
    • समय-आधारित ऑप्टिमाइज़ेशन
1 Plan tree: https://www.postgresql.org/docs/current/querytree.html
PostgreSQL में क्वेरी प्रदर्शन सुधारना

pg_tables से आँकड़े

SELECT * FROM pg_class
WHERE relname = 'mytable'
-- sample of output columns
| relname | relhasindex |
SELECT * FROM pg_stats
WHERE tablename = 'mytable'
-- sample of output columns
null_frac | avg_width | n_distinct | 
  • कॉलम इंडेक्स
  • null मानों की गिनती
  • कॉलम चौड़ाई
  • अलग-अलग मान
PostgreSQL में क्वेरी प्रदर्शन सुधारना

EXPLAIN

 

  • क्वेरी प्लान पर झलक
  • कदम और लागत के अनुमान
    • क्वेरी नहीं चलती

 

  • cheeses टेबल का सीक्वेंशियल स्कैन
  • लागत और साइज अनुमान

 

EXPLAIN
SELECT * FROM cheeses

 

Seq Scan on cheeses 
(cost=0.00..10.50 rows=5725 width=296)
PostgreSQL में क्वेरी प्रदर्शन सुधारना

EXPLAIN: Scan

 

  • क्वेरी प्लान का स्टेप
  • पंक्तियाँ लौटाता है

 

Seq Scan on cheeses (cost=0.00..10.50 rows=5725 width=296)

 

 

 

 

  • Seq Scan: टेबल की सभी पंक्तियों का स्कैन
PostgreSQL में क्वेरी प्रदर्शन सुधारना

EXPLAIN: Cost

 

  • बिन आयाम का
  • एक जैसे आउटपुट वाली संरचनाओं की तुलना करें
    • अलग आउटपुट वाली क्वेरियों की तुलना नहीं करनी चाहिए

 

Seq Scan on cheeses (cost=0.00..10.50 rows=5725 width=296)

 

 

 

 

 

  • 0.00.. : start up time
  • ..10.50 : total time

  • total time = start up + run time

PostgreSQL में क्वेरी प्रदर्शन सुधारना

EXPLAIN: Size

 

  • साइज अनुमान

 

Seq Scan on cheeses (cost=0.00..10.50 rows=5725 width=296)

 

 

 

  • rows: क्वेरी चलाने के लिए जाँचनी वाली पंक्तियाँ
  • width: पंक्ति की बाइट-चौड़ाई
PostgreSQL में क्वेरी प्रदर्शन सुधारना

EXPLAIN के साथ WHERE क्लॉज़

EXPLAIN
SELECT * FROM cheeses WHERE species IN ('goat','sheep') 
Seq Scan on cheeses (cost=0.00..378.90 rows=3 width=118)
 -> Filter: (species = ANY ('{"goat","sheep"}'::text[]))
  • नीचे से ऊपर तक
    • स्टेप 1: Filter
    • स्टेप 2: Sequential scan
  • WHERE क्लॉज़
    • स्कैन की पंक्तियाँ घटती हैं और कुल लागत बढ़ती है
PostgreSQL में क्वेरी प्रदर्शन सुधारना

EXPLAIN के साथ index

EXPLAIN
SELECT * FROM cheeses WHERE species IN ('goat','sheep') -- index on species column
Bitmap Index Scan using species_idx on cheeses (cost=0.29..12.66 rows=3 width=118)
  Index Cond: (species = ANY ('{"goat","sheep"}'::text[]))
  • स्टेप 1: Bitmap Index Scan
    • Index Cond स्कैन स्टेप समझाता है
  • INDEX
    • स्टार्टअप कॉस्ट 0 से बढ़ी
    • कुल लागत 379 से घटी
PostgreSQL में क्वेरी प्रदर्शन सुधारना

अभ्यास करते हैं!

PostgreSQL में क्वेरी प्रदर्शन सुधारना

Preparing Video For Download...