FBMonLogger
FBMonLogger is nu onderdeel van HQbird Standard!
FBMonLogger is een tool om de output van monitoringtabellen in Firebird te analyseren en problemen te vinden met trage SQL-queries, verkeerd ontworpen transacties (langlopende transacties, transacties met een onjuist isolatieniveau, enz.) en om problematische applicaties te identificeren.
FBMonLogger kan verbinding maken met een Firebird-database met prestatieproblemen en vaststellen wat de reden van de traagheid is: is het een gebruikersattachment, een trage SQL-query of een langlopende transactie?
FBMonLogger ondersteunt Firebird 2.1, 2.5 en 3.0 - voor oudere Firebird-versies of InterBase gebruik dan FBScanner.
FBMonLogger kan u het volgende tonen:
- Top-attachments met het hoogste aantal IO-bewerkingen, niet-geïndexeerde en geïndexeerde reads
- Top-SQL-statements met het hoogste aantal IO-bewerkingen, niet-geïndexeerde en geïndexeerde reads
- Problematische transacties: langlopende transacties, transacties met een onjuist isolatieniveau, lees-/schrijftransacties, en gerelateerde informatie: wanneer ze zijn gestart, welke applicaties deze transacties hebben gestart, vanaf welk IP-adres, enz.
- Attachments en statements met de meest intensieve garbage collection-acties
- Lees-/schrijfverhouding, INSERT/UPDATE/DELETE-verhouding, en meer.
Na verbinding met de database waarin u prestatieproblemen wilt vinden, moeten er verschillende snapshots van de monitoringtabellen worden gemaakt - klik op «Get Snapshot» om een snapshot te nemen.
Geaggregeerde prestatiestatistieken voor gebruikersattachments
Op het eerste scherm zien we geaggregeerde statistieken voor databaseverbindingen en kunnen we verbindingen met de grootste problemen identificeren:
Sequentiële reads / Geïndexeerde reads
“Sequentiële reads / Geïndexeerde reads” toont ons de totale verhouding tussen sequentiële (niet-geïndexeerde) reads en geïndexeerde reads in de applicatie. Normaal gesproken zou het aantal niet-geïndexeerde reads laag moeten zijn, dus een groot percentage sequentiële reads is een teken dat veel SQL-queries NATURAL-uitvoeringsplannen hebben, en dit kan een reden zijn voor trage responstijden.
Klik op een record in «TOP attachments: sequential/indexed reads» om naar het tabblad «Attachments» te gaan, waar u meer details over de Attachment kunt zien, en spring dan naar het tabblad «Transactions» of «Statements», waar u transacties en statements ziet die gekoppeld zijn aan de geselecteerde attachment (als het vinkje «Link to selected attachment» aan staat, anders worden alle transacties/statements voor alle attachments getoond).
Schrijfdetails
«Write details» geeft u een overzicht van schrijfbewerkingen: de verhouding tussen INSERTs/UPDATEs/DELETEs onder alle database-attachments. In de tabel met top-schrijvers kunt u attachments zien met het grootste aantal schrijfbewerkingen. Dit is nuttig om applicaties of softwaremodules te identificeren die een buitensporig aantal updates of deletes uitvoeren (de gevaarlijkste bewerkingen wat betreft garbage collection).
Garbage collection-details
Wat betekenen garbage collection-bewerkingen?
- Purge - de engine verwijdert backversies, alleen de primaire versie blijft in de database.
- Expunge - zowel de primaire versie als alle backversies zijn verwijderd.
- Backout - alleen de primaire versie wordt verwijderd (als gevolg van rollback).
Meestal kunnen we purge associëren met UPDATE-bewerkingen, Expunge met DELETE, en Backout met rollback van INSERT of UPDATE. Veel backouts kunnen betekenen dat er een probleem is met transactiebeheer in de applicatie.
Geheugengebruik
De grafiek «Memory usage» toont ons het totale geheugen dat nu door alle actieve attachments wordt gebruikt, en de piek van het toegewezen geheugen voor hen in het verleden.
De lijst met top-attachments op geheugengebruik toont ons de grootste geheugenverbruikers onder uw attachments. Dit is nuttig om applicaties of softwaremodules met buitensporig geheugengebruik te vinden.
Geaggregeerde prestatiestatistieken voor statements
Op het tweede tabblad vindt u geaggregeerde prestatiestatistieken voor statements. Deze statistieken weerspiegelen beter de momentane situatie in de database - aangezien monitoringtabellen informatie verzamelen sinds het begin van het leven van elk object, zijn de statements die u hier ziet degenen die draaiden op het moment dat de snapshot werd genomen.
Sequentiële reads / Geïndexeerde reads
In deze lijst zien we top-statements die veel sequentiële reads uit de database uitvoeren. Meestal vereisen dergelijke statements SQL-tuning - hetzij via index-tuning, hetzij via herontwerp van de SQL-query.
Om de query te tunen, controleert u het uitvoeringsplan: meestal is het mogelijk om de querysnelheid te verbeteren door NATURAL in plannen te elimineren met nieuwe indexen of query-herontwerp. Klik op het statement in deze lijst om het tabblad «Statements» te openen, waar u meer details over het geselecteerde statement kunt vinden en naar de bijbehorende transactie of attachment kunt springen.
Paginareads/paginawrites
Deze grafieken en lijst tonen korte informatie over top-statements die veel reads uitvoeren - dit betekent dat ze aanzienlijke IO verbruiken en de prestaties van andere queries kunnen beïnvloeden. SQL-statements met piekwaarden moeten zorgvuldig worden gecontroleerd op optimale prestaties.
Schrijfdetails voor statements
In deze grafiek kunt u zien welke schrijvende SQL-statements actief waren op het moment dat de snapshot van de monitoringtabellen werd genomen, en UPDATES en DELETEs identificeren die veel wijzigingen in de database hebben aangebracht.
Garbage collection-details voor statements
In deze grafiek kunnen we zien hoeveel garbage collection-bewerkingen zijn uitgevoerd door statements die op het moment van de snapshot draaiden.
Geheugengebruik voor statements
In tegenstelling tot de geaggregeerde geheugengebruikstatistieken voor attachments, kan het geheugengebruik van statements ons een lijst tonen van exacte statements die op dat moment veel geheugen verbruiken.
Attachments
Het derde tabblad is «Attachments». U kunt dit tabblad direct openen door op een van de records in «Aggregated performance statistics» te klikken.
Attachments toont een lijst van gebruikers die verbonden zijn met de Firebird-database, met veel nuttige details: USER en ROLE van de attachment, starttijd en ID van de attachment, of garbage collection is ingeschakeld voor de attachment, de naam van het externe proces dat de attachment heeft opgezet, en verschillende geaccumuleerde prestatiecounters voor de attachment: aantal sequentiële reads [uitgevoerd door de attachment sinds de start], aantal geïndexeerde reads, aantal inserts, updates en deletes, evenals records backouts, purges en expunges.
Standaard zijn sommige kolommen van attachments uitgeschakeld om alleen de belangrijkste informatie te tonen.
Natuurlijk kunt u bij elke klik op een attachment doorgaan naar de transacties die erin draaien, en vervolgens naar de statements. Er is een selectievakje in de linkerbovenhoek van de tabbladen Transactions en Statements dat het gedrag regelt - wanneer aangevinkt, worden alleen transacties en statements getoond die zijn gemarkeerd met de geselecteerde attachment-ID.
Transactions
Het tabblad «Transactions» toont actieve transacties op het moment dat de snapshot werd genomen. Als het selectievakje «Link to selected attachment» is ingeschakeld, worden alleen transacties voor de geselecteerde attachment getoond, anders worden alle transacties getoond.
Een van de belangrijkste kenmerken is de levensduur van transacties: aangezien Firebird is ontworpen om te werken met korte schrijftransacties, is het belangrijk om ze zo kort mogelijk te houden. FBMonLogger markeert transacties met isolatiemodi en lees-/schrijfinstellingen die de Oldest Active Transaction vasthouden en daardoor buitensporige recordversies niet laten opruimen. Als u een dergelijke transactie ziet en deze enige tijd geleden is gestart, betekent dit dat deze verantwoordelijk kan zijn voor buitensporige recordversies.
Sorteer op de kolom «started at» en zoek naar oude transacties, gemarkeerd in rood: alle schrijfbare transacties en read-only snapshots houden de Oldest Active Transaction vast en zorgen ervoor dat buitensporige recordversies worden vastgehouden. Identificeer waar deze transacties zijn gestart (rechtsklik en selecteer «View parent attachment») en pas uw code aan om deze transactie eerder te committen.
Statements
Het tabblad «Statements» toont statements die actief waren op het moment van de snapshot: als u alle statements wilt vastleggen, moeten FBPerfMon of FBScanner worden gebruikt (al deze tools maken deel uit van IBSurgeon Optimization Pack).
Als «Link to selected attachment» is ingeschakeld, worden alleen statements voor de specifieke attachment getoond, anders staan alle actieve statements in de lijst.
Sommige statements hebben geen bijbehorende transactie-ID (=0): deze queries zijn voorbereid, maar niet uitgevoerd.




