సోమరితనం కోసం అప్‌గ్రేడ్ చేయండి: 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 B-ట్రీ ఇండెక్స్‌ల పనితీరును బాగా మెరుగుపరుస్తుంది మరియు TPC-C వంటి బెంచ్‌మార్క్‌లతో చేసిన ప్రయోగాలు ఇప్పుడు సగటున 40% తక్కువ స్థలం ఉపయోగించబడుతున్నాయని చూపించాయి. ఇప్పుడు మనం B-ట్రీ ఇండెక్స్‌లను నిర్వహించడం (అంటే, రైట్ ఆపరేషన్‌లపై) మాత్రమే కాకుండా, డేటాను తిరిగి పొందడంలో కూడా తక్కువ సమయాన్ని వెచ్చిస్తాము, ఎందుకంటే సూచికలు చాలా చిన్నవిగా ఉంటాయి.

తమ టేబుల్‌లను సక్రియంగా అప్‌డేట్ చేసే అప్లికేషన్‌లు - సాధారణంగా OLTP అప్లికేషన్‌లు (నిజ-సమయ లావాదేవీ ప్రాసెసింగ్) - డిస్క్ మరియు ప్రాసెస్ అభ్యర్థనలను మరింత సమర్థవంతంగా ఉపయోగిస్తుంది. ఇన్‌ఫ్రాస్ట్రక్చర్‌ను అప్‌గ్రేడ్ చేయకుండా మరింత డిస్క్ స్థలం, డేటాబేస్ మరింత ఎక్కువ స్థలం పెరగాలి.

ఈ ప్రయోజనాల ప్రయోజనాన్ని పొందడానికి కొన్ని అప్‌గ్రేడ్ వ్యూహాలకు B-ట్రీ ఇండెక్స్‌లను పునర్నిర్మించడం అవసరం (ఉదా. pg_upgrade స్వయంచాలకంగా సూచికలను పునర్నిర్మించదు). PostgreSQL యొక్క మునుపటి సంస్కరణల్లో, టేబుల్‌లపై పెద్ద సూచికలను పునర్నిర్మించడం వలన గణనీయమైన పనికిరాని సమయం ఏర్పడింది, ఎందుకంటే ఈ సమయంలో మార్పులు చేయలేము. కానీ PostgreSQL 12 మరొక అద్భుతమైన ఫీచర్‌ను కలిగి ఉంది: ఇప్పుడు మీరు ఆదేశంతో సమాంతరంగా సూచికలను పునర్నిర్మించవచ్చు రెఇండెక్స్ ఏకకాలంలోపనికిరాని సమయాన్ని పూర్తిగా నివారించడానికి.

PostgreSQL 12లో ఇండెక్సింగ్ ఇన్‌ఫ్రాస్ట్రక్చర్‌కు ఇతర మెరుగుదలలు ఉన్నాయి. ఏదో మాయాజాలం ఉన్న మరొక విషయం - వ్రాసే ముందు లాగ్, అకా WAL (రైట్-ఎహెడ్ లాగ్). వైఫల్యం మరియు ప్రతిరూపణ విషయంలో పోస్ట్‌గ్రెస్‌ఎస్‌క్యూఎల్‌లోని ప్రతి లావాదేవీని రైట్-ఎహెడ్ లాగ్ రికార్డ్ చేస్తుంది. అప్లికేషన్‌లు దీన్ని ఆర్కైవ్ చేయడానికి ఉపయోగిస్తాయి మరియు పాయింట్-ఇన్-టైమ్ రికవరీ. వాస్తవానికి, రైట్-ఎహెడ్ లాగ్ డిస్క్‌కి వ్రాయబడింది, ఇది పనితీరుపై ప్రభావం చూపుతుంది.

PostgreSQL 12 ఇండెక్స్ నిర్మాణ సమయంలో GiST, GIN మరియు SP-GiST సూచికల ద్వారా సృష్టించబడిన WAL రికార్డుల ఓవర్‌హెడ్‌ను తగ్గించింది. ఇది అనేక ప్రత్యక్ష ప్రయోజనాలను అందిస్తుంది: WAL రికార్డ్‌లు తక్కువ డిస్క్ స్థలాన్ని తీసుకుంటాయి మరియు విపత్తు పునరుద్ధరణ లేదా పాయింట్-ఇన్-టైమ్ రికవరీ సమయంలో డేటా వేగంగా రీప్లే చేయబడుతుంది. మీరు మీ అప్లికేషన్‌లలో అటువంటి సూచికలను ఉపయోగిస్తే (ఉదాహరణకు, PostGIS-ఆధారిత జియోస్పేషియల్ అప్లికేషన్‌లు GiST సూచికను ఎక్కువగా ఉపయోగిస్తాయి), ఇది మీ వంతు ప్రయత్నం లేకుండానే అనుభవాన్ని గణనీయంగా మెరుగుపరిచే మరొక లక్షణం.

విభజన - పెద్దది, మంచిది, వేగవంతమైనది

PostgreSQL 10 పరిచయం చేయబడింది డిక్లరేటివ్ విభజన. PostgreSQL 11లో దీన్ని ఉపయోగించడం చాలా సులభం అయింది. PostgreSQL 12లో మీరు విభాగాల స్థాయిని మార్చవచ్చు.

PostgreSQL 12లో, విభజన వ్యవస్థ పనితీరు మెరుగ్గా మారింది, ప్రత్యేకించి పట్టికలో వేల సంఖ్యలో విభజనలు ఉంటే. ఉదాహరణకు, ఒక ప్రశ్న వేల సంఖ్యలో ఉన్న పట్టికలోని కొన్ని విభజనలను మాత్రమే ప్రభావితం చేస్తే, అది చాలా వేగంగా అమలు అవుతుంది. ఈ రకమైన ప్రశ్నల కోసం పనితీరు మెరుగుపరచబడలేదు. బహుళ విభజనలతో పట్టికలలో ఇన్సర్ట్ కార్యకలాపాలు ఎంత వేగంగా జరుగుతాయో కూడా మీరు గమనించవచ్చు.

ఉపయోగించి డేటాను రికార్డ్ చేస్తోంది కాపీ - మార్గం ద్వారా, ఇది ఒక గొప్ప మార్గం బల్క్ డేటా డౌన్‌లోడ్ మరియు ఇక్కడ ఒక ఉదాహరణ JSON అందుకుంటున్నది — PostgreSQL 12లో విభజించబడిన పట్టికలు కూడా మరింత సమర్థవంతంగా మారాయి. కాపీతో ప్రతిదీ ఇప్పటికే వేగంగా ఉంది, కానీ PostgreSQL 12లో ఇది ఖచ్చితంగా ఎగురుతుంది.

ఈ ప్రయోజనాలకు ధన్యవాదాలు, PostgreSQL మరింత పెద్ద డేటా సెట్‌లను నిల్వ చేయడానికి మరియు వాటిని సులభంగా తిరిగి పొందేందుకు మిమ్మల్ని అనుమతిస్తుంది. మరియు మీ వంతు ప్రయత్నం లేదు. అప్లికేషన్ సమయ శ్రేణి డేటాను రికార్డ్ చేయడం వంటి అనేక విభజనలను కలిగి ఉంటే, సాధారణ అప్‌గ్రేడ్ దాని పనితీరును గణనీయంగా మెరుగుపరుస్తుంది.

ఇది సరిగ్గా "అప్‌గ్రేడ్ మరియు ఆనందించండి" మెరుగుదల కానప్పటికీ, విభజన పట్టికలను సూచించే విదేశీ కీలను సృష్టించడానికి PostgreSQL 12 మిమ్మల్ని అనుమతిస్తుంది, విభజనతో పని చేయడం ఆనందంగా ఉంటుంది.

ప్రశ్నలతో చాలా మెరుగుపడింది

ఉన్నప్పుడు అంతర్నిర్మిత సాధారణ పట్టిక వ్యక్తీకరణల కోసం ప్యాచ్ వర్తించబడింది (అకా CTE, అకా విత్ క్వెరీస్), నేను దీని గురించి ఒక కథనాన్ని వ్రాయడానికి వేచి ఉండలేకపోయాను PostgreSQLతో అప్లికేషన్ డెవలపర్లు ఎంత సంతోషంగా ఉన్నారు. అనువర్తనాన్ని వేగవంతం చేసే లక్షణాలలో ఇది ఒకటి. అయితే, మీరు CTEని ఉపయోగించకపోతే.

SQLకి కొత్తవారు CTEలను ఉపయోగించడానికి ఇష్టపడతారని నేను తరచుగా గుర్తించాను; మీరు వాటిని ఒక నిర్దిష్ట మార్గంలో వ్రాస్తే, మీరు ఒక అత్యవసర ప్రోగ్రామ్‌ని వ్రాస్తున్నట్లు అనిపిస్తుంది. వ్యక్తిగతంగా, నేను ఈ ప్రశ్నలను తిరిగి వ్రాయడానికి ఇష్టపడతాను లేకుండా CTE మరియు ఉత్పాదకతను పెంచండి. ఇప్పుడు ప్రతిదీ భిన్నంగా ఉంది.

PostgreSQL 12 దుష్ప్రభావాలు లేకుండా నిర్దిష్ట రకం CTEని ఇన్‌లైన్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది (SELECT), ఇది అభ్యర్థన ముగింపులో ఒక్కసారి మాత్రమే ఉపయోగించబడుతుంది. నేను తిరిగి వ్రాసిన CTE ప్రశ్నలను ట్రాక్ చేస్తే, వాటిలో చాలా వరకు ఈ వర్గంలోకి వస్తాయి. ఇది డెవలపర్‌లకు స్పష్టమైన కోడ్‌ను వ్రాయడంలో సహాయపడుతుంది, అది ఇప్పుడు త్వరగా కూడా నడుస్తుంది.

అంతేకాకుండా, PostgreSQL 12 మీరు ఏమీ చేయకుండానే SQL ఎగ్జిక్యూషన్‌ను ఆప్టిమైజ్ చేస్తుంది. నేను బహుశా ఇప్పుడు అలాంటి ప్రశ్నలను ఆప్టిమైజ్ చేయనవసరం లేనప్పటికీ, PostgreSQL ప్రశ్న ఆప్టిమైజేషన్‌పై పని చేయడం చాలా బాగుంది.

జస్ట్-ఇన్-టైమ్ (JIT) - ఇప్పుడు డిఫాల్ట్

మద్దతుతో PostgreSQL 12 సిస్టమ్స్‌లో ఎల్‌ఎల్‌విఎం JIT సంకలనం డిఫాల్ట్‌గా ప్రారంభించబడింది. అన్నింటిలో మొదటిది, మీకు మద్దతు లభిస్తుంది JIT కొన్ని అంతర్గత కార్యకలాపాల కోసం, మరియు రెండవది, ఎంపిక చేసిన జాబితాలలో (మీకు SELECT తర్వాత ఉన్నవి) ఎక్స్‌ప్రెషన్‌లతో కూడిన ప్రశ్నలు (సరళమైన ఉదాహరణ x + y), కంకరలు, WHERE క్లాజులతో కూడిన వ్యక్తీకరణలు మరియు ఇతరులు పనితీరును మెరుగుపరచడానికి JITని ఉపయోగించవచ్చు.

PostgreSQL 12లో JIT డిఫాల్ట్‌గా ప్రారంభించబడినందున, పనితీరు దానంతట అదే మెరుగుపడుతుంది, అయితే ప్రశ్న పనితీరును కొలవడానికి మరియు మీరు ఏదైనా ట్యూన్ చేయాలా అని చూడటానికి JITని పరిచయం చేసిన PostgreSQL 11లో అప్లికేషన్‌ను పరీక్షించమని నేను సిఫార్సు చేస్తున్నాను.

PostgreSQL 12లోని మిగిలిన కొత్త ఫీచర్ల గురించి ఏమిటి?

PostgreSQL 12 ప్రామాణిక SQL/JSON రూట్ ఎక్స్‌ప్రెషన్‌లను ఉపయోగించి JSON డేటాను పరిశీలించే సామర్థ్యం నుండి పారామీటర్‌తో బహుళ-కారకాల ప్రామాణీకరణ వరకు అనేక అద్భుతమైన కొత్త లక్షణాలను కలిగి ఉంది. clientcert=verify-full, నిలువు వరుసలు మరియు మరిన్ని సృష్టించబడ్డాయి. ప్రత్యేక పోస్ట్ కోసం సరిపోతుంది.

PostgreSQL 10 వలె, PostgreSQL 12 అప్‌గ్రేడ్ అయిన వెంటనే మొత్తం పనితీరును మెరుగుపరుస్తుంది. మీరు, వాస్తవానికి, మీ స్వంత మార్గాన్ని కలిగి ఉండవచ్చు - నేను PostgreSQL 10తో చేసినట్లుగా, మెరుగుదలలను ప్రారంభించే ముందు ఉత్పత్తి సిస్టమ్‌లో సారూప్య పరిస్థితులలో అప్లికేషన్‌ను పరీక్షించండి. PostgreSQL 12 ఇప్పటికే నేను ఊహించిన దాని కంటే మరింత స్థిరంగా ఉన్నప్పటికీ, పరీక్షలో సోమరిగా ఉండకండి. అప్లికేషన్లను పూర్తిగా ఉత్పత్తికి విడుదల చేయడానికి ముందు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి