sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad är nytt i PgBouncer 1.6

PgBouncer är en lätt anslutningspoolare för PostgreSQL.

PgBouncer 1.6 tillkännagavs den 1 augusti 2015. I det här blogginlägget kommer vi att prata om de stora nya förbättringarna i PgBouncer.

De viktigaste nya funktionerna i PgBouncer

Ladda in hash för användarlösenord från postgres databas

PgBouncer tillåter nu att ladda användarens lösenord från databasen med två konfigurationsparametrar som är auth_user och auth_query .

  • auth_user
    Om auth_user är inställt kommer alla användare som inte anges i auth_file att frågas från pg_shadow i databasen med auth_user. Auth_users lösenord kommer att tas från auth_file. Denna parameter kan också ställas in per databas.

  • auth_query
    Denna parameter tillåter oss att skriva en SQL-fråga för att ladda användarens lösenord från databasen. Den körs under auth_user. Se standardfrågan nedan:

    SELECT usename, passwd FROM pg_shadow WHERE usename=$1

Poolläge kan konfigureras både per databas och per användare

Med denna funktion, oberoende av huvudpoolningsläget, kan klienter nu ansluta till olika databaser med ett av de 3 poolningslägen som beskrivs nedan. Detta gäller även för användare. Till exempel, om poolningsläget är sessionspoolning, kan en specifik användare konfigureras att använda transaktionspooling. Detta ger oss flexibilitet på databas- och användarnivå att tillämpa lämpligare poolningsalternativ.

PgBouncer tillhandahåller 3 anslutningspoolningslägen:

  • Session pooling
    Under livslängden för en klientanslutning tilldelas en befintlig serveranslutning till klienten och efter att klienten kopplats från, återförs den tilldelade serveranslutningen till anslutningspoolen.
  • Transaktionspoolning
    I detta läge tilldelas inte en serveranslutning till en ansluten klient omedelbart, utan endast under en transaktion. Så snart transaktionen är över läggs anslutningen tillbaka till poolen.
  • Statuspoolning
    Detta liknar transaktionspooling, men är mer aggressivt. En backend tilldelas varje gång en fråga med ett påstående utfärdas. När uttalandet är över läggs anslutningen tillbaka till poolen.

Anslutningsgränser per databas och per användare:max_db_connections och max_user_connections

Med den här funktionen kan vi nu även styra anslutningsgränser per databas/användarnivå med de två nya parametrarna, som är max_db_connections och max_user_connections .

  • max_db_connections
    Den här parametern tillåter inte fler än de angivna anslutningarna per databas (oavsett pool – d.v.s. användare).
    Standardvärdet för denna parameter är obegränsat.
  • max_user_connections
    Den här parametern tillåter inte fler än de angivna anslutningarna per användare (oavsett pool – d.v.s. användare).

Lägg till DISABLE/ENABLE-kommandon för att förhindra nya anslutningar

Med den här funktionen har PgBouncer AKTIVERA/AVAKTIVERA db; kommandon för att förhindra nya anslutningar.

  • AVAKTIVERA db;
    Det här kommandot avvisar alla nya klientanslutningar på den givna databasen.
  • AKTIVERA db;
    Det här kommandot tillåter nya klientanslutningar efter en tidigare DISABLE kommando.

Ny föredragen DNS-backend:c-ares

c-ares är den enda DNS-backend som stöder alla intressanta funktioner:/etc/hosts med uppdatering, SOA-sökning, stora svar (via TCP/EDNS+UDP), IPv6. Det är den föredragna backend nu, och kommer förmodligen att vara den enda backend i  framtid.

Konfigurationsfiler har direktivet "%include FILENAME" så att konfigurationen kan delas upp i flera filer

Med den här funktionen har PgBouncer stöd för inkludering av konfigurationsfiler i andra konfigurationsfiler.

Med andra ord kan PgBouncer-konfigurationsfilen innehålla inkluderande direktiv, som anger en annan konfigurationsfil att läsa och bearbeta. Detta gör det möjligt att dela upp en stor konfigurationsfil till mindre och mer hanterbara filer. Inkluderingsdirektiven ser ut så här:

%include filename

Om filnamnet inte är en absolut sökväg tas det som relativt till nuvarande arbetskatalog.

Det finns fler funktioner släppta i den här versionen. Du kan besöka PgBouncers ändringsloggsida eller kontrollera listan nedan för andra förbättringar:

  • Visa remote_pid i SHOW CLIENTS/SERVERS. Tillgängligt för klienter som ansluter via unix-sockets och både tcp- och unix-socketserver. Vid tcp-server tas pid från avbryt-nyckeln.
  • Lägg till separat konfigurationsparam (dns_nxdomain_ttl) för att kontrollera negativ dns-cache.
  • Lägg till klientvärdens IP-adress och port till application_name. Detta aktiveras av en konfigurationsparameter application_name_add_host som som standard är "av".

Vad är PgBouncer?

PgBouncer är ett verktyg för att hantera klientanslutningar till PostgreSQL-databasen. I ett nötskal upprätthåller den en anslutningspool till PostgreSQL-servern och återanvänder de befintliga anslutningarna. Även om detta kan vara användbart för att minska klientanslutningens overhead, gör det också möjligt att begränsa det maximala antalet öppna anslutningar till databasservern. Den kan också användas för trafikformning som att omdirigera anslutningar till en eller flera databaser till olika databasservrar. Utöver dessa kan PgBouncer användas för att hantera säkerhet på användar- och även på databasnivå.

Se diagrammet nedan som visar PgBouncer-arkitekturen på ett mer visuellt sätt.

I det här specifika exemplet är klientapplikationer anslutna till separata PgBouncer-instanser där de istället skulle kopplas direkt till PostgreSQL-databasservrar. Databasservrarna "DB Server 1" och "DB Server 2" kan vara oberoende PostgreSQL-instanser eller så kan de vara en del av ett kluster med olika roller (t.ex. master/replik eller write-master/backup-master, etc.).

Varje PgBouncer-instans upprätthåller en anslutningspool med ett antal öppna anslutningar till PostgreSQL-servrar. Som det kan ses i exemplet tillåter PgBouncers att skapa pooler med anslutningar till olika databaser och till och med anslutningar till olika databasservrar.

För mer information

Du kan besöka PgBouncers huvudwebbplats: http://pgbouncer.github.io/

De har en trevlig sida med vanliga frågor: http://pgbouncer.github.io/faq.html

Du kan ta en titt på projektets Github-arkiv: http://github.com/pgbouncer/pgbouncer


  1. Gruppering registrerar timme för timme eller dag för dag och fyller luckor med noll eller noll

  2. Hur OCT() fungerar i MariaDB

  3. Hur SQLite Quote() fungerar

  4. Använder kapslade transaktioner i Oracle