PowerShell-Tools zum Parsen, Analysieren und Auswerten von Firebird Trace Logs. Hilft, Performance-Engpässe, Transaktionsketten und ineffiziente SQLs schnell zu identifizieren.
- Firebird Trace Log Parser & Analyzer
Parser für Firebird Trace Logs.
- Liest Textdateien ein
- Wandelt sie in strukturierte PSCustomObjects um
- Extrahiert: Timestamp, User, IP, App, SQL, Execution-Plan
- Berechnet: Duration, Reads, Writes, Fetches
Erweitertes Analysewerkzeug.
- Hashing von SQL und Plänen (SHA256)
- Gruppierung nach: SQL, Plan, Transaktionskette, IP, Prozess
- Aggregationen wie TotalDuration, AvgDuration, TotalWrites u.v.m.
Die Konfigurationsdatei enthält die Firebird-Zugangsdaten und Pfade. Sie wird von trace_start.ps1 und trace_stop.ps1 verwendet.
Einrichtung:
# Kopiere die Vorlage
Copy-Item config.sample.json config.json
# Bearbeite config.json mit deinen WertenStruktur:
{
"Firebird": {
"Username": "SYSDBA",
"Password": "masterkey",
"FirebirdPath": "C:\\Program Files\\Firebird\\Firebird_4_0_3",
"TraceConfigFilename": "fbtrace30.conf"
}
}| Parameter | Beschreibung |
|---|---|
Username |
Firebird Benutzername (meist SYSDBA) |
Password |
Firebird Passwort |
FirebirdPath |
Installationspfad von Firebird (enthält fbtracemgr.exe) |
TraceConfigFilename |
Name der Trace-Konfigurationsdatei |
Hinweis: Die config.json wird durch .gitignore vom Repository ausgeschlossen, um Passwörter zu schützen.
Konfigurationsdatei für den Firebird Trace Manager (fbtracemgr). Steuert, welche Events protokolliert werden.
Typische Einstellungen:
- Aktivierung von SQL-Statements
- Aktivierung von Transaktionen
- Aktivierung von Timeout-Informationen
- Kontrolle, welche Attachments geloggt werden
Startet eine Trace-Session mit dem Firebird-Tool fbtracemgr.
Funktionsweise:
- Lädt Konfiguration aus
config.json - Startet
fbtracemgr.exemit der Trace-Konfiguration ausfbtrace30.conf - Schreibt die Ausgabe in eine Logdatei mit Zeitstempel (z.B.
E:\trace_output_20251125_143000.log)
Verwendung:
.\trace_start.ps1Ausgabe:
Config Pfad: D:\Scripts\config.json
20251125_143000
Bitte ermittle die Trace ID aus dem Kopf der Log Datei unter E:\trace_output_20251125_143000.log
Trace gestartet, Ausgabe in E:\trace_output_20251125_143000.log
Trace stoppen mit D:\Scripts\trace_stop.ps1
Beendet eine laufende Trace-Session.
Funktionsweise:
- Lädt Konfiguration aus
config.json - Sucht automatisch die neueste Logdatei in
E:\ - Extrahiert die Trace-ID aus der ersten Zeile der Logdatei
- Stoppt die Trace-Session mit
fbtracemgr.exe
Verwendung:
.\trace_stop.ps1Ausgabe:
Config Pfad: D:\Scripts\config.json
Datei: E:\trace_output_20251125_143000.log
Trace-ID: 42
Stoppe Trace...
# Konfiguration vorbereiten (einmalig)
Copy-Item config.sample.json config.json
# config.json bearbeiten mit korrekten Pfaden und Passwort
# Trace starten
.\trace_start.ps1Führe nun die Aktionen aus, die du analysieren möchtest.
# Trace stoppen
.\trace_stop.ps1$erg = .\Show-TraceStructure.ps1 -Path "E:\trace_output_20251125_143000.log"Optional mit Debug-Infos:
$erg = .\Show-TraceStructure.ps1 -Path "E:\trace_output_20251125_143000.log" -EnableDebugTop 10 langsamste Einzelabfragen:
$erg |
Sort-Object DurationMs -Descending |
Select-Object -First 10 |
Format-Table Timestamp, DurationMs, SqlStatement -AutoSize$sqlStats = $erg | .\Get-FbTraceAnalysis.ps1 -GroupBy SqlHashBeispielauswertung:
$sqlStats |
Select-Object -First 10 |
Format-Table Count, TotalDurationMs, AvgDurationMs, TotalFetches, FirstSqlStatement -Wrap$sqlStats |
Where-Object { $_.FirstSqlStatement } |
Sort-Object -Property @{E = { $_.Count * $_.AvgDurationMs }} -Descending |
Select-Object -First 100 -Property `
@{N="TotalImpactMs";E={ $_.Count * $_.AvgDurationMs }},
Count, AvgDurationMs,
@{N="SQL";E={ $_.FirstSqlStatement.Substring(0, [Math]::Min(100, $_.FirstSqlStatement.Length)) }} |
Out-GridView -Title "High Impact Queries"$chainStats = $erg | .\Get-FbTraceAnalysis.ps1 -GroupBy RootTxIDKostenintensivste Transaktionen:
$expensiveChains =
$chainStats |
Sort-Object TotalWrites -Descending |
Select-Object -First 10
$expensiveChains | Format-Table RootTxID, TotalWrites, TotalDurationMs, UniqueSqlCount, FirstUser -AutoSizeAdress-Statistik (Wer verbindet sich?)
$erg | .\Get-FbTraceAnalysis.ps1 -GroupBy AdrSummary | Format-Table -AutoSizeProzess-Statistik (Welche App macht was?)
$erg | .\Get-FbTraceAnalysis.ps1 -GroupBy ProcessSummary | Format-Table -AutoSize$sqlStats |
Where-Object { $_.FirstSqlStatement } |
Sort-Object -Property @{E = { $_.Count * $_.AvgDurationMs }} -Descending |
Select-Object -First 500 -Property `
@{N="Impact";E={ $_.Count * $_.AvgDurationMs }},
Count, AvgDurationMs, TotalWrites, FirstSqlStatement |
Export-Excel -Path "Trace_Analysis_Report.xlsx" -WorksheetName "HighImpactSQL" -AutoSize -AutoFilterFirebirdTraceAnalyzer/
├── Show-TraceStructure.ps1 # Parser für Trace Logs
├── Get-FbTraceAnalysis.ps1 # Analyse-Tool
├── trace_start.ps1 # Startet Trace-Session
├── trace_stop.ps1 # Stoppt Trace-Session
├── fbtrace30.conf # Trace-Konfiguration für Firebird
├── config.json # Zugangsdaten (git-ignoriert)
├── config.sample.json # Konfigurationsvorlage
└── .gitignore # Schützt config.json und Logs
- PowerShell 5.1 oder neuer
- Firebird Installation mit
fbtracemgr.exe - Zugriff auf die Firebird-Datenbank (SYSDBA oder entsprechende Rechte)
- Optional: ImportExcel PowerShell-Modul für Excel-Export