ለሰነፎች አሻሽል፡ 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 ኢንዴክሶች አንድ ችግር አለባቸው - እነሱ እብጠት እና ተጨማሪ የዲስክ ቦታ ይውሰዱ, እና ውሂብን የማውጣት እና የማዘመን አፈፃፀም ይቀንሳል. "ብሎት" ስል የኢንዴክስ አወቃቀሩን ውጤታማ ያልሆነ ጥገና ማለቴ ነው። ይህ ምናልባት ከቆሻሻ ቱቦዎች ጋር የተዛመደ ወይም ላይሆን ይችላል። VACUUM (ለመረጃው ለፒተር ጋጋን አመሰግናለሁ)ፒተር ጂኦጋን))። ኢንዴክስ እብጠት በተለይ ጠቋሚው በንቃት በሚለዋወጥበት የሥራ ጫና ውስጥ ይታያል.

PostgreSQL 12 የቢ-ዛፍ ኢንዴክሶችን አፈፃፀም በእጅጉ ያሻሽላል እና እንደ TPC-C ባሉ ሙከራዎች የተደረጉ ሙከራዎች እንደሚያሳዩት ቦታ አሁን ጥቅም ላይ ይውላል ፣በአማካኝ 40% ያነሰ። አሁን ያነሰ ጊዜ የምናጠፋው የቢ-ዛፍ ኢንዴክሶችን (ይህም የመጻፍ ስራዎችን) ብቻ ሳይሆን መረጃን በማውጣት ላይ ነው, ምክንያቱም ኢንዴክሶች በጣም ትንሽ ስለሆኑ.

ሠንጠረኞቻቸውን በንቃት የሚያዘምኑ መተግበሪያዎች በተለምዶ OLTP መተግበሪያዎች ናቸው (የእውነተኛ ጊዜ ግብይት ሂደት) በዲስክ አጠቃቀም እና በመጠይቅ ሂደት ረገድ የበለጠ ቀልጣፋ ይሆናል። ብዙ የዲስክ ቦታ፣ የመረጃ ቋቱ ያለ መሠረተ ልማት ማሻሻያ ብዙ ክፍል ማደግ አለበት።

አንዳንድ የማሻሻያ ስልቶች እነዚህን ጥቅሞች ለመጠቀም የቢ-ዛፍ ኢንዴክሶችን እንደገና እንዲገነቡ ይፈልጋሉ (ለምሳሌ፡- pg_አሻሽል። ኢንዴክሶችን በራስ ሰር እንደገና አይገነባም). በቀድሞዎቹ የPostgreSQL ስሪቶች በጠረጴዛዎች ላይ ትላልቅ ኢንዴክሶችን እንደገና መገንባት ከፍተኛ የሆነ የእረፍት ጊዜ አስከትሏል ምክንያቱም በዚያ ጊዜ ምንም ለውጦች ማድረግ አልተቻለም። ግን PostgreSQL 12 ሌላ ጥሩ ባህሪ አለው፡ አሁን ኢንዴክሶችን ከትእዛዙ ጋር በትይዩ እንደገና መገንባት ይችላሉ። REINDEX በተመሳሳይ ጊዜየእረፍት ጊዜን ሙሉ በሙሉ ለማስወገድ.

PostgreSQL 12 በጠቋሚ መሠረተ ልማት ላይ ሌሎች ማሻሻያዎች አሉት። አንዳንድ አስማት የነበረበት ሌላ ነገር - ወደፊት መጻፍ መዝገብ, aka WAL (የፊት መዝገብ ጻፍ)። የመጻፊያ ምዝግብ ማስታወሻው ውድቀት እና ማባዛት ከሆነ እያንዳንዱን ግብይት ወደ PostgreSQL ይጽፋል። አፕሊኬሽኖች በማህደር ለማስቀመጥ እና ይጠቀሙበታል። በጊዜ ማገገም. እርግጥ ነው, የመጻፊያ መዝገብ በዲስክ ላይ ተጽፏል, ይህ ደግሞ አፈፃፀሙን ሊጎዳ ይችላል.

PostgreSQL 12 መረጃ ጠቋሚ በሚገነባበት ጊዜ በGIST፣ GIN እና SP-GiST ኢንዴክሶች የሚፈጠሩትን የWAL መዛግብት ቀንሷል። ይህ በርካታ ተጨባጭ ጥቅሞች አሉት፡ የWAL መዛግብት ትንሽ የዲስክ ቦታ ይይዛሉ፣ እና ውሂቡ በፍጥነት ይጫወታሉ፣ ለምሳሌ ውድቀት በሚከሰትበት ጊዜ ወይም በጊዜ ማግኛ። በመተግበሪያዎችዎ ውስጥ እንደዚህ ያሉ ኢንዴክሶችን የሚጠቀሙ ከሆነ (ለምሳሌ በፖስትጂአይኤስ ላይ የተመሰረቱ ጂኦስፓሻል አፕሊኬሽኖች የጂኤስቲ ኢንዴክስን በብዛት ይጠቀማሉ) ይህ በእርስዎ በኩል ያለ ምንም ጥረት አፈጻጸምን በእጅጉ የሚያሻሽል ባህሪ ነው።

መከፋፈል - ትልቅ ፣ የተሻለ ፣ ፈጣን

PostgreSQL 10 አስተዋወቀ ገላጭ ክፍፍል. በ PostgreSQL 11 ውስጥ፣ ለመጠቀም በጣም ቀላል ሆኗል። በ PostgreSQL 12 ውስጥ ክፍልፋዮችን ማመጣጠን ይችላሉ።

በ PostgreSQL 12 ውስጥ, የመከፋፈያ ስርዓቱ አፈፃፀም በከፍተኛ ሁኔታ ተሻሽሏል, በተለይም በሺዎች የሚቆጠሩ ክፍሎች በሠንጠረዥ ውስጥ ካሉ. ለምሳሌ፣ መጠይቁ በሺዎች ከሚቆጠሩት ጋር በሰንጠረዥ ውስጥ ጥቂት ክፍሎችን ብቻ የሚነካ ከሆነ፣ በጣም በፍጥነት ይሰራል። የአፈጻጸም ማሻሻያዎች በእነዚህ አይነት መጠይቆች ብቻ የተገደቡ አይደሉም። እንዲሁም ብዙ ክፍልፋዮች ባሉት ጠረጴዛዎች ላይ የ INSERT ስራዎች ምን ያህል ፈጣን እንደሆኑ ያስተውላሉ።

በመጠቀም ውሂብ መጻፍ ቅጂ - በነገራችን ላይ ይህ በጣም ጥሩ መንገድ ነው የጅምላ ውሂብ ጭነት እና እዚህ አንድ ምሳሌ አለ። JSON መቀበል - በ PostgreSQL 12 ውስጥ ለተከፋፈሉ ጠረጴዛዎች እንዲሁ የበለጠ ውጤታማ ሆኗል ። ሁሉም ነገር ከ COPY ጋር ፈጣን ነበር፣ ግን በ PostgreSQL 12 ሙሉ በሙሉ ይበርራል።

እነዚህ ጥቅማጥቅሞች ለ PostgreSQL ትላልቅ የውሂብ ስብስቦችን እንዲያከማች እና እነሱን ለማምጣት ቀላል ያደርጉታል። እና በእርስዎ በኩል ምንም ጥረት የለም. አፕሊኬሽኑ ብዙ ክፍሎች ካሉት ለምሳሌ የጊዜ ተከታታይ መረጃዎችን ይጽፋል ቀላል ማሻሻያ ስራውን በእጅጉ ያሻሽላል።

እና ይህ በትክክል የማሻሻያ እና የደስታ ማሻሻያ ባይሆንም በ PostgreSQL 12 ውስጥ ከመከፋፈል ጋር መስራት አስደሳች እንዲሆን የተከፋፈሉ ጠረጴዛዎችን የሚያመለክቱ የውጭ ቁልፎችን መፍጠር ይችላሉ።

ከጥያቄዎች ጋር በጣም ተሻሽሏል።

መቼ የውስጠ-መስመር የጋራ ሠንጠረዥ መግለጫዎች ፕላስተር ተተግብሯል። (CTE፣ aka WITH መጠይቆች)፣ እንዴት የሚል ጽሑፍ ለመጻፍ እያሳከኩ ነበር። የመተግበሪያ ገንቢዎች በPostgreSQL ምን ያህል ተደስተው ነበር።. መተግበሪያውን ከሚያፋጥኑት ባህሪያት ውስጥ አንዱ ይህ ነው። በእርግጥ CTE እየተጠቀሙ ካልሆነ በስተቀር።

ብዙውን ጊዜ የ SQL ጀማሪዎች CTEsን መጠቀም እንደሚወዱ አስተውያለሁ፡ በተወሰነ መንገድ ከፃፏቸው የግድ አስፈላጊ ፕሮግራም እየፃፉ እንደሆነ ይሰማዎታል። በግሌ፣ ለመዞር እነዚህን ጥያቄዎች እንደገና መጻፍ ወደድኩ። ያለ CTE እና ምርታማነትን ይጨምሩ. አሁን ሁሉም ነገር የተለየ ነው።

PostgreSQL 12 ያለ የጎንዮሽ ጉዳቶች አንድን የተወሰነ የ CTE አይነት መስመር ውስጥ እንዲያስገቡ ይፈቅድልዎታል (SELECT) በጥያቄው መጨረሻ አካባቢ አንድ ጊዜ ብቻ ጥቅም ላይ ይውላል። እንደገና የጻፍኳቸውን የCTE መጠይቆች ከተከታተልኩ፣ አብዛኛዎቹ በዚህ ምድብ ውስጥ ይወድቃሉ። ይህ ገንቢዎች አሁን ፈጣን የሆነ ግልጽ ኮድ እንዲጽፉ ያግዛቸዋል።

ከዚህም በላይ PostgreSQL 12 የ SQL አፈፃፀምን በራሱ ያመቻቻል, ምንም ነገር ማድረግ የለብዎትም. ምናልባት እንደዚህ አይነት መጠይቆችን አሁን ማመቻቸት ባላስፈልገኝም፣ PostgreSQL በጥያቄ ማመቻቸት ላይ መስራቱን መቀጠሉ በጣም ጥሩ ነው።

ልክ-በ-ጊዜ (JIT) - አሁን ነባሪው

በ PostgreSQL 12 ስርዓቶች ከድጋፍ ጋር LLVM JIT ማጠናቀር በነባሪነት ነቅቷል። በመጀመሪያ, ድጋፍ ያገኛሉ JIT ለአንዳንድ የውስጥ ስራዎች፣ እና ሁለተኛ፣ ከገለፃዎች ጋር መጠይቆች (በጣም ቀላሉ ምሳሌ x + y) በተመረጡ ዝርዝሮች ውስጥ (ከ SELECT በኋላ ያለዎት) ፣ ድምር ፣ የ WHERE አንቀጾች ያላቸው መግለጫዎች እና ሌሎች አፈፃፀምን ለማሻሻል JIT ን መጠቀም ይችላሉ።

JIT በነባሪነት በ PostgreSQL 12 ውስጥ የነቃ በመሆኑ አፈፃፀሙ በራሱ ይሻሻላል፣ ነገር ግን አፕሊኬሽኑን በ PostgreSQL 11 ውስጥ ለመፈተሽ ሀሳብ አቀርባለሁ፣ JIT በተጀመረበት፣ የጥያቄ አፈጻጸምን ለመለካት እና የሆነ ነገር ማስተካከል የሚያስፈልገው ከሆነ ለማየት።

ግን ስለ ቀሪዎቹ የ PostgreSQL 12 አዲስ ባህሪያትስ?

PostgreSQL 12 መደበኛ የSQL/JSON መስመር አገላለጾችን በመጠቀም የJSON መረጃን ከመፈተሽ ጀምሮ እስከ ባለ ብዙ ደረጃ ማረጋገጫ ድረስ ብዙ አዳዲስ ባህሪያት አሉት። clientcert=verify-full፣ የተፈጠሩ አምዶች እና ሌሎችም። ለተለየ ልጥፍ በቂ ነው።

ልክ እንደ PostgreSQL 10፣ PostgreSQL 12 ከማሻሻያው በኋላ አጠቃላይ አፈፃፀሙን ያሻሽላል። እርግጥ ነው፣ የራስህ መንገድ ሊኖርህ ይችላል - ማሻሻያዎችን ከማስቻልህ በፊት ማመልከቻውን በተመሳሳይ ሁኔታ በአምራችነት ፈትነዉ፣ በ PostgreSQL 10 እንዳደረግኩት። PostgreSQL 12 ከጠበቅኩት በላይ የተረጋጋ ቢሆንም እንኳን አፕሊኬሽኑን ለመፈተሽ ሰነፍ አትሁን። በደንብ, ወደ ምርት ከመልቀቃቸው በፊት.

ምንጭ: hab.com

አስተያየት ያክሉ