Fullständigt vakuum med pg_repack i Azure Database for PostgreSQL – flexibel server
GÄLLER FÖR: Azure Database for PostgreSQL – flexibel server
I den här artikeln lär du dig hur du använder pg_repack
för att ta bort uppblåsthet och förbättra prestanda för azure database for PostgreSQL flexibel server. Överdimensionering är onödiga data som ackumuleras i tabeller och index på grund av frekventa uppdateringar och borttagningar. Uppsvälld kan göra att databasstorleken blir större än förväntat, och det kan allvarligt påverka prestandan för vissa frågor. Använd pg_repack
för att frigöra det bortkastade utrymmet och organisera om data mer effektivt.
Vad är pg_repack?
pg_repack
är ett PostgreSQL-tillägg som tar bort uppsvälldhet från tabeller och index och omorganiserar dem mer effektivt. pg_repack
fungerar genom att skapa en ny kopia av måltabellen eller indexet, tillämpa eventuella ändringar som inträffat under processen och sedan byta ut de gamla och nya versionerna atomiskt. pg_repack
kräver inte några driftstopp eller exklusiva åtkomstlås i den bearbetade tabellen eller indexet, förutom en kort period i början och i slutet av åtgärden. Du kan använda pg_repack
för att optimera valfri tabell eller index i azure database for PostgreSQL– flexibla serverdatabaser.
Hur använder jag pg_repack?
Om du vill använda pg_repack
måste du installera tillägget i din flexibla Azure Database for PostgreSQL-serverdatabas och sedan köra pg_repack
kommandot och ange det tabellnamn eller index som du vill optimera. Tillägget hämtar lås på tabellen eller indexet för att förhindra att andra åtgärder utförs medan optimeringen pågår. Det tar bort uppsvälldhet och omorganiserar data mer effektivt.
Så här fungerar fullständig paketering av tabeller
Om du vill utföra en fullständig ompaketering av tabeller följer tillägget följande steg:
- Skapar en loggtabell för att registrera ändringar som gjorts i den ursprungliga tabellen.
- Lägger till en utlösare i den ursprungliga tabellen, som loggar INSERT, UPDATEs och DELETEs i loggtabellen.
- Skapar en ny tabell som innehåller alla rader i den ursprungliga tabellen.
- Skapar index i den nya tabellen.
- Tillämpar alla ändringar som registrerats i loggtabellen på den nya tabellen.
- Växlar de ursprungliga och nya tabellerna, inklusive index och popup-tabeller.
- Släpper den ursprungliga tabellen.
Under de här stegen pg_repack
har endast ett exklusivt åtkomstlås under en kort period, under den inledande installationen (steg 1 och 2) och igen under den sista växlings- och släppfasen (steg 6 och 7). Under resten av tiden pg_repack
behöver du bara ha ett lås för delad åtkomst i den ursprungliga tabellen, vilket gör att INSERT, UPDATEs och DELETE:er kan fortsätta som vanligt.
Begränsningar
pg_repack
har vissa begränsningar som du bör känna till innan du använder den:
- Måltabellen måste ha antingen en PRIMÄRNYCKEL eller ett UNIKT index i en NOT NULL-kolumn för att åtgärden ska lyckas.
- När
pg_repack
du kör kan du inte utföra några DDL-kommandon (Data Definition Language) på måltabellerna förutom VACUUM eller ANALYZE. För att säkerställa att dessa begränsningar tillämpas harpg_repack
du ett lås för delad åtkomst i måltabellen under en fullständig ompaketering av tabeller.
Ställ in
Förutsättningar
pg_repack
Konfigurera tillägget genom att tillåtalistning och skapa tillägget.
Skapa pg_repack klientprogram
För att det här tillägget ska kunna användas krävs ett klientprogram som du kan skapa och installera på en instans av Ubuntu.
Om du vill installera version 1.4.7 av pg_repack
kör du följande bash-skript på en Ubuntu-dator.
# Create the file repository configuration
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# Import the repository signing key
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# Update the package lists
sudo apt-get update
# Install required packages to build the code
sudo apt-get install -y postgresql-server-dev-14 unzip make gcc libssl-dev liblz4-dev zlib1g-dev libreadline-dev libzstd-dev
# Download compressed version of build tree for version 1.4.7 of pg_repack
wget 'https://api.pgxn.org/dist/pg_repack/1.4.7/pg_repack-1.4.7.zip'
# Uncompress build tree
unzip pg_repack-1.4.7.zip
# Set current directory to where build tree was uncompressed
cd pg_repack-1.4.7
# Build code
sudo make
# Copy resulting binaries to /usr/local/bin
sudo cp bin/pg_repack /usr/local/bin
# Run pg_repack to check its version
pg_repack --version
Använda pg_repack
Exempel på hur du kör pg_repack
i en tabell med namnet info i ett offentligt schema i Azure Database for PostgreSQL– flexibel serverinstans med slutpunkt pgserver.postgres.database.azure.com, användarnamn azureuser och databas-foo med hjälp av följande kommando.
Anslut till den flexibla serverinstansen Azure Database for PostgreSQL med hjälp av den klient som du föredrar. Vi använder psql i det här exemplet.
psql "host=<server>.postgres.database.azure.com port=5432 dbname=<database> user=<user> password=<password> sslmode=require"
Leta reda på versionen av
pg_repack
tillägget som är installerat i databasen.SELECT installed_version FROM pg_available_extensions WHERE name = 'pg_repack';
Versionen av tillägget måste matcha versionen av klientprogrammet, som du kan kontrollera genom att köra det här kommandot:
azureuser@azureuser:~$ pg_repack --version
Kör
pg_repack
klienten mot en tabell med namnet info som finns i databas-foo.pg_repack --host=<server>.postgres.database.azure.com --username=<user> --dbname=<database> --table=info --jobs=2 --no-kill-backend --no-superuser-check
pg_repack alternativ
Användbara pg_repack
alternativ för produktionsarbetsbelastningar:
-k
,--no-superuser-check
: Hoppa över superanvändarkontrollerna i klienten. Den här inställningen är användbar för att användapg_repack
på plattformar som stöder körning av den som icke-superanvändare, till exempel Azure Database for PostgreSQL– flexibla serverinstanser.-j
,--jobs
: Skapa det angivna antalet extra anslutningar till en flexibel Azure Database for PostgreSQL-server och använd dessa extra anslutningar för att parallellisera återskapande av index i varje tabell. Parallella indexversioner stöds endast för fullständiga ompaket.--index
eller--only
indexalternativ: Om din flexibla Azure Database for PostgreSQL-serverinstans har extra kärnor och disk-I/O tillgängligt kan det här alternativet vara ett användbart sätt att påskyndapg_repack
.-D
,--no-kill-backend
: I stället för att döda serverdelsklienter som kör blockerande frågor hoppar du över ompaketeringen av en tabell om låset inte kan hämtas efter att ha väntat på den tid som anges i--wait-timeout
. Som standard--wait-timeout
är inställt på 60 sekunder. Standardvärdet för den här parametern ärfalse
.-E LEVEL
,--elevel=LEVEL
: Välj meddelandenivå för utdata frånDEBUG
,INFO
,NOTICE
,WARNING
,ERROR
,LOG
,FATAL
ochPANIC
. Standardvärdet ärINFO
.
Information om alla alternativ finns i dokumentationen för pg_repack.
Vanliga frågor och svar
Kan pg_repack ett tillägg eller en körbar fil på klientsidan som psql eller pg_dump?
pg_repack är faktiskt både och. pg_repack/lib har koden för tillägget, inklusive schemat och SQL-artefakterna som skapas, och C-biblioteket som implementerar koden för flera av dessa funktioner.
Å andra sidan har pg_repack/bin koden för klientprogrammet, som vet hur man interagerar med programmeringselementen som implementeras i tillägget. Det här klientprogrammet syftar till att underlätta komplexiteten i att interagera med de olika gränssnitten som visas av tillägget på serversidan. Det ger användaren vissa kommandoradsalternativ som är lättare att förstå. Klientprogrammet är värdelöst utan tillägget som skapas i databasen som det pekar på. Tillägget på serversidan är helt funktionellt, men kräver att användaren förstår ett komplicerat interaktionsmönster. Det mönstret skulle bestå av att köra frågor för att hämta data som används som indata till funktioner som implementeras av tillägget osv.