Ănskar alla en fin fredag! Det Ă€r mindre och mindre tid kvar till lanseringen av kursen , dĂ€rför delar vi idag med oss av en översĂ€ttning av ytterligare ett anvĂ€ndbart material i Ă€mnet.
Under utvecklingen gjordes imponerande arbeten för att förbĂ€ttra sektioneringen av tabeller. Sektionering av tabeller â det hĂ€r Ă€r en funktion som funnits i PostgreSQL under lĂ„ng tid, men om man ska uttrycka det sĂ„, existerade den i princip inte förrĂ€n version 10, dĂ€r den blev en mycket anvĂ€ndbar funktion. Tidigare hĂ€vdade vi att arv av tabeller Ă€r vĂ„r implementering av sektionering, och det stĂ€mmer. Men den hĂ€r metoden tvingade er att göra det mesta av arbetet manuellt. Till exempel, om ni ville att tupler skulle sĂ€ttas in i sektioner under INSERT, behövde ni konfigurera triggers för att göra det för er. Sektionering med hjĂ€lp av arv var mycket lĂ„ngsam och svĂ„r att utveckla extra funktioner ovanpĂ„.
I PostgreSQL 10 sĂ„g vi födelsen av den "deklarativa sektioneringen" â en funktion avsedd att lösa mĂ„nga problem som var olösliga med den gamla metoden med arv. Detta ledde till uppkomsten av ett mycket kraftfullare verktyg som tillĂ„ter oss att dela upp data horisontellt!
JÀmförelse av funktioner
I PostgreSQL 11 introducerades en imponerande uppsÀttning nya funktioner som hjÀlper till att öka prestandan och göra sektionerade tabeller mer transparenta för applikationer.



1. AnvÀnder begrÀnsande undantag
2. LĂ€gger till endast noder
3. Endast för sektionerad tabell, som hÀnvisar till en icke-sektionerad
4. Index mÄste innehÄlla alla nyckelskolumner i sektionen
5. BegrÀnsningar pÄ sektionen pÄ bÄda sidor mÄste överensstÀmma
Performance
HĂ€r har vi ocksĂ„ goda nyheter! En ny metod . Denna nya algoritm kan identifiera lĂ€mpliga sektioner genom att granska frĂ„gans villkor DĂR. Den tidigare algoritmen, Ă„ sin sida, kontrollerade varje sektion för att avgöra om den kunde uppfylla villkoret DĂR. Detta ledde till ytterligare ökning av planeringstiden nĂ€r antalet sektioner vĂ€xte.
I version 9.6, nÀr sektionering med hjÀlp av arv anvÀndes, genomfördes ruttening av tuples i sektionen vanligtvis genom att skriva en triggerfunktion som innehöll en serie IF-satser för att infoga tuple i rÀtt sektion. Dessa funktioner kunde vara mycket lÄngsamma vid körning. Med deklarativ sektionering som lades till i version 10, började detta fungera mycket snabbare.
Genom att anvÀnda en sektionerad tabell med 100 sektioner kan vi uppskatta prestandan vid inladdning av 10 miljoner rader i tabellen frÄn 1 kolumn BIGINT och 5 kolumner INT.

Prestandan för att frÄga denna tabell för att hitta en indexerad post och utföra DML för att manipulera en post (anvÀnda endast 1 processor):

HĂ€r ser vi att prestandan för varje operation har ökat avsevĂ€rt efter PG 9.6. FörfrĂ„gningarna VĂLJ ser mycket bĂ€ttre ut, sĂ€rskilt de som kan utesluta flera sektioner under planeringen av förfrĂ„gningar. Detta innebĂ€r att planlĂ€ggaren kan hoppa över en stor del av arbetet som den tidigare var tvungen att göra. Till exempel byggs det inte lĂ€ngre vĂ€gar för onödiga sektioner.
Slutsats
Sektionering av tabeller börjar bli en mycket kraftfull funktion i PostgreSQL. Det gör det möjligt att snabbt exportera data online och konvertera dem till offline, utan att vÀnta pÄ att lÄngsamma massoperationer DML ska slutföras.. Detta innebÀr ocksÄ att relaterade data kan lagras tillsammans, vilket gör att nödvÀndiga data kan nÄs mycket effektivare. FörbÀttringarna som gjorts i denna version skulle inte ha varit möjliga utan utvecklarna, granskare och bidragsgivare som oförtröttligt arbetade med alla dessa funktioner.
Tack till dem alla! PostgreSQL 11 ser helt fantastiskt ut!
SÄ hÀr Àr en kort, men ganska intressant artikel. Dela gÀrna kommentarer och glöm inte att registrera dig för , dÀr programmet för kursen kommer att redovisas i detalj.
KĂ€lla: habr.com
