Het monitoren van PostgreSQL kan soms zijn alsof je vee probeert te ruziën in een onweersbui. Applicaties maken zo snel verbinding en geven zoekopdrachten uit, dat het moeilijk is om te zien wat er aan de hand is of zelfs maar een goed overzicht te krijgen van de prestaties van het systeem, behalve de typische ontwikkelaar die klaagt over het soort verzoeken van 'dingen zijn traag, help!'.
In eerdere artikelen hebben we besproken hoe u bij de bron kunt komen wanneer PostgreSQL traag werkt, maar wanneer de bron specifiek vragen bevat, is monitoring op basisniveau mogelijk niet voldoende om te beoordelen wat er gaande is in een actieve live-omgeving.
Voer pg_top in, een PostgreSQL-specifiek programma om realtime-activiteit in een database te volgen, evenals basisinformatie voor de databasehost zelf. Net zoals het linux-commando 'top', brengt het uitvoeren ervan de gebruiker in een live interactieve weergave van database-activiteit op de host, die automatisch met tussenpozen wordt vernieuwd.
Installatie
Het installeren van pg_top kan op de algemeen verwachte manieren worden gedaan:pakketbeheerders en broninstallatie. De meest recente versie van dit artikel is 3.7.0.
Pakketbeheerders
Op basis van de distributie van linux in kwestie, zoek naar pgtop of pg_top in de pakketbeheerder, het is waarschijnlijk in een bepaald aspect beschikbaar voor de geïnstalleerde versie van PostgreSQL op het systeem.
Op Red Hat gebaseerde distributies:
# sudo yum install pg_top
Op Gentoo gebaseerde distributies:
# sudo apt-get install pgtop
Bron
Indien gewenst kan pg_top worden geïnstalleerd via de broncode van de PostgreSQL git-repository. Dit levert elke gewenste versie op, zelfs nieuwere builds die nog niet in de officiële releases zitten.
Functies
Eenmaal geïnstalleerd, werkt pg_top als een zeer nauwkeurige realtime weergave van de database die het bewaakt en als de opdrachtregel wordt gebruikt om 'pg_top' uit te voeren, wordt de interactieve PostgreSQL-monitoringtool gestart.
De tool zelf kan helpen licht te werpen op alle processen die momenteel met de database zijn verbonden.
Pg_top aan het rennen
Het starten van pg_top is hetzelfde als het Unix / linux-stijl 'top'-commando zelf, samen met verbindingsinformatie naar de database.
Om pg_top op een lokale databasehost uit te voeren:
pg_top -h localhost -p 5432 -d severalnines -U postgres
Om pg_top op een externe host uit te voeren, is de vlag -r of --remote-mode vereist en is de pg_proctab-extensie op de host zelf geïnstalleerd:
pg_top -r -h 192.168.1.20 -p 5432 -d severalnines -U postgres
Wat staat er op het scherm
Bij het starten van pg_top zien we een display met behoorlijk wat informatie.
Standaard uitvoer van pg_top op linux
Gemiddelde belasting:
Net als de standaard opdracht top, wordt dit gemiddelde geladen voor intervallen van 1, 5 en 15 minuten.
Uptime:
De totale tijd dat het systeem online is geweest sinds de laatste keer opnieuw opstarten.
Processen:
Het totale aantal databaseprocessen dat is verbonden, met een aantal van hoeveel actief zijn en hoeveel slapend.
CPU-statistieken:
De statistieken van de CPU, met de procentuele belasting voor gebruiker, systeem en inactiviteit, leuke informatie evenals iowait-percentages.
Geheugen:
De totale hoeveelheid geheugen die wordt gebruikt, vrij, in buffers en in de cache.
DB-activiteit:
De statistieken voor database-activiteit, zoals de transacties per seconde, het aantal terugdraaiingen per seconde, gelezen buffers per seconde, getroffen buffers per seconde, aantal gelezen rijen per seconde en geschreven rijen per seconde.
DB I/O-activiteit:
De activiteit voor invoeruitvoer op het systeem, die laat zien hoeveel lees- en schrijfbewerkingen per seconde, evenals het aantal lees- en schrijfbewerkingen per seconde.
DB-schijfstatistieken:
De totale grootte van de databaseschijf, evenals hoeveel vrije ruimte.
Swap:
De informatie over de gebruikte swapruimte, indien van toepassing.
Processen:
Een lijst met processen die zijn verbonden met de database, inclusief elk type autovacuüm interne processen. De lijst bevat de pid, prioriteit, de mooie hoeveelheid, gebruikt intern geheugen, de status van de verbinding, het aantal gebruikte cpu-seconden, cpu-percentage en de huidige opdracht die het proces uitvoert.
Handige interactieve functies
Er zijn een handvol interactieve functies in pg_top die toegankelijk zijn terwijl het actief is. Een volledige lijst kan worden gevonden door een ? in te voeren, waarna een helpscherm verschijnt met alle verschillende beschikbare opties.
Plannerinformatie
E - Uitvoeringsplan
Als u E invoert, wordt u gevraagd om een proces-ID waarvoor een uitlegplan moet worden weergegeven. Dit komt overeen met het uitvoeren van "EXPLAIN
A - EXPLAIN ANALYZE (UPDATE/DELETE safe)
Als u A invoert, wordt u gevraagd om een proces-ID waarvoor een EXPLAIN ANALYZE-plan kan worden weergegeven. Dit komt overeen met het uitvoeren van "EXPLAIN ANALYZE
Procesinformatie
Q - Toon huidige query van een proces
Als u Q invoert, wordt gevraagd om een proces-ID waarvoor de volledige query moet worden weergegeven.
I - Toont I/O-statistieken per proces (alleen Linux)
Als u I invoert, wordt de proceslijst omgeschakeld naar een I/O-display, waarbij elk proces wordt weergegeven voor lezen, schrijven, enz. naar schijf.
L - Toont vergrendelingen vastgehouden door een proces
Als u L invoert, wordt gevraagd om een proces-ID waarvoor vastgehouden vergrendelingen moeten worden weergegeven. Dit omvat de database, de tabel, het type vergrendeling en of de vergrendeling al dan niet is verleend. Handig voor bij het verkennen van langlopende of wachtende processen.
Relatie-informatie
R - Toon gebruikerstabelstatistieken.
Als u R invoert, worden tabelstatistieken weergegeven, inclusief opeenvolgende scans, indexscans, INSERT's, UPDATE's en DELETE's, allemaal relevant voor de recente activiteit.
X - Toon gebruikersindexstatistieken
Als u X invoert, worden indexstatistieken weergegeven, inclusief indexscans, indexlezingen en indexophaalacties, allemaal relevant voor de recente activiteit.
Sorteren
U kunt het display sorteren met een van de volgende tekens.
M - Sorteren op geheugengebruik
N - Sorteren op pid
P - Sorteren op CPU-gebruik
T - Sorteren op tijd
De volgende items zijn gespecificeerd na het indrukken van o, waardoor ook de index, tabel en i/o stat-pagina's kunnen worden gesorteerd.
o - Specificeer de sorteervolgorde (cpu, grootte, res, tijd, commando)
indexstatistieken (idx_scan, idx_tup_fetch, idx_tup_read)
tabelstatistieken (seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_ins, , sy, sy, sy, sy, sy, sy, sy, sy, sy, sy , schrijft, cwrites, commando)
Verbinding / Query-manipulatie
k - kill-processen gespecificeerd
Als u k invoert, wordt een proces of een lijst met databaseprocessen die moeten worden afgebroken weergegeven.
r - renice a process (alleen lokale database, alleen root)
Als u r invoert, wordt gevraagd om een mooie waarde, gevolgd door een lijst met processen die op die nieuwe mooie waarde kunnen worden ingesteld. Dit verandert de prioriteit van belangrijke processen in het systeem.
Voorbeeld:"renice 1 7004"
Verschillend gebruik van pg_top
Reactief gebruik van pg_top
Het algemene gebruik voor pg_top is de interactieve modus, waardoor we kunnen zien welke zoekopdrachten worden uitgevoerd op een systeem dat traagheidsproblemen ondervindt, plannen uitvoeren voor die zoekopdrachten, belangrijke zoekopdrachten negeren om ze sneller te laten voltooien, of alle zoekopdrachten beëindigen die grote vertragingen veroorzaken . Over het algemeen stelt het de databasebeheerder in staat om veel van dezelfde dingen te doen die handmatig op het systeem kunnen worden gedaan, maar in een snellere en alles-in-één optie.
Proactief gebruik van pg_top
Hoewel het niet al te vaak voorkomt, kan pg_top worden uitgevoerd in 'batch-modus', waarin de belangrijkste informatie wordt weergegeven die is besproken om te standaardiseren en vervolgens af te sluiten. Dit kan worden gescript om met bepaalde tussenpozen te worden uitgevoerd en vervolgens naar elk gewenst aangepast proces worden verzonden, geparseerd en waarschuwingen worden gegenereerd op basis van waar de beheerder mogelijk op wil worden gewaarschuwd. Als de belasting van het systeem bijvoorbeeld te hoog wordt, als er een hoger dan verwachte transactiewaarde per seconde is, kan een creatief programma alles bedenken.
Over het algemeen zijn er andere tools om deze informatie te verzamelen en erover te rapporteren, maar meer opties hebben is altijd een goede zaak, en met meer tools beschikbaar zijn de beste opties te vinden.
Historisch gebruik van pg_top
Net als het vorige gebruik, proactief gebruik, kunnen we pg_top scripten in een batchmodus om snapshots te loggen van hoe de database er in de loop van de tijd uitziet. Dit kan zo simpel zijn als het naar een tekstbestand schrijven met een tijdstempel, of het ontleden en de datum opslaan in een relationele database om rapporten te genereren. Zo kan er meer informatie worden gevonden na een groot incident, zoals een databasecrash om 04:00 uur. Hoe meer gegevens er beschikbaar zijn, hoe groter de kans dat er problemen worden gevonden.
Meer informatie
De documentatie voor het project is vrij beperkt en de meeste informatie is beschikbaar op de linux-manpagina, die u kunt vinden door 'man pg_top' uit te voeren. De PostgreSQL-gemeenschap kan helpen met vragen of problemen via de PostgreSQL-mailinglijsten of de officiële IRC-chatroom op freenode, kanaalnaam #postgresql.