சோம்பேறிகளுக்கான மேம்படுத்தல்: PostgreSQL 12 செயல்திறனை எவ்வாறு மேம்படுத்துகிறது

சோம்பேறிகளுக்கான மேம்படுத்தல்: PostgreSQL 12 செயல்திறனை எவ்வாறு மேம்படுத்துகிறது

PostgreSQL 12, "உலகின் சிறந்த ஓப்பன் சோர்ஸ் ரிலேஷனல் டேட்டாபேஸ்" இன் சமீபத்திய பதிப்பு, ஓரிரு வாரங்களில் வெளிவரவுள்ளது (எல்லாம் திட்டமிட்டபடி நடந்தால்). இது வருடத்திற்கு ஒருமுறை டன் புதிய அம்சங்களுடன் புதிய பதிப்பை வெளியிடும் வழக்கமான அட்டவணையைப் பின்பற்றுகிறது, வெளிப்படையாகச் சொன்னால் அது சுவாரஸ்யமாக இருக்கிறது. அதனால்தான் நான் PostgreSQL சமூகத்தின் செயலில் உறுப்பினரானேன்.

எனது கருத்துப்படி, முந்தைய வெளியீடுகளைப் போலல்லாமல், PostgreSQL 12 ஒன்று அல்லது இரண்டு புரட்சிகர அம்சங்களைக் கொண்டிருக்கவில்லை (பகிர்வு அல்லது இணையான வினவல் போன்றவை). PostgreSQL 12 இன் முக்கிய அம்சம் அதிக ஸ்திரத்தன்மை என்று நான் ஒருமுறை கேலி செய்தேன். உங்கள் வணிகத்தின் முக்கியமான தரவை நீங்கள் நிர்வகிக்கும்போது அது உங்களுக்குத் தேவையா?

ஆனால் PostgreSQL 12 அங்கு நிற்கவில்லை: புதிய அம்சங்கள் மற்றும் மேம்பாடுகளுடன், பயன்பாடுகள் சிறப்பாக செயல்படும், நீங்கள் செய்ய வேண்டியது எல்லாம் மேம்படுத்துவதுதான்!

(சரி, ஒருவேளை குறியீடுகளை மீண்டும் உருவாக்கலாம், ஆனால் இந்த வெளியீட்டில் இது நாம் பழகியதைப் போல பயமாக இல்லை.)

PostgreSQL ஐ மேம்படுத்துவது மற்றும் தேவையற்ற சலசலப்பு இல்லாமல் உடனடியாக குறிப்பிடத்தக்க மேம்பாடுகளை அனுபவிப்பது நன்றாக இருக்கும். சில ஆண்டுகளுக்கு முன்பு, நான் PostgreSQL 9.4 இலிருந்து PostgreSQL 10க்கு மேம்படுத்தப்பட்டதை மதிப்பாய்வு செய்தேன், மேலும் PostgreSQL 10 இல் மேம்படுத்தப்பட்ட வினவல் இணையானதன் மூலம் பயன்பாடு எவ்வாறு வேகமெடுத்தது என்பதைப் பார்த்தேன். மேலும், மிக முக்கியமாக, என்னிடம் இருந்து கிட்டத்தட்ட எதுவும் தேவையில்லை (ஒரு கட்டமைப்பு அளவுருவை அமைக்கவும். max_parallel_workers).

ஏற்கிறேன், மேம்படுத்தப்பட்ட உடனேயே பயன்பாடுகள் சிறப்பாக செயல்படும் போது இது வசதியானது. மேலும் பயனர்களைப் பிரியப்படுத்த நாங்கள் மிகவும் கடினமாக முயற்சி செய்கிறோம், ஏனெனில் PostgreSQL இன்னும் அதிகமானவற்றைக் கொண்டுள்ளது.

PostgreSQL 12 க்கு எளிய மேம்படுத்தல் எப்படி உங்களை மகிழ்ச்சியடையச் செய்யும்? நான் இப்போது சொல்கிறேன்.

முக்கிய அட்டவணை மேம்பாடுகள்

அட்டவணைப்படுத்தல் இல்லாமல், தரவுத்தளம் வெகுதூரம் செல்லாது. வேறு எப்படி விரைவாக தகவலைக் கண்டறிய முடியும்? PostgreSQL இன் அடிப்படை அட்டவணைப்படுத்தல் அமைப்பு அழைக்கப்படுகிறது பி-மரம். இந்த வகை குறியீடு சேமிப்பக அமைப்புகளுக்கு உகந்ததாக உள்ளது.

நாங்கள் வெறுமனே ஆபரேட்டரைப் பயன்படுத்துகிறோம் CREATE INDEX ON some_table (some_column), மற்றும் PostgreSQL ஆனது குறியீட்டை புதுப்பித்த நிலையில் வைத்திருக்க நிறைய வேலை செய்கிறது. மந்திரம் போல எல்லாம் தானாக வேலை செய்கிறது.

ஆனால் PostgreSQL குறியீடுகளுக்கு ஒரு சிக்கல் உள்ளது - அவை ஊதப்பட்டிருக்கின்றன மற்றும் கூடுதல் வட்டு இடத்தை எடுத்து தரவு மீட்டெடுப்பு மற்றும் புதுப்பித்தல் செயல்திறனை குறைக்கிறது. "புளோட்" என்பதன் மூலம், குறியீட்டு கட்டமைப்பை பயனற்ற முறையில் பராமரிப்பதை நான் குறிக்கிறேன். இது அகற்றும் குப்பைத் தொட்டிகளுடன் தொடர்புடையதாக இருக்கலாம் - அல்லது இல்லாமல் இருக்கலாம் வெற்றிட (தகவலுக்கு பீட்டர் ககனுக்கு நன்றி)பீட்டர் ஜியோகெகன்)). குறியீடானது சுறுசுறுப்பாக மாறிக்கொண்டிருக்கும் பணிச்சுமைகளில் குறியீட்டு வீக்கம் குறிப்பாக கவனிக்கப்படுகிறது.

PostgreSQL 12 பி-ட்ரீ இன்டெக்ஸ்களின் செயல்திறனை பெரிதும் மேம்படுத்துகிறது, மேலும் TPC-C போன்ற வரையறைகளுடன் கூடிய சோதனைகள் சராசரியாக 40% குறைவான இடம் இப்போது பயன்படுத்தப்படுகிறது என்பதைக் காட்டுகிறது. இப்போது நாம் பி-ட்ரீ இன்டெக்ஸ்களை பராமரிப்பதில் மட்டும் (அதாவது எழுதும் செயல்பாடுகளில்) குறைந்த நேரத்தை செலவிடுகிறோம், ஆனால் குறியீடுகள் மிகவும் சிறியதாக இருப்பதால் தரவை மீட்டெடுக்கிறோம்.

தங்கள் அட்டவணைகளை செயலில் புதுப்பிக்கும் பயன்பாடுகள் - பொதுவாக OLTP பயன்பாடுகள் (நிகழ் நேர பரிவர்த்தனை செயலாக்கம்) - வட்டு மற்றும் செயல்முறை கோரிக்கைகளை மிகவும் திறமையாக பயன்படுத்தும். அதிக வட்டு இடம், உள்கட்டமைப்பை மேம்படுத்தாமல் தரவுத்தளத்தில் அதிக இடம் வளர வேண்டும்.

சில மேம்படுத்தல் உத்திகளுக்கு இந்த நன்மைகளைப் பயன்படுத்த பி-ட்ரீ குறியீடுகளை மீண்டும் உருவாக்க வேண்டும் (எ.கா. pg_upgrade தானாக குறியீடுகளை மீண்டும் உருவாக்காது). PostgreSQL இன் முந்தைய பதிப்புகளில், அட்டவணையில் பெரிய குறியீடுகளை மீண்டும் உருவாக்குவது குறிப்பிடத்தக்க செயலிழப்பை ஏற்படுத்தியது, ஏனெனில் இதற்கிடையில் மாற்றங்களைச் செய்ய முடியவில்லை. ஆனால் PostgreSQL 12 மற்றொரு சிறந்த அம்சத்தைக் கொண்டுள்ளது: இப்போது நீங்கள் கட்டளைக்கு இணையாக குறியீடுகளை மீண்டும் உருவாக்கலாம் REINDEX ஒரே நேரத்தில்வேலையில்லா நேரத்தை முற்றிலும் தவிர்க்க வேண்டும்.

PostgreSQL 12 இல் அட்டவணைப்படுத்தல் உள்கட்டமைப்பில் மற்ற மேம்பாடுகள் உள்ளன. ஏதோ மந்திரம் இருந்த இன்னொரு விஷயம் - எழுத முன் பதிவு, aka WAL (எழுது-முன் பதிவு). தோல்வி மற்றும் நகலெடுப்பின் போது, ​​PostgreSQL இல் உள்ள ஒவ்வொரு பரிவர்த்தனையையும் எழுதும் பதிவு பதிவு செய்கிறது. பயன்பாடுகள் அதை காப்பகப்படுத்தவும் மற்றும் பயன்படுத்தவும் புள்ளி-இன்-நேர மீட்பு. நிச்சயமாக, எழுதும் பதிவு வட்டில் எழுதப்பட்டது, இது செயல்திறனை பாதிக்கலாம்.

குறியீட்டு கட்டுமானத்தின் போது GiST, GIN மற்றும் SP-GiST குறியீடுகளால் உருவாக்கப்பட்ட WAL பதிவுகளின் மேல்நிலையை PostgreSQL 12 குறைத்துள்ளது. இது பல உறுதியான பலன்களை வழங்குகிறது: WAL பதிவுகள் குறைந்த வட்டு இடத்தை எடுத்துக்கொள்கின்றன, மேலும் பேரிடர் மீட்பு அல்லது பாயிண்ட்-இன்-டைம் மீட்டெடுப்பின் போது தரவு வேகமாக மீண்டும் இயக்கப்படுகிறது. உங்கள் பயன்பாடுகளில் இதுபோன்ற குறியீடுகளைப் பயன்படுத்தினால் (உதாரணமாக, PostGIS அடிப்படையிலான புவியியல் பயன்பாடுகள் GiST குறியீட்டை அதிகம் பயன்படுத்துகின்றன), இது உங்கள் பங்கில் எந்த முயற்சியும் இல்லாமல் அனுபவத்தை கணிசமாக மேம்படுத்தும் மற்றொரு அம்சமாகும்.

பகிர்வு - பெரியது, சிறந்தது, வேகமானது

PostgreSQL 10 அறிமுகப்படுத்தப்பட்டது அறிவிப்பு பகிர்வு. PostgreSQL 11 இல் இதைப் பயன்படுத்துவது மிகவும் எளிதாகிவிட்டது. PostgreSQL 12 இல் நீங்கள் பிரிவுகளின் அளவை மாற்றலாம்.

PostgreSQL 12 இல், பகிர்வு அமைப்பின் செயல்திறன் கணிசமாக சிறப்பாக உள்ளது, குறிப்பாக அட்டவணையில் ஆயிரக்கணக்கான பகிர்வுகள் இருந்தால். எடுத்துக்காட்டாக, ஒரு வினவல் ஆயிரக்கணக்கான பகிர்வுகளைக் கொண்ட அட்டவணையில் உள்ள சில பகிர்வுகளை மட்டுமே பாதித்தால், அது மிக வேகமாகச் செயல்படும். இந்த வகையான வினவல்களுக்கு மட்டும் செயல்திறன் மேம்படுத்தப்படவில்லை. பல பகிர்வுகளைக் கொண்ட அட்டவணையில் INSERT செயல்பாடுகள் எவ்வளவு வேகமாக உள்ளன என்பதையும் நீங்கள் கவனிப்பீர்கள்.

பயன்படுத்தி தரவு பதிவு நகல் - மூலம், இது ஒரு சிறந்த வழி மொத்த தரவு பதிவிறக்கம் மற்றும் இங்கே ஒரு உதாரணம் JSON பெறுகிறது - PostgreSQL 12 இல் பகிர்ந்த அட்டவணைகள் மிகவும் திறமையானவை. நகல் மூலம் எல்லாம் ஏற்கனவே வேகமாக இருந்தது, ஆனால் PostgreSQL 12 இல் அது முற்றிலும் பறக்கிறது.

இந்த நன்மைகளுக்கு நன்றி, PostgreSQL ஆனது இன்னும் பெரிய தரவுத் தொகுப்புகளைச் சேமித்து அவற்றை எளிதாக மீட்டெடுக்க அனுமதிக்கிறது. உங்கள் பங்கில் எந்த முயற்சியும் இல்லை. பயன்பாட்டில் பல பகிர்வுகள் இருந்தால், நேரத் தொடர் தரவுகளைப் பதிவு செய்தல், ஒரு எளிய மேம்படுத்தல் அதன் செயல்திறனை கணிசமாக மேம்படுத்தும்.

இது சரியாக ஒரு "மேம்படுத்துதல் மற்றும் மகிழுங்கள்" மேம்பாடு இல்லை என்றாலும், பகிர்வு அட்டவணைகளை குறிப்பிடும் வெளிநாட்டு விசைகளை உருவாக்க PostgreSQL 12 உங்களை அனுமதிக்கிறது, பகிர்வு செய்வதை மகிழ்ச்சியுடன் வேலை செய்கிறது.

வினவல்களுடன் இன்னும் சிறப்பாக உள்ளது

போது உள்ளமைக்கப்பட்ட பொதுவான அட்டவணை வெளிப்பாடுகளுக்கு ஒரு இணைப்பு பயன்படுத்தப்பட்டது (அக்கா CTE, aka வினவல்கள்), பற்றி ஒரு கட்டுரை எழுத என்னால் காத்திருக்க முடியவில்லை PostgreSQL உடன் பயன்பாட்டு டெவலப்பர்கள் எவ்வளவு மகிழ்ச்சியாக இருந்தனர். பயன்பாட்டை விரைவுபடுத்தும் அம்சங்களில் இதுவும் ஒன்றாகும். நிச்சயமாக, நீங்கள் CTE ஐப் பயன்படுத்தாவிட்டால்.

SQL க்கு புதியவர்கள் CTEகளைப் பயன்படுத்த விரும்புவதை நான் அடிக்கடி காண்கிறேன். தனிப்பட்ட முறையில், இந்த வினவல்களை மீண்டும் எழுத நான் விரும்பினேன் இல்லாமல் CTE மற்றும் உற்பத்தித்திறனை அதிகரிக்கும். இப்போது எல்லாம் வேறு.

PostgreSQL 12 பக்க விளைவுகள் இல்லாமல் ஒரு குறிப்பிட்ட வகை CTE இன் இன்லைன் செய்ய உங்களை அனுமதிக்கிறது (SELECT), இது கோரிக்கையின் முடிவில் ஒரு முறை மட்டுமே பயன்படுத்தப்படுகிறது. நான் மீண்டும் எழுதிய CTE வினவல்களைக் கண்காணித்தால், அவற்றில் பெரும்பாலானவை இந்த வகைக்குள் வரும். இது டெவலப்பர்களுக்கு தெளிவான குறியீட்டை எழுத உதவுகிறது, அது இப்போது விரைவாகவும் இயங்குகிறது.

மேலும், PostgreSQL 12 நீங்கள் எதுவும் செய்யாமல், SQL செயல்படுத்தலை மேம்படுத்துகிறது. நான் இப்போது இதுபோன்ற வினவல்களை மேம்படுத்த வேண்டிய அவசியமில்லை என்றாலும், வினவல் தேர்வுமுறையில் PostgreSQL தொடர்ந்து செயல்படுவது மிகவும் நல்லது.

ஜஸ்ட்-இன்-டைம் (JIT) - இப்போது இயல்புநிலை

ஆதரவுடன் PostgreSQL 12 கணினிகளில் LLVM JIT தொகுப்பு இயல்பாகவே இயக்கப்பட்டது. முதலில், நீங்கள் ஆதரவைப் பெறுவீர்கள் JIT ஐ சில உள் செயல்பாடுகளுக்கு, இரண்டாவதாக, தேர்ந்தெடுக்கப்பட்ட பட்டியல்களில் (எளிமையான உதாரணம் x + y) வினவல்கள் (எளிமையான உதாரணம் x + y)

PostgreSQL 12 இல் JIT இயல்பாகவே இயக்கப்பட்டிருப்பதால், செயல்திறன் தானாகவே மேம்படும், ஆனால் JIT ஐ அறிமுகப்படுத்திய PostgreSQL 11 இல் பயன்பாட்டைச் சோதித்துப் பார்க்க பரிந்துரைக்கிறேன், வினவல் செயல்திறனை அளவிட மற்றும் நீங்கள் ஏதாவது டியூன் செய்ய வேண்டுமா என்று பார்க்கவும்.

PostgreSQL 12 இல் மீதமுள்ள புதிய அம்சங்கள் பற்றி என்ன?

நிலையான SQL/JSON வழி வெளிப்பாடுகளைப் பயன்படுத்தி JSON தரவை ஆராயும் திறன் முதல் அளவுருவுடன் பல காரணி அங்கீகாரம் வரை PostgreSQL 12 பல புதிய அம்சங்களைக் கொண்டுள்ளது. clientcert=verify-full, நெடுவரிசைகளை உருவாக்கியது மற்றும் பல. ஒரு தனி இடுகை போதும்.

PostgreSQL 10 போலவே, PostgreSQL 12 ஆனது மேம்படுத்தப்பட்ட உடனேயே ஒட்டுமொத்த செயல்திறனை மேம்படுத்தும். நீங்கள் நிச்சயமாக உங்கள் சொந்த பாதையை வைத்திருக்க முடியும் - நான் PostgreSQL 10 இல் செய்ததைப் போல, மேம்பாடுகளைச் செயல்படுத்தும் முன் உற்பத்தி அமைப்பில் இதே போன்ற நிலைமைகளின் கீழ் பயன்பாட்டைச் சோதிக்கவும். PostgreSQL 12 ஏற்கனவே நான் எதிர்பார்த்ததை விட மிகவும் நிலையானதாக இருந்தாலும், சோதனையில் சோம்பேறியாக இருக்க வேண்டாம். பயன்பாடுகளை முழுமையாக, உற்பத்தியில் வெளியிடுவதற்கு முன்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்