Vydání PostgreSQL 18

Po roce vývoje byla zveřejněna nová stabilní větev PostgreSQL 18 DBMS Aktualizace pro novou větev budou vydány během pěti let do listopadu 2030. PostgreSQL 13.x, nejstarší podporovaná větev, skončí 13. listopadu.

Hlavní inovace:

  • Byl přidán asynchronní I/O subsystém pro zvýšení propustnosti I/O a eliminaci latence. Kromě univerzální implementace AIO (io_method=worker) dostupné na všech platformách, která je založena na spouštění více pracovních procesů (ve výchozím nastavení 3), Linux Lze použít asynchronní I/O rozhraní io_uring (io_method=io_uring), podporované od jádra Linux 5.1. Asynchronní I/O se v současnosti používá pouze k urychlení určitých operací souvisejících s čtením dat ze souborového systému, jako je sekvenční iterace, skenování bitmap indexu a vysávání. V některých testech vedlo použití AIO k 2–3násobnému zvýšení výkonu. Operace zápisu se i nadále provádějí synchronně, aby byly splněny požadavky ACID.
  • Pro vícesloupcové indexy byla implementována optimalizace „skip scan“. To umožňuje použít index nejen pro kontrolu prvního indexovaného sloupce a celého řetězce sloupců, ale také pro zpracování zbývajících indexovaných sloupců jednotlivě. Například dříve se při vytváření indexu B-stromu na sloupcích „(status, date)“ index používal pouze pro dotazy kontrolující pole „status“ nebo obě pole, a to pole „status“ i „date“. Prohledávání tabulky se provádělo při kontrole pouze pole „date“ v dotazu. Režim „skip scan“ umožňuje v určitých situacích prohledávání indexu při dotazování pouze pole „date“. Tento režim je použitelný pouze pro indexy B-stromu při použití podmíněného operátoru „=" na indexovaném poli v dotazu, v situacích, kdy má přeskočené pole malý počet odlišných hodnot (optimalizace bude fungovat například, pokud má pole „status“ několik pevných hodnot).
  • Přidány optimalizace, které efektivněji využívají indexy pro dotazy obsahující konstrukce „OR“ a „IN (...)“ v klauzuli „WHERE“ a zlepšují výkon plánování a provádění spojení tabulek (například kód pro slučování hashů byl zrychlen a při slučování tabulek je nyní povoleno inkrementální řazení).
  • Přidána podpora pro paralelizaci konstrukce indexů GIN (Generalized Inverted Index), které se používají k indexování složených hodnot, jako jsou pole, a k organizaci vyhledávání v fulltextových datech nebo strukturách JSON.
  • Přidána možnost vytvářet materializované pohledy a klíče pro dělení tabulek s jedinečnými indexy, které nepoužívají strukturu B-stromu.
  • Celkový výkon zamykání byl vylepšen pro dotazy, které pracují s velkým počtem tabulek, a bylo provedeno vylepšení zpracování dotazů u dělených tabulek pro urychlení prořezávání nepoužívaných oddílů a operací sloučení (JOIN).
  • Textové operace, jako například funkce pro převod velkých/malých písmen, byly zrychleny. Byl přidán režim PG_UNICODE_FAST pro urychlení zpracování vlastností lokalizace znaků Unicode.
  • Implementovali jsme možnost uchovávat statistiky plánovače dotazů po upgradu mezi hlavními verzemi PostgreSQL. Tato změna eliminuje náročnou operaci „ANALYZE“ po spuštění nové verze, která může způsobit pokles výkonu, dokud se nedokončí.
  • Výkon utility pg_upgrade, která se používá k automatizaci upgradu na novou hlavní verzi PostgreSQL, byl vylepšen. Tyto optimalizace jsou obzvláště patrné při upgradu databází obsahujících velké množství objektů, jako jsou tabulky a sekvence. Pro zrychlení pg_upgrade jsme také přidali příznak „--jobs N“ pro paralelizaci kontrol napříč N vlákny a příznak „--swap“ pro nahrazení celých datových adresářů bez linkování, klonování nebo kopírování souborů.
  • Byla přidána podpora pro virtuálně generované sloupce, jejichž hodnoty se počítají za běhu během provádění dotazu, bez ukládání na disk. Pokud příkaz „CREATE TABLE...“ specifikuje pro generované sloupce pouze klíčové slovo „GENERATED“ bez určení typu (STORED nebo VIRTUAL), použije se ve výchozím nastavení nová implementace místo staré implementace. Ve staré implementaci se hodnoty generovaly během operací „INSERT“ nebo „UPDATE“ a ukládaly se na disk pro následné použití. Nevýhodou virtuálně generovaných sloupců je, že je nelze použít v indexech, ale jejich výhodou je možnost normalizovat a upravovat data za běhu (relevantní při práci s daty JSON). Pokud jde o klasické uložené generované sloupce, nová verze poskytuje podporu pro logickou replikaci.
  • Příkazy INSERT, UPDATE, DELETE a MERGE nyní podporují možnost zobrazení minulých (OLD) a aktuálních (CURRENT) hodnot v klauzuli RETURNING. Například „UPDATE… RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.“
  • Byla přidána funkce uuidv7() pro generování náhodných jedinečných identifikátorů ve formátu UUIDv7. Na rozdíl od staré funkce generování UUID (gen_random_uuid), která je nyní k dispozici také jako uuidv4(), UUIDv7 zahrnuje kromě náhodné hodnoty i čas generování. Uspořádání částí v hodnotě UUID (prvních 12 znaků představuje čas epochy a dalších 18 představuje náhodnou hodnotu) zlepšuje efektivitu třídění a indexování, což je důležité, protože UUID se obvykle používají pro primární klíče (například klíče vytvořené v podobné době jsou v indexu umístěny vedle sebe).
  • Operace „LIKE“ nyní podporuje porovnávání textů, která využívají nedeterministické vlastnosti řazení podle národního prostředí, což umožňuje smysluplné porovnávání znaků (například diakritika mohou být během porovnávání ignorována). Byla přidána funkce CASEFOLD pro změnu velikosti písmen znaků na základě vlastností řazení podle národního prostředí (například některé znaky mají více než dvě varianty malých písmen nebo vyžadují během porovnávání převod na velká písmena).
  • Byla přidána možnost používat časová omezení. Pro hodnoty PRIMARY KEY a UNIQUE použijte výraz WITHOUT OVERLAPS k přidání časových omezení a pro hodnoty FOREIGN KEY použijte výraz PERIOD. Například při definování primárních klíčů můžete omezit klíče s překrývajícími se časovými intervaly.
  • Přidán příkaz „CREATE FOREIGN TABLE … LIKE“ pro vytvoření schématu cizí tabulky na základě definice lokální tabulky.
  • Byla přidána podpora pro připojení k DBMS pomocí ověřování OAUTH 2.0 s přístupovým tokenem namísto hesla. Použití OAUTH eliminuje nutnost ukládat hesla do databáze, což umožňuje ověřování uživatelů prostřednictvím externích služeb a používání funkcí, jako je dvoufaktorové ověřování a jednotné přihlášení (SSO).
  • Byla přidána funkce ssl_tls13_ciphers(), kterou lze použít k definování seznamu šifrovacích algoritmů povolených při připojení pomocí protokolu TLSv1.3.
  • Podpora pro autentizaci pomocí algoritmu hashování hesel md5 byla ukončena a její odstranění je naplánováno. Místo md5 se doporučuje používat algoritmus SCRAM (SCRAM-SHA-256), který byl zaveden v PostgreSQL 10. Dále byla implementována podpora pro autentizaci založenou na SCRAM při připojování k externím serverům PostgreSQL přes postgres_fdw a dblink.
  • Operace „EXPLAIN ANALYZE“ nyní zobrazuje informace o počtu vyhledávání indexů během prohledávání indexů a o počtu přístupů k vyrovnávací paměti během provádění dotazů. Výstup „EXPLAIN ANALYZE VERBOSE“ nyní obsahuje statistiky o CPU, protokolu WAL a aktivitě čtení. Tabulka pg_stat_all_tables nyní zobrazuje informace o čase stráveném operací VACUUM a analýzou tabulky. Statistiky o aktivitě I/O a načítání protokolu WAL jsou nyní k dispozici pro jednotlivá připojení. pg_stat_subscription_stats a protokoly nyní obsahují informace o diagnostice konfliktů pro operace zápisu během logické replikace.
  • Nové instalace ve výchozím nastavení povolují kontrolní součty pro ověření integrity uložených dat. Chcete-li toto chování zakázat, zadejte při spuštění initdb volbu „--no-data-checksums“.
  • Do utility pg_createsubscriber byl přidán příznak „--all“, který umožňuje vytvářet logické repliky pro všechny databáze najednou pomocí jediného příkazu.
  • Byla implementována nová verze (3.2) protokolu používaného pro interakci mezi externími utilitami a SŘBD, implementovaná v knihovně libpq. Protokol byl naposledy aktualizován v PostgreSQL 7.4 (2003). Knihovna libpq nadále standardně používá verzi 3.0.

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster