தொகுதி பாடங்கள் (2/4)
விளக்கவும் மற்றும் பகுப்பாய்வு செய்யவும்
நீங்கள் இப்போது உருவாக்கிய அந்த நல்ல குறியீட்டைப் பயன்படுத்த வேண்டுமா என்று தரவுத்தளம் தேர்வு செய்யும் என்பதை நீங்கள் எப்போதாவது யோசித்திருக்கிறீர்களா? ஒரு வினவலில் Enter ஐ அழுத்தியவுடன் (சொல்லுங்கள், ஒரு சங்கிலியால் பிணைக்கப்பட்ட குழுவுடன் நீண்ட சேர்வது), Query Planner வினவலை நிறைவேற்றுவதற்காக பல்லாயிரக்கணக்கான உத்திகளைக் கணக்கிட்டு, கோட்பாட்டின்படி, வேகமாக இருக்கும் என நம்புவதைத் தேர்ந்தெடுக்கும்.
ஆனால் ஒரு டெவலப்பராக, வினவல் திட்டமிடுபவரின் இருண்ட மனதை நீங்கள் பார்க்க வேண்டும்.
விளக்கவும்
திட்டமிடுபவர் எவ்வாறு தொடர விரும்புகிறார் என்பதைக் கண்டறிய, உங்கள் வினவலின் தொடக்கத்தில் EXPLAIN என்ற மந்திர வார்த்தையை வைக்கவும்.
EXPLAIN SELECT * FROM orders WHERE status = 'delivered';முடிவு உத்தரவுகளாக இருக்காது! அதற்கு பதிலாக, வெளியீட்டில் திட்டத்தைப் பார்ப்பீர்கள் (மதிப்பிடப்பட்ட புள்ளிவிவரங்களுடன்):
Seq Scan on orders (cost=0.00..25.88 rows=15 width=40)
Filter: (status = 'delivered'::text)இது நமக்கு சொல்கிறது:
- திட்டமிடுபவர் Seq ஸ்கேன் (முரட்டு, முழு வட்டின் தொடர் வாசிப்பு) பயன்படுத்துவார். பில்லியன் கணக்கான ஆர்டர்கள் இருந்தால் மோசமானது.
- இது ~15 வரிசைகள் திரும்பப் பெறப்படும் என்று மதிப்பிடுகிறது, மேலும் முன் ஏற்றப்பட்ட CPU சுழற்சிகளில் "செலவை" கணக்கிடுகிறது.
பகுப்பாய்வை விளக்கவும்
EXPLAIN ஆனது அல்காரிதமிக் யூகங்களை நம்பியிருக்கும் போது (கடந்த சில மணிநேரங்களில் தரவுகளின் அடிப்படையில் கணக்கிடப்பட்ட உலகளாவிய புள்ளிவிவரங்களின் அடிப்படையில்), EXPLAIN ANALYZE உண்மையில் வினவலை உண்மையான (மற்றும் முழு தருக்க முடிவுகளுக்காகக் காத்திருக்கிறது), கணித ரீதியாக முழுமையான விதிமுறைகளுடன் ஒப்பிடுகிறது.
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 90;Index Scan using idx_orders_cust on orders (cost=0.15..8.13 rows=4 width=40) (actual time=0.012..0.015 rows=4 loops=1)
Index Cond: (customer_id = 90)
Planning Time: 0.081 ms
Execution Time: 0.033 msஹூரே! எங்கள் இரண்டாம் நிலை idx_orders_cust இன்டெக்ஸில் இண்டெக்ஸ் ஸ்கேன்ஐப் பயன்படுத்த தரவுத்தளம் முடிவு செய்துள்ளது என்பதை இங்கே நீங்கள் அறிந்துகொள்கிறீர்கள், பறக்கும்போது மில்லியன் கணக்கான வரிசைகளைத் தவிர்த்து, ஒரு நொடியில் ஆயிரத்தில் ஒரு பங்கு மைக்ரோஸ்கோபிக் செயலாக்க நேரத்தை எடுத்துக்கொள்கிறது.
உங்கள் முறை
PostgreSQL 10 யூனிட்டுகளுக்குக் குறைவான தற்போதைய பங்குகளைக் கொண்ட தயாரிப்புகளை எப்படிக் கண்டுபிடிக்க விரும்புகிறது என்பதைக் கண்டறிய அடிப்படை விளக்கக் கட்டளையை எழுதவும். (இந்தப் படியில் analyZE ஐப் பயன்படுத்த வேண்டாம்.)
குறிப்பைக் காட்டு
ஏற்கனவே உள்ள அறிக்கையின் தொடக்கத்தில் EXPLAIN என்ற வார்த்தையை முன்வைக்கவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
உண்மையான அளவீடுகளைப் பெறுதல்
எங்களுக்கு உண்மையான செயல்திறன் கண்டறிதல் (நேரங்கள் மற்றும் சுழற்சிகள்) தேவை, கணித ரீதியாக யூகிக்கப்பட்ட ஸ்கெட்ச் அல்ல.\nபிரத்யேக அறிக்கையைப் பயன்படுத்தி, அதை இயக்குவதன் மூலம், 2025 ஜனவரி 1 ஆம் தேதிக்கு முன் பதிவுசெய்யப்பட்ட அனைத்து 'வாடிக்கையாளர்களின்' தேடலும் ('signed_up_on' < '2025-01-01').
குறிப்பைக் காட்டு
EXPLAIN செய்த உடனேயே ANALYZE என்ற வார்த்தையைச் சேர்க்கவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்