602SQL-Úplná dokumentace Index  

Profilování práce SQL serveru

Profilování umožňuje získat odpověď na otázky kolikrát se na serveru prováděla určitá činnost a kolik času tím bylo stráveno. Server může shromažďovat a poskytovat informace o:

Průběh profilování

Profilováním se rozumí průběžné shromažďování informací o práci serveru. Profilování lze libovolně zapínat a vypínat a výsledný profil zachycuje sumární informace získané za ta období, kdy se profilování provádělo. Profilování se řídí buď pomocí zabudovaných SQL procedur serveru nebo pomocí uživatelského rozhraní, které lze otevřít z vývojového prostředí pomocí položky Profilování ve složce Systém/Nástroje.

Profilovat lze buď činnost všech vláken na serveru nebo pouze vybraná vlákna. Množinu profilovaných vláken lze průběžně měnit. Profilování všech vláken současně se zapíná a vypíná buď procedurou _sqp_profile_all nebo zatrhávacím čtvercem Profilovat všechna vlákna. Profilování jednotlivých vláken se zapíná a vypíná buď procedurou _sqp_profile_thread nebo zatrhávacím čtvercem Profilovat v seznamu vláken. Informaci o tom, zda je zapnuto profilování všech vláken, poskytuje funkce Get_server_info zavolaná s parametrem OP_GI_PROFILING_ALL. Informaci o tom, zda pro určité vlákno je separátně zapnuto profilování, lze najít v systémovém informačním dotazu _iv_logged users.

Pro vymazání dosavadního obsahu profilu slouží rutina _sqp_profile_reset nebo tlačítko Vymazat profil.

Pro řízení profilování je třeba mít oprávnění provozního správce databáze. Z tohoto pravidla však existuje jedna výjimka. Pokud profilování bylo již od startu serveru alespoň jednou správcem zapnuto, pak kterékoliv vlákno může zapnout nebo vypnout profilování sebe sama.

Profilování rutin po řádcích

Je-li zapnuto profilování rutin po řádcích, pak profil obsahuje zvláštní záznam pro každý řádek rutiny, na němž se prováděl příkaz SQL. Z profilu lze pak zjistit počet provedení řádku a čas strávený prováděním toho řádku. Řádky jsou číslovány od jedné.

Profilování po řádcích zapíná nebo vypíná rutina _sqp_profile_lines nebo zatrhávací čtverec v okně profileru. Informaci o tom, zda je zapnuto profilování po řádcích, poskytuje funkce Get_server_info zavolaná s parametrem OP_GI_PROFILING_LINES.

Přístup k výsledkům profilování

Výsledky profilování poskytuje odpověď na systémový informační dotaz _iv_profile. Tento dotaz lze používat uvnitř dalších dotazů, které třídí a vybírají z profilu potřebná data. Odpověď na tento dotaz lze zobrazit v gridu pomocí tlačítka Zobrazit globální profil. Grid umožňuje interaktivní třídění a filtrování obsahu odpovědi.

Pokud profilování probíhá, obsah odpovědi se průběžně mění. Je-li odpověď zobrazena v gridu na obrazovce, nový obsah lze získat pomocí příkazu Překreslit grid z menu Data.

Přístup k výsledkům profilování po řádcích v editoru

Výsledek profilování běhu rutin po řádcích je možné zobrazit přímo v editoru otevřeném na testované rutině. Je-li zapnuto profilování po řádcích a rutina již (alespoň jednou) proběhla, lze příkazem Návrh/Zobrazit profil nebo odpovídajícím tlačítkem na liště vykreslit do okna editoru:

Zobrazení profilu pro všechny rutiny, které již byly provedeny (tj. otevření editoru se všemi procedurami, které jsou obsaženy v profilu na záložkách), zajistí tlačítko Zobrazit profily řádek v dialogu Profilování.

Pokud čísla řádek obsažená v profilu mají odpovídat skutečným řádkům v rutinách, není možno profilovanou rutinu editovat - např. vložení řádku by způsobilo, že informace vztahující se k řádkům by byly posunuté, změna hodnoty může zcela změnit dobu provádění. Proto každá editační změna vypne zobrazení profilu a každý překlad rutiny vyvolá vymazání profilu.

Interpretace profilu

Každý řádek profilu poskytuje informace o provádění určité činnosti nebo o přístupu k určitému zdroji. Podrobnosti - viz popis systémového dotazu _iv_profile.

V prvním sloupci je uvedena třída sledované skutečností, dle seznamu výše.

V dalších sloupcích je objekt specifikován číslem a jménem, SQL příkaz je specifikován textem SQL a případně číslem řádku, vlákno (thread) je specifikováno unikátním číslem či jménem, má-li přiděleno funkcí _sqp_set_thread_name.

Další sloupce pak poskytují informace o práci s objektem identifikovaným dosavadními sloupci. Počet přístupů udává počet provedení rutiny nebo SQL příkazu resp. počet čekání na zámek resp. počet klientských požadavků zpracovaných vláknem resp. počet vstupů do kritické sekce.

Další dva sloupce udávají brutto a netto spotřebovaný čas v sekundách. V rutinách a SQL příkazech se tyto dva údaje liší, pokud se v nich volá provádění jiných rutin - netto čas je brutto čas zmenšený o čas strávený v jiných rutinách. Pro vlákna je brutto čas počítán od začátku do konce provádění požadavku, netto čas je snížen o čas čekání na zámky.