Tato stránka byla strojově přeložena. Přečtěte si anglický originál. English

FBMonLogger je nyní součástí HQbird Standard!

FBMonLogger je nástroj pro analýzu výstupů monitorovacích tabulek ve Firebirdu a pro nalezení problémů s pomalými SQL dotazy, špatně navrženými transakcemi (dlouhoběžící transakce, transakce s nesprávnou úrovní izolace atd.) a identifikaci problémových aplikací.

FBMonLogger se může připojit k databázi Firebird s výkonnostními problémy a zjistit, co je příčinou pomalosti: je to nějaké uživatelské připojení, pomalý SQL dotaz nebo dlouhoběžící transakce?

FBMonLogger podporuje Firebird 2.1, 2.5 a 3.0 - pro starší verze Firebirdu nebo InterBase použijte prosím FBScanner.

FBMonLogger vám může zobrazit:

  • Nejvytíženější připojení s nejvyšším počtem IO operací, neindexovaných a indexovaných čtení
  • Nejvytíženější SQL příkazy s nejvyšším počtem IO operací, neindexovaných a indexovaných čtení
  • Problémové transakce: dlouhoběžící transakce, transakce s chybnou úrovní izolace, čtecí/zapisovací transakce a související informace: kdy začaly, jaké aplikace je spustily, z jaké IP adresy atd.
  • Připojení a příkazy s nejintenzivnější činností garbage collection
  • Poměr čtení/zápis, poměr INSERT/UPDATE/DELETE a další.

Po připojení k databázi, kde chcete najít výkonnostní problémy, by mělo být provedeno několik snímků monitorovacích tabulek - klikněte na «Get Snapshot» pro pořízení snímku.

Agregované výkonnostní statistiky pro uživatelská připojení

FBMonLogger

Na první obrazovce vidíme agregované statistiky pro databázová připojení a můžeme identifikovat připojení s největšími problémy:

Sekvenční čtení / Indexovaná čtení

«Sekvenční čtení / Indexovaná čtení» nám ukazuje celkový poměr mezi sekvenčními (neindexovanými) čteními a indexovanými čteními v aplikaci. Obvykle by počet neindexovaných čtení měl být nízký, takže velké procento sekvenčních čtení je známkou toho, že mnoho SQL dotazů má přirozené (NATURAL) plány provádění, a ty mohou být příčinou pomalé odezvy.

Kliknutí na záznam v «TOP připojení: sekvenční/indexovaná čtení» vás přenese na záložku «Připojení», kde můžete vidět více podrobností o připojení, a poté přejít na záložku «Transakce» nebo «Příkazy», kde uvidíte transakce a příkazy spojené s vybraným připojením (pokud je zaškrtnuto «Propojit s vybraným připojením», jinak se zobrazí všechny transakce/příkazy pro všechna připojení).

Podrobnosti o zápisech

«Podrobnosti o zápisech» vám poskytuje přehled operací zápisu: poměr mezi INSERT/UPDATE/DELETE mezi všemi databázovými připojeními. V tabulce největších zapisovatelů můžete vidět připojení s největším počtem operací zápisu. Je užitečné identifikovat aplikace nebo softwarové moduly, které provádějí nadměrný počet update nebo delete operací (které jsou nejnebezpečnějšími operacemi z hlediska garbage collection).

Podrobnosti o garbage collection

Co znamenají operace garbage collection?

  • Purge - engine odstraňuje zpětné verze, v databázi zůstává pouze primární verze.
  • Expunge - byly odstraněny jak primární verze, tak všechny zpětné verze.
  • Backout - odstranění pouze primární verze (kvůli rollbacku).

Obvykle můžeme spojit purge s operací UPDATE, Expunge s DELETE a Backout s rollbackem INSERT nebo UPDATE. Mnoho backoutů může znamenat problém s řízením transakcí v aplikaci.

Využití paměti

Graf «Využití paměti» nám ukazuje celkovou paměť využívanou všemi aktivními připojeními nyní a špičku alokované paměti pro ně v minulosti.

Seznam největších připojení podle využití paměti nám ukazuje největší konzumenty paměti mezi vašimi připojeními. Je užitečný pro nalezení aplikací nebo softwarových modulů s nadměrným využitím paměti.

Agregované výkonnostní statistiky pro příkazy

FBMonLogger

Na druhé záložce najdete agregované výkonnostní statistiky pro příkazy. Tyto statistiky lépe odrážejí momentální situaci v databázi - protože monitorovací tabulky shromažďují informace od začátku životnosti každého objektu, příkazy, které zde vidíte, jsou ty, které běžely v okamžiku pořízení snímku.

Sekvenční čtení / Indexovaná čtení

V tomto seznamu vidíme nejvytíženější příkazy, které provádějí mnoho sekvenčních čtení z databáze. Obvykle takové příkazy vyžadují ladění SQL - buď prostřednictvím ladění indexů, nebo přepracováním SQL dotazu.

Pro vyladění dotazu zkontrolujte jeho plán provádění: obvykle je možné zlepšit rychlost dotazu odstraněním NATURAL v plánech pomocí nových indexů nebo přepracováním dotazu. Klikněte na příkaz v tomto seznamu pro otevření záložky «Příkazy», kde najdete více podrobností o vybraném příkazu a můžete přejít na související transakci nebo připojení.

Čtení stránek / zápisy stránek

Tento graf a seznam ukazuje stručné informace o nejvytíženějších příkazech, které provádějí mnoho čtení - to znamená, že spotřebovávají významné IO a mohou ovlivnit výkon ostatních dotazů. SQL příkazy se špičkovými hodnotami by měly být pečlivě zkontrolovány z hlediska optimálního výkonu.

Podrobnosti o zápisech pro příkazy

V tomto grafu můžete vidět, co zapisující SQL příkazy dělaly v okamžiku pořízení snímku monitorovacích tabulek, a identifikovat UPDATE a DELETE, které provedly mnoho změn v databázi.

Podrobnosti o garbage collection pro příkazy

V tomto grafu vidíme, kolik operací garbage collection bylo provedeno příkazy běžícími v okamžiku snímku.

Využití paměti pro příkazy

Na rozdíl od agregovaných statistik využití paměti pro připojení, využití paměti příkazů nám může ukázat seznam přesných příkazů, které v daném okamžiku spotřebovávají hodně paměti.

Připojení

FBMonLogger

Třetí záložkou je «Připojení». Tuto záložku můžete otevřít přímo kliknutím na některý ze záznamů v «Agregované výkonnostní statistiky».

Připojení zobrazuje seznam uživatelů připojených k databázi Firebird s mnoha užitečnými podrobnostmi: USER a ROLE připojení, čas spuštění a ID připojení, zda je pro připojení povolen garbage collection, název vzdáleného procesu, který vytvořil připojení, a několik kumulativních výkonnostních čítačů pro připojení: počet sekvenčních čtení [provedených připojením od jeho spuštění], počet indexovaných čtení, počet insertů, update a delete, stejně jako backouty, purges a expunges záznamů.

Ve výchozím nastavení jsou některé sloupce připojení vypnuty, aby se zobrazily pouze nejdůležitější informace.

Samozřejmě, pokaždé když kliknete na připojení, můžete přejít na transakce běžící v něm a poté na příkazy. V levém horním rohu záložek Transakce a Příkazy je zaškrtávací políčko, které řídí toto chování - když je zaškrtnuto, budou zobrazeny pouze transakce a příkazy označené ID vybraného připojení.

Transakce

FBMonLogger

Záložka «Transakce» zobrazuje aktivní transakce v okamžiku pořízení snímku. Pokud je zaškrtnuto «Propojit s vybraným připojením», zobrazí se pouze transakce pro vybrané připojení, jinak se zobrazí všechny transakce.

Jednou z nejdůležitějších charakteristik je životnost transakcí: protože Firebird je navržen pro práci s krátkými zapisovacími transakcemi, je důležité udržovat je co nejkratší. FBMonLogger zvýrazňuje transakce s izolačními režimy a nastavením čtení/zápis, které drží nejstarší aktivní transakci (Oldest Active Transaction), a tím způsobují, že nadměrné verze záznamů nejsou vymazávány. Pokud vidíte takovou transakci a začala před delší dobou, znamená to, že může být zodpovědná za nadměrné verze záznamů.

Seřaďte podle sloupce «started at» a hledejte staré transakce označené červeně: všechny zapisovatelné transakce a read-only snapshoty drží nejstarší aktivní transakci a způsobují zadržování nadměrných verzí záznamů. Identifikujte, kde tyto transakce začaly (klikněte pravým tlačítkem a vyberte «View parent attachment») a opravte svůj kód, aby byla tato transakce potvrzena dříve.

Příkazy

FBMonLogger

Záložka «Příkazy» zobrazuje příkazy aktivní v okamžiku snímku: pokud potřebujete zachytit všechny příkazy, měl by být použit FBPerfMon nebo FBScanner (všechny tyto nástroje jsou součástí IBSurgeon Optimization Pack).

Pokud je zaškrtnuto «Propojit s vybraným připojením», zobrazí se pouze příkazy pro konkrétní připojení, jinak jsou v seznamu všechny aktivní příkazy.

Některé příkazy nemají přidružené ID transakce (=0): tyto dotazy jsou připravené, ale nebyly spuštěny.