sql >> Database >  >> RDS >> PostgreSQL

Nieuwe en evoluerende PostgreSQL Enterprise-functies met recente releases

PostgreSQL heeft in de versies 10 tot en met 11, 12 en 13 ook veel andere baanbrekende functies geïntroduceerd die het een echte concurrent van Oracle maken, zoals partitioneringsverbeteringen, parallelle query's en logische replicatie. In deze blogpost laten we enkele van de nieuwe en opvallende PostgreSQL-functies zien die zijn opgenomen in recentere versies van PostgreSQL.

Partitioneringsfuncties

Declaratieve partitionering

Tot PostgreSQL versie 9.4 was er geen daadwerkelijke partitionering in PostgreSQL. Dit werd alleen bereikt door tabelovererving, die zeer beperkte functionaliteit en prestatievoordelen bood. Veel van de functionaliteit wordt handmatig beheerd via triggers of SQL-opdrachten. We moesten bijvoorbeeld triggers gebruiken om een ​​rij voor INSERT naar de juiste partitie te leiden. We moeten indexen maken voor elke partitie afzonderlijk. PostgreSQL versie 10 bracht declaratieve partitionering voort, maar we moesten nog steeds beperkingen en indexen maken voor elke partitie.

PostgreSQL 11 wordt geleverd met een zeer indrukwekkende reeks nieuwe partitioneringsfuncties om zowel de prestaties te verbeteren als om gepartitioneerde tabellen transparanter te maken voor toepassingen.

Logische replicatie van gepartitioneerde tabellen

Met PostgreSQL 13 introduceerden ze ondersteuning voor het logisch repliceren van gepartitioneerde tabellen. Voorheen was je gedwongen om partities afzonderlijk naar je standbys te repliceren. Nu kunt u echter automatisch al uw partities tegelijkertijd repliceren

Partitioneringsmethoden

De momenteel ondersteunde partitioneringsmethoden zijn bereik, lijst en hash.

Toetsen en indexen

Volledige ondersteuning voor externe sleutels op gepartitioneerde tabellen is toegevoegd in PostgreSQL 12. PostgreSQL biedt ook ondersteuning voor primaire sleutels, indexen en triggers op gepartitioneerde tabellen.

Standaardpartitie

PostgreSQL maakt het mogelijk om een ​​"standaard" partitie aan te maken voor het opslaan van gegevens die niet overeenkomen met een van de overige partities. Oracle-gebruikers zullen deze functie geweldig vinden omdat deze niet beschikbaar is in Oracle Database.

Rijbeweging

UPDATE-instructies die een partitiesleutelkolom wijzigen, zorgen er nu voor dat de betreffende rijen naar de juiste partities worden verplaatst.

Partitie snoeien

Verbeter de SELECT-prestaties door verbeterde partitie-eliminatiestrategieën tijdens het plannen en uitvoeren van query's. Er is een nieuwe methode toegevoegd om partities te verwijderen. Dit nieuwe algoritme kan overeenkomende partities bepalen door naar de WHERE-clausule van de query te kijken. Het vorige algoritme controleerde op zijn beurt elke partitie om te zien of deze kon overeenkomen met de WHERE-component van de query. Dit resulteerde in een extra toename van de planningstijd naarmate het aantal partities groeide.

Opschonen van partities tijdens het uitvoeren van query's

Wat de voorbereide instructies betreft, zijn de queryparameters niet bekend voor de uitvoering. Query Planner kan partities niet verwijderen tijdens de planningsfase omdat de parameters niet bekend zijn. Dus de uitvoerder snoeit de partitie tijdens de uitvoering om alleen toegang te krijgen tot de partities die overeenkomen met parameters.

Nieuwe en evoluerende PostgreSQL Enterprise-functies met recente releasesKlik om te tweeten

Indexeringsfuncties

Dekkingsindex

PostgreSQL staat je nu toe om niet-sleutelkolommen toe te voegen aan de btree-index. Aangezien zoekopdrachten doorgaans meer kolommen moeten ophalen dan alleen de kolommen waarop ze zoeken, kunt u met PostgreSQL een index maken waarin sommige kolommen slechts "payload" zijn en geen deel uitmaken van de zoeksleutel. Het helpt bij het uitvoeren van alleen-index scans om de vereiste rijen op te halen.

Tegelijkertijd opnieuw indexeren

Vanaf PostgreSQL 12 is het mogelijk om een ​​index GELIJKTIJDIG opnieuw op te bouwen met REINDEX zonder de tabel te vergrendelen voor lezen/schrijven, net zoals het Oracle REBUILD INDEX-commando.

Aanmaken van parallelle indexen

Met het maken van parallelle indexen (geïntroduceerd in PostgreSQL 11, momenteel alleen van toepassing op b-tree-indexen), kunnen indexen sneller worden gemaakt tot max_parallel_workers waarde en het instellen van maintenance_work_mem groot genoeg voor meerdere kopieën van gegevens. Het maken van parallelle indexen kan de aanmaaktijd van uw index aanzienlijk verkorten.

Deduplicatie van gegevens in B-Tree-indexen

Soms zullen er dubbele items in een index staan. Dit betekent dat een bladknooppunt in een B-Tree-index met ten minste twee indexitems in dezelfde index dezelfde gegevens voor alle indexkolommen bevat. Met de toevoeging van deduplicatie in PostgreSQL 13, kunt u deze dubbele B-Tree-indexitems groeperen en ze in een groepsitem verzamelen. Het voordeel hiervan is dat u ruimte bespaart en de schijf en RAM minder belast, omdat u geen kolomgegevens hoeft te dupliceren. Dubbele vermeldingen veroorzaken ook een ongewenste opgeblazen gevoel in de index.

Verificatie

SCRAM-SHA-256

In PostgreSQL 11 kwam ondersteuning voor SCRAM-SHA-256 wachtwoordverificatie. Deze methode voorkomt dat wachtwoorden op niet-vertrouwde verbindingen worden gesnuffeld en stelt u in staat uw wachtwoorden in cryptografisch gehashte vorm op te slaan.

Van alle momenteel ondersteunde wachtwoordverificatiemethoden is dit de veiligste.

GSSAPI

GSSAPI staat veilige authenticatie toe, evenals automatische eenmalige aanmelding voor systemen die dit ondersteunen. Deze authenticatiemethode is gebaseerd op een GSSAPI-compatibele beveiligingsbibliotheek. De gegevens die via de databaseverbinding worden verzonden, zijn niet-versleuteld, tenzij SSL wordt gebruikt; de authenticatie zelf is echter veilig. GSSAPI met Kerberos-authenticatie is mogelijk met PostgreSQL volgens industriestandaarden. Wanneer Kerberos wordt gebruikt, wordt een standaard-principal gebruikt in het formaat "servicename/hostname@realm". Elke principal die is opgenomen in de keytab die door de server wordt gebruikt, wordt geaccepteerd door de PostgreSQL-server.

LDAP

Deze authenticatiemethode werkt op dezelfde manier als wachtwoordverificatie en gebruikt LDAP als verificatiemethode. Het wordt alleen gebruikt om gebruikersnaam- en wachtwoordparen te valideren, daarom moet de gebruiker al in de database bestaan ​​om de authenticatie te laten werken. LDAP-authenticatie werkt in een eenvoudige bindmodus of in de zogenaamde zoeken+binden. Met Search+bind kunt u andere id's gebruiken in vergelijking met de eenvoudige bindmodus, waarbij alleen de DN-naam, domeinnaam of e-mail kan worden gebruikt.

Certificaat

De certificaatverificatiemethode gebruikt SSL-certificaten om te verifiëren. Daarom is het alleen beschikbaar voor SSL-verbindingen. Bij certificaatverificatie is geen wachtwoord vereist. De client hoeft alleen een geldig en vertrouwd certificaat te verstrekken om te kunnen authenticeren. De algemene naam van het certificaat wordt gekoppeld aan de gebruikersnaam van de database en als er een overeenkomst wordt gevonden, wordt de client aangemeld.

Andere opvallende kenmerken

Parallel vacuüm

Met de release van PostgreSQL 13 werden verbeteringen aan het VACUUM-commando geïmplementeerd. De verbetering in kwestie is de toegevoegde parameteroptie PARALLEL. Met PARALLEL kunt u indexvacuüm- en indexopruimingsfasen van VACUUMM uitvoeren. Dit stelt u in staat om meerdere indexen parallel te stofzuigen die overeenkomen met een enkele tafel.

Parallelle zoekopdracht

De meeste Reports-query's, die over het algemeen veel gegevens scannen, lijden aan prestatievermindering doordat gegevens uit veel rijen moeten worden gescand of samengevoegd, zelfs met een indexscan. Deze query's kunnen slechts één CPU gebruiken tot 9.4 en worden serieel uitgevoerd.

Met parallelle query's (die parallelle sequentiële scan, merge join, hash join, aggregatie en andere parallelle queryplanfuncties biedt), kunnen deze query's profiteren van meerdere werkers, en de prestaties kunnen verbeteren van 2x naar 10x volgens documentatie.

Bekijk dit bericht om te zien wanneer je parallelle zoekopdrachten moet gebruiken.

Native logische replicatie

PostgreSQL introduceerde native logische replicatie in versie 10 om een ​​flexibelere replicatieoptie te bieden, in tegenstelling tot streamingreplicatie en meer zoals Oracle Streams, om specifieke tabellen, kolommen of rijen te repliceren. Dit kan worden gebruikt om te splitsen tussen meerdere databases of te consolideren vanuit meerdere databases. En kan ook repliceren tussen verschillende hoofdversies van PostgreSQL.

Opgeslagen procedures met ingesloten transacties

Nog een toevoeging die PostgreSQL compatibel maakt voor migraties vanuit de Oracle-database.

We hebben geen transactiecontrole binnen het pgsql-programma (DO-blok of functie) in versie 9.4, en moeten een tijdelijke oplossing gebruiken zoals dblink om transacties te starten en vast te leggen/terug te draaien .

Met opgeslagen procedures, die in première gingen in versie 11, kunnen we nu transactiecontrole binnen elke pgsql-structuur implementeren, zoals while-lus, for-lus of if else-statement. Hoewel opgeslagen procedures vergelijkbaar zijn met functies, moeten ze worden aangeroepen met de opdracht CALL en kunnen ze als onafhankelijke programma's werken.

Gegenereerde kolommen

Net als Oracle-database kunnen gegenereerde kolommen in PostgreSQL de gegevens opslaan die automatisch zijn berekend uit andere kolommen in de rij. Dit versnelt query's doordat de waarde niet hoeft te worden berekend tijdens het uitvoeren van de query, en in plaats daarvan wordt de gegenereerde kolomwaarde berekend op INSERT of UPDATE naar de rij.

JIT-compilatie

PostgreSQL 11, 12 en 13 ondersteunen allemaal Just-in-Time (JIT)-compilatie, die in 2018 werd toegevoegd. JIT-compilatie is het proces waarbij een geïnterpreteerde programma-evaluatie wordt omgezet in een native programma. Met JIT-compilatie kan dit proces tijdens runtime worden uitgevoerd. Een voordeel van JIT is de mogelijkheid om expressiespecifieke functies te genereren die de CPU native kan uitvoeren. Op zijn beurt geeft het proces je een versnelling.

Paginacontrolesommen

Paginacontrolesommen is een functie waarmee u de integriteit van op schijf opgeslagen gegevens kunt controleren. Voorheen kon u paginacontrolesommen alleen inschakelen tijdens de initialisatie van een PostgreSQL-cluster. PostgreSQL 12 introduceerde de mogelijkheid om paginacontrolesommen in een offline cluster in of uit te schakelen via de opdracht pg_checksums.

Samenvatting

Zoals je in dit artikel kunt zien, is PostgreSQL een steeds evoluerend databasesysteem dat veel krachtige functies naar de tafel brengt. Elke nieuwe versie voegt nieuwe opwindende functies toe die het een echte concurrent maken van andere databases zoals Oracle. De partitionerings- en indexeringsfuncties krijgen veel nieuwe updates die worden toegevoegd aan de toch al uitgebreide toolbox.

Als u op zoek bent naar een beheerde oplossing voor uw PostgreSQL-database, bekijk dan gerust onze ScaleGrid voor PostgreSQL-service. We bieden een gratis proefperiode van 30 dagen waarmee u al onze beheerfuncties zonder beperkingen kunt gebruiken. Prijzen beginnen bij slechts $ 10 per maand en geven u toegang tot een volledig beheerde PostgreSQL-hostingoplossing op ondernemingsniveau met 24/7 ondersteuning.


  1. Meerdere rijen invoegen in Oracle

  2. Problemen oplossen Microsoft SQL Server-fout 18456

  3. Een ORA 02063 DG4ODBC-fout onderzoeken

  4. Mysql-query om rijen dynamisch naar kolommen te converteren