PostgreSQL 19 pirmā beta versija iznāca 4. jūnijā, un tajā ir komanda, ko datubāzu administratori lūdza gadiem: REPACK. Tā pārraksta pietūkušu tabulu un atgūst diska vietu, un ar atslēgvārdu CONCURRENTLY to dara bez ekskluzīvas slēdzenes — tabula visu laiku paliek pieejama lasīšanai un rakstīšanai.
Līdz šim tādu darbu darīja ārējais paplašinājums pg_repack vai VACUUM FULL, kas tabulu bloķē pilnībā. Tagad funkcija ir pašā serverī. Beta cikls turpinās vasarā, un stabilo laidienu PostgreSQL projekts plāno septembrī vai oktobrī. Ražošanā beta likt nedrīkst, bet tā ir īstais brīdis pārbaudīt savas shēmas un paplašinājumus.
REPACK ienāk pašā serverī
Tabulas pietūkst, kad daudz rindu tiek atjauninātas vai dzēstas: vecās versijas paliek failā, kamēr autovakuums tās nesavāc, un fails aug ātrāk nekā dati. pg_repack risināja to jau vairāk nekā desmit gadus, taču tas prasīja atsevišķu instalāciju un savu uzturēšanas logu. PostgreSQL 19 pārceļ šo loģiku iekšā.
REPACK CONCURRENTLY pārbūvē tabulu un tās indeksus, neturot ekskluzīvu slēdzeni visu darba laiku. Aplikācija turpina strādāt, kamēr fona process kopē datus jaunā, blīvi sapakotā failā.
Praksē tas nozīmē, ka komanda ar lielu OLTP slodzi var atgūt vietu no pietūkušas tabulas, negaidot naktsvidus logu. Slēdzene tiek ņemta tikai īsā brīdī laidiena beigās, kad jauno failu pieslēdz vecā vietā.
Autovakuums saņem paralēlos darbiniekus
Autovakuums līdz šim vienu tabulu tīrīja ar vienu procesu. Uz lielām tabulām ar daudziem indeksiem tas bija lēni. PostgreSQL 19 pievieno iestatījumu autovacuum_max_parallel_workers, kas ļauj vienas tabulas indeksus tīrīt paralēli. Klāt nāk arī jauna vērtēšanas sistēma, kas sarindo tabulas pēc tā, cik steidzami tās jāvakuumē, nevis tikai pēc kārtas.
Otra izmaiņa slēpjas ievades–izvades slānī. PostgreSQL 18 ieviesa asinhrono I/O, un 19 to attīsta: io_method=worker tagad pats regulē darbinieku skaitu robežās, ko nosaka io_min_workers un io_max_workers. Slodzei augot, procesu kļūst vairāk; tai krītot, mazāk.
Planotāja padomi un ātrāka ievietošana
Neparedzami vaicājumu plāni ir viena no biežākajām sāpēm lielās PostgreSQL sistēmās. Statistika mainās, plānotājs izvēlas citu ceļu, un vaicājums, kas vakar strādāja sekundē, šodien velkas minūti. PostgreSQL 19 ievieš paplašinājumu pg_plan_advice, ar ko plānotāja lēmumus var nostiprināt, un pg_stash_advice, kas šos padomus piemēro automātiski pēc vaicājuma identifikatora.
Ievietošanas ātrums arī uzlabojas. Snowflake inženieru apraksts min divreiz labāku sniegumu ievietošanai ar ārējās atslēgas pārbaudi. SQL pusē parādās INSERT ... ON CONFLICT DO SELECT ... RETURNING, kas atgriež konfliktējošās rindas, un GROUP BY ALL, kas grupē pēc visām neagregētajām izvades kolonnām, tā ka tās vairs nav jāuzskaita ar roku.
Sadalītajām tabulām nāk klāt ALTER TABLE ... MERGE PARTITIONS un SPLIT PARTITIONS, ar ko sekcijas var apvienot vai sadalīt bez datu pārkopēšanas ar roku. Federētajiem vaicājumiem postgres_fdw tagad nostumj masīvu operācijas uz attālo serveri un spēj nolasīt ārējās tabulas statistiku, tā ka vietējais plānotājs pieņem labākus lēmumus. Uz beta versiju attiecas arī izmaiņa, kas IS DISTINCT FROM un IS NOT DISTINCT FROM vienkāršo uz <> un =, kad ievade nevar būt NULL.
Loģiskā replikācija bez restarta
Loģiskā replikācija saņem vairākas praktiskas izmaiņas. Sekvences vērtības tagad tiek replicētas. CREATE PUBLICATION ... EXCEPT ļauj publicēt visas tabulas, izņemot nosauktās. Un galvenais — loģisko replikāciju var ieslēgt bez servera restarta, jo wal_level var palikt uz replica, kamēr jauns tikai lasāms parametrs effective_wal_level parāda, kāds līmenis pašlaik ir spēkā.
Novērošanai nāk klāt divi jauni skati: pg_stat_lock ar statistiku par slēdzeņu tipiem un pg_stat_recovery ar detaļām par atkopšanos. Vaicājumam SELECT var likt gaidīt ar WAIT FOR LSN, līdz replika ir piemērojusi konkrētas izmaiņas — noderīgi, kad lasīšanu novirza uz repliku uzreiz pēc rakstīšanas.
Kas mainās noklusējumos
Daži noklusējumi maina uzvedību, tāpēc jaunināšanas testā tos vērts pārbaudīt. JIT kompilācija tagad ir izslēgta pēc noklusējuma, jo uz jauktām slodzēm tā bieži nesa vairāk kaitējuma nekā labuma. default_toast_compression tagad ir lz4, kas saspiež un atspiež ātrāk nekā vecais pglz. Datu kontrolsummas var ieslēgt un izslēgt tiešsaistē, bez klastera restarta.
Autentifikācijas pusē md5 parolēm tagad pēc veiksmīgas pieslēgšanās izdod brīdinājumu, kas stumj uz SCRAM, un iestatījums md5_password_warnings to regulē. RADIUS autentifikācija ir izņemta pavisam. Oficiālās laidiena piezīmes uzskaita visu sarakstu, un atklātie jautājumi tiek sekoti projekta wiki lapā.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.