PostgreSQL 19 pēc noklusējuma vairs neieslēdz JIT kompilāciju. Līdz šim tā bija ieslēgta. Plānotājs pats izlēma, kuriem vaicājumiem izpildes plānu kompilēt mašīnkodā ar LLVM. VictoriaMetrics apskatā par iemeslu nosaukts izmaksu modelis: tas lēmumu pieņēma neuzticami, bet kļūdains lēmums maksā dārgi. Vaicājums pirms izpildes notērē laiku kompilācijai, no kuras nekāds labums nerodas. Analītiskiem vaicājumiem, kuros JIT tiešām palīdz, to tagad jāieslēdz pašam.
Versija vēl ir beta stadijā. Beta 1 iznāca 4. jūnijā, beta 3 sekoja 13. augustā. Oficiālajās laidiena piezīmēs datuma vietā joprojām stāv 2026-??-??. Stabilo versiju PostgreSQL izstrādes grupa gaida šī gada otrajā pusē, tātad septembrī vai oktobrī.
Ar to arī pietiek, lai jauninājumu neizdarītu piektdienas vakarā. Sarakstā ir izmesta autentifikācijas metode, izslēgts kompilators un vairāki noklusējumi, kas maina uzvedību bez brīdinājuma konfigurācijas failā.
REPACK pārbūvē tabulu, kamēr tā strādā
Jaunā komanda REPACK apvieno VACUUM FULL un CLUSTER. Tā atgūst diska vietu un pārkārto tabulas saturu. Praktiski svarīgākā daļa ir opcija CONCURRENTLY. Pārbūves laikā tabula netiek slēgta ar ACCESS EXCLUSIVE slēdzeni. Serveris atkodē izmaiņas, kas ienāk pārbūves gaitā. Pēc tam tās atkārto jaunajā kopijā, tāpēc lasīšana un rakstīšana turpinās visu laiku.
Par to jāmaksā ar priekšnosacījumiem. Parametram wal_level jābūt vismaz replica. Katra pārbūve aizņem replikācijas slotu. To skaitu ierobežo max_repack_replication_slots ar noklusējuma vērtību 5. Blakus tam PostgreSQL 19 ļauj datu kontrolsummas ieslēgt vai izslēgt strādājošā serverī. Līdz šim tas prasīja apturēt klasteri un palaist pg_checksums.
Autovacuum sadala darbu un liek tabulām punktus
Autovacuum tagad var tīrīt tabulas indeksus ar vairākiem paralēliem darba procesiem. Kopējo skaitu nosaka autovacuum_max_parallel_workers, katrai tabulai atsevišķi to var uzstādīt ar glabāšanas parametru autovacuum_parallel_workers. Žurnālā redzams, cik procesu bija plānots un cik faktiski palaisti.
Otra izmaiņa ir tabulu rinda. Agrāk autovacuum tabulas ņēma tādā secībā, kādā tās atrada. Tagad katra tabula saņem punktu skaitu, kas redzams skatā pg_stat_autovacuum_scores. Ja vērtība pārsniedz 1, tabulai tīrīšana pienākas. Punktu formulai ir pieci svari, no autovacuum_vacuum_score_weight līdz autovacuum_analyze_score_weight. Visi pēc noklusējuma ir 1. Administrators var pateikt, ka viņa slodzē analīze ir svarīgāka par sasaldēšanu.
Turpat aizvākts arī viens vecs griestu jautājums. MultiXact skaitītājs no 32 bitiem paplašināts uz 64, tāpēc pazūd avārijas situācija, kurā datubāze apstājas, līdz to iztīra.
Paralēlais autovacuum un punktu sistēma risina vienu praktisku problēmu. Uz servera ar simtiem tabulu līdz šim gadījās, ka tīrītājs ilgi darbojās pie tabulas, kurai tas nebija steidzami, kamēr karstā tabula gaidīja rindā. Tagad rindas kārtību var pārbaudīt vaicājumā, nevis minēt pēc žurnāla ierakstiem.
Loģiskā replikācija beidzot pārnes sekvences
Loģiskā replikācija tagad pārnes sekvenču vērtības no publicētāja uz abonentu. Publikāciju var izveidot ar ALL SEQUENCES. Abonementa pusē parādās ALTER SUBSCRIPTION … REFRESH SEQUENCES. Tas maina migrāciju scenāriju: pēc pārslēgšanās uz jauno serveri ievietošana vairs neatduras pret primārās atslēgas konfliktu, jo skaitītājs ir pareizajā vietā.
Loģisko replikāciju tagad var ieslēgt bez servera pārstartēšanas, ja wal_level ir replica. Rezerves serveriem pievienota komanda WAIT FOR, kas gaida, līdz konkrēts LSN ir ierakstīts, izskalots vai atskaņots. Ar to var uzbūvēt lasi-savu-ierakstu shēmu, kurā lietotājs pēc ieraksta uzreiz lasa no rezerves servera.
Plānotāja padomus var noglabāt uz vietas
Kodolā ienākušas divas jaunas saskarnes: pg_plan_advice ļauj fiksēt plānotāja lēmumus, pg_stash_advice tos glabā un piemēro automātiski katram vaicājuma identifikatoram. Bytebase raksta autors savā apskatā to sauc par svarīgāko izmaiņu visā laidienā.
Viens ieraksts padomu krātuvē sāk darboties visās sesijās. Lietojumprogrammas kodā nekas nav jāmaina.
Līdz šim plāna stabilitāti PostgreSQL vidē panāca ar rokām: pārrakstīja vaicājumu, pievienoja indeksu vai ķērās pie pg_hint_plan spraudņa, kas padomus liek SQL komentārā. Jaunā pieeja padomu glabā serverī, tāpēc lietojumprogrammas kodu var atstāt mierā.
Novērojamībai pievienoti divi skati. pg_stat_lock rāda statistiku pa slēdzeņu veidiem, pg_stat_recovery dod rezerves servera stāvokli vienā konsekventā momentuzņēmumā. Ievadizvades slānī io_method worker režīms pats regulē fona procesu skaitu. Rāmjus tam nosaka četri jauni mainīgie: io_min_workers, io_max_workers, io_worker_idle_timeout un io_worker_launch_interval.
Kas salūzīs, jauninot no 18
RADIUS autentifikācija izmesta pilnībā. Iemesls ir vienkāršs: PostgreSQL to prata tikai pār UDP, ko nevar nodrošināt. Tiešas aizvietotājas nav. Kas to lietoja, tam jāpāriet uz LDAP, OAuth vai sertifikātiem.
MD5 paroles vēl strādā, bet serveris tagad izmet brīdinājumu pēc katras veiksmīgas MD5 pieteikšanās. Agrāk tas brīdināja tikai paroles uzstādīšanas brīdī. Uzvedību regulē md5_password_warnings. Pēc noklusējuma tas ir ieslēgts. Paroles derīguma beigu brīdinājums parādās septiņas dienas iepriekš.
Pārējais saraksts ir īss, taču ar asām malām. Kodējums MULE_INTERNAL aizvākts. Mainīgais escape_string_warning aizvākts. Parametrs standard_conforming_strings piespiedu kārtā vienmēr ir on, tāpēc veci izgāzumi, kas taisīti ar to izslēgtu, PostgreSQL 19 vairs neielādēsies. Noklusējuma max_locks_per_transaction audzis no 64 uz 128, jo koplietojamās atmiņas rezervēšana kļuvusi noteikta un vecās vērtības sāka beigties ātrāk. TOAST saspiešanas noklusējums, ja būvējumā ir –with-lz4, no pglz nomainīts uz lz4; jau saglabātie dati paliek vecajā formātā. Gaidīšanas notikuma tips BUFFERPIN pārsaukts par BUFFER, tāpēc uzraudzības vaicājumi, kas meklē veco nosaukumu, atgriezīs tukšumu.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.