Uvoľnenie databázového systému PostgreSQL 18

Po roku vývoja bola vydaná nová stabilná verzia DBMS PostgreSQL 18. Aktualizácie pre novú vetvu budú vychádzať počas piatich rokov do novembra 2030. Podpora PostgreSQL 13.x, najstaršej z podporovaných vetiev, sa skončí 13. novembra.

Hlavné novinky:

  • Bola pridaná podsystem pre asynchrónny vstup/výstup, ktorý umožňuje zvýšiť priepustnosť vstup/výstup a odstrániť oneskorenia. Okrem univerzálnej implementácie AIO (io_method=worker), dostupnej na všetkých platformách a založenej na vykonávaní viacerých spracovateľských procesov (predvolene 3), môže v Linuxe byť použitý rozhranie pre asynchrónny vstup/výstup io_uring (io_method=io_uring), podporované od jadra Linux 5.1. Asynchrónny vstup/výstup je zatiaľ využívaný len na zrýchlenie vykonávania niektorých operácií spojených so čítaním údajov z súborového systému, ako je sekvenčné prechádzanie, skenovanie bitmapy indexov a vykonávanie údržby (vacuum). V niektorých testoch použitie AIO vedie k zvýšeniu výkonu o 2-3 krát. Operácie zápisu sa naďalej vykonávajú synchronne na dosiahnutie požiadaviek ACID.
  • Bola implementovaná optimalizácia „skip scan“ v mnohoslopedových indexoch, vďaka ktorej môže byť index použitý nielen na overenie prvého indexovaného stĺpca a úplné spojenie stĺpcov, ale aj na spracovanie samostatne ostatných indexovaných stĺpcov. Napríklad, pri vytváraní B-tree indexu nad stĺpcami „(status, date)“ sa index predtým aplikoval iba na dopyty overujúce pole „status“ alebo obidva polia „status“ a „date“, a pri overovaní v dopyte iba poľa „date“ sa vykonávalo skenovanie obsahu tabuľky. Režim „skip scan“ umožňuje za určitých podmienok skenovať index pri dopyte iba poľa „date“. Režim sa používa iba pre indexy „B-tree“ pri použití v dopyte podmieneného operátora „=“ nad indexovaným poľom, v situáciách, keď vynechané pole má malé množstvo rôznych hodnôt (napríklad optimalizácia sa prejaví, ak pole status „status“ má niekoľko pevných hodnôt).
  • Pridané optimalizácie, ktoré efektívnejšie využívajú indexy pre dopyty obsahujúce konštrukcie «OR» a «IN (…)» v bloku «WHERE», ako aj zvyšujúce výkon plánovania a vykonávania spojení tabuliek (napríklad urýchlený kód spájania hashov a povolené používanie inkrementálneho triedenia pri spájaní tabuliek).
  • Pridaná podpora paralelizácie vytvárania indexov GIN (Generalized Inverted Index), používaných na indexovanie zložených hodnôt, ako sú polia, a organizovanie vyhľadávania podľa plného textu alebo štruktúr JSON.
  • Pridaná možnosť vytvárania materializovaných pohľadov a kľúčov pre delenie tabuliek s indexmi s atribútom «unique», ktoré nepoužívajú štruktúru B-tree.
  • Zvýšená celková výkonnosť zámkov pre dopyty, ktoré pracujú s veľkým počtom tabuliek, a tiež boli vykonané vylepšenia v spracovaní dopytov na delené tabuľky, urýchľujúce odstraňovanie nepoužívaných sekcií a operácie spájania (JOIN).
  • Urýchlené operácie s textom, ako sú funkcie na preformátovanie na veľké/malé písmená. Pridaný režim PG_UNICODE_FAST na zrýchlenie zohľadnenia vlastností lokality Unicode-symbolov.
  • Realizovaná možnosť uchovania štatistiky plánovača dopytov po aktualizácii medzi významnými vydaniami PostgreSQL. Zmena umožňuje vyhnúť sa vykonaniu náročnej operácie «ANALYZE» po spustení novej verzie, kým sa nezopakuje pozorovanie poklesu výkonnosti DBMS.
  • Zvýšená výkonnosť utilitky pg_upgrade, používané na automatizáciu prechodu na nové významné vydanie PostgreSQL. Optimalizácie sú obzvlášť viditeľné pri aktualizácii DB, obsahujúcich veľké množstvo objektov, ako sú tabulky a sekvencie. Na urýchlenie práce pg_upgrade bol pridaný aj flag «—jobs N» pre paralelizáciu kontrol v N vláknach a flag «—swap» na úplnú výmenu adresárov s dátami bez vytvárania odkazov, bez klonovania a bez kopírovania súborov.
  • Pridaná podpora virtuálnych generovaných stĺpcov, ktorých hodnoty sa vypočítavajú na požiadanie počas vykonávania dopytov, bez ukladania na disk. Ak je v príkaze „CREATE TABLE…“ pre generované stĺpce uvedené iba kľúčové slovo „GENERATED“ bez špecifikácie typu (STORED alebo VIRTUAL), nový variant sa použije ako predvolené miesto starej implementácie. V starej implementácii sa hodnoty generovali počas vykonávania operácií „INSERT“ alebo „UPDATE“ a ukladali sa na disk na ďalšie použitie. Nevýhodou virtuálnych generovaných stĺpcov je nemožnosť ich použitia v indexoch, zatiaľ čo výhodou je možnosť vykonávať normalizáciu a zmenu dát na požiadanie (čo je dôležité pri práci s JSON údajmi). Čo sa týka klasických uložených generovaných stĺpcov, v novej verzii bola zabezpečená podpora logickej replikácie.
  • V príkazoch INSERT, UPDATE, DELETE a MERGE bola implementovaná možnosť výstupu minulých (OLD) a aktuálnych (CURRENT) hodnôt v príkaze RETURNING. Napríklad, „UPDATE… RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.“.
  • Pridaná funkcia uuidv7() na generovanie náhodných unikátnych identifikátorov vo formáte UUIDv7. Na rozdiel od starej funkcie na generovanie UUID (gen_random_uuid), ktorá je teraz navyše dostupná pod menom uuidv4(), v UUIDv7 sú okrem náhodnej hodnoty zahrnuté aj časové údaje generovania. Prítomnosť usporiadaných častí v hodnote UUID (prvých 12 znakov – epochálne časové údaje, a nasledujúcich 18 – náhodná hodnota) zvyšuje účinnosť triedenia a indexovania, čo je dôležité, pretože UUID sa zvyčajne používajú ako primárne kľúče (napríklad kľúče vytvorené v krátkom čase sú umiestnené blízko seba v indexe).
  • V operácii „LIKE“ bola implementovaná podpora porovnávania s textom, v ktorých sú použité nedeterministické vlastnosti lokalizácie „collation“, umožňujúce porovnávanie s ohľadom na význam znakov (napríklad pri porovnávaní nemusí byť zohľadnený diakritický znak). Pridaná funkcia CASEFOLD na zmenu veľkosti písmen s ohľadom na vlastnosti lokalizácie „collation“ (napríklad niektoré znaky majú viac ako dve malé varianty alebo pri porovnávaní si vyžadujú premenu na veľké písmeno miesto malého).
  • Pridaná možnosť používať časové obmedzenia (temporal constraint). Pri hodnotách „PRIMARY KEY“ a „UNIQUE“ na pridávanie časových obmedzení je potrebné použiť výraz „WITHOUT OVERLAPS“, a pri hodnote „FOREIGN KEY“ — výraz PERIOD. Napríklad pri definovaní primárnych kľúčov je možné obmedziť kľúče s prekryvajúcimi sa časovými intervalmi.
  • Pridaný príkaz „CREATE FOREIGN TABLE … LIKE command“ na vytvorenie schémy vonkajšej tabuľky na základe definície lokálnej tabuľky.
  • Pridaná podpora pripojenia k SÚBD pomocou autentifikácie na báze OAUTH 2.0 s využitím prístupového tokenu namiesto hesla. Použitie OAUTH umožňuje neschovávať heslá v SÚBD a identifikovať používateľov prostredníctvom externých služieb, rovnako ako využívať funkcie ako dvojfaktorová autentifikácia a jednotné prihlasovanie (SSO).
  • Pridaná funkcia ssl_tls13_ciphers(), cez ktorú je možné určiť zoznam šifrovacích algoritmov, povolených pri pripojení s použitím protokolu TLSv1.3.
  • Podpora autentifikácie pomocou algoritmu md5 na hashovanie hesiel prešla do kategórie zastaraných a plánovaných na odstránenie. Namiesto md5 sa odporúča používať algoritmus SCRAM (SCRAM-SHA-256), ktorý vznikol v PostgreSQL 10. Ďalej je zaznamenaná implementácia podpory prenosu autentifikácie na báze SCRAM pri pripojení cez postgres_fdw a dblink k externým serverom PostgreSQL.
  • Pri vykonávaní operácie „EXPLAIN ANALYZE“ je zabezpečený výstup informácií o počte operácií vyhľadávania v indexoch pri skenovaní indexu a počte prístupov k bufferom pri vykonávaní dotazu. Do výstupu „EXPLAIN ANALYZE VERBOSE“ bola pridaná štatistika o CPU, WAL žurnále a intenzite čítacích operácií. Do tabuľky pg_stat_all_tables boli pridané informácie o čase strávenom operáciou VACUUM a analýzou tabuliek. Poskytovaná štatistika o intenzite vstupu/výstupu a záťaži na WAL žurnál v rámci jednotlivých pripojení. Do pg_stat_subscription_stats a logov bola pridaná informácia o diagnostike konfliktov pri vykonávaní zápisových operácií počas logickej replikácie.
  • V nových inštaláciách je predvolene zapnuté používanie kontrolných súm na overenie integrity uložených dát. Na zrušenie tohto správania pri spustení initdb je potrebné zadať voľbu „—no-data-checksums“.
  • Do nástroja pg_createsubscriber bol pridaný flag „—all“ na vytvorenie logických replik jedným príkazom pre všetky databázy.
  • Bola implementovaná nová verzia (3.2) protokolu, ktorý sa používa na interakciu vonkajších nástrojov s DBMS a je implementovaný v knižnici libpq. Predchádzajúca aktualizácia protokolu bola vykonaná v PostgreSQL 7.4 (rok 2003). V knižnici libpq sa naďalej používa verzia 3.0 ako predvolená.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster