[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    m.E. hilft nur beide Jobs mit Database Monitor (STRDBG ist nicht ausreichend) aufzuzeichnen und analysieren. Aber Achtung DBMON generiert einen Wust an Datensätzen, d.h. man sollte gezielt auswählen und nur kurzzeitig aufzeichnen, sonst kann man sich leicht die Platte vollschreiben.

    Das erste, das man feststellen muss ist, wieviel Zeit tatsächlich für SQL verwendet wurde. Wenn die SQL-Statements tatsächlich identisch sind und wenn in beiden Fällen dynamisches SQL verwendet wurde (iSeries Navigator ist auf alle Fälle ein dynamisches Interface), müsste die reine SQL-Zeit identisch sein.

    Mit Hilfe des folgenden SQL-Scripts kann zum einen die Gesamt-Zeit für SQL pro Job und zum anderen die Zeit für die einzelnen SQL-Statements aus der DBMON-Aufzeichnung ermittelt werden:
    PHP-Code:
    CREATE ALIAS MySchema/MyDbgMon 
    FOR MyDBMonLib/QZG0000605

    -- 
    Gesamt-Ausführungszeit pro Job für SQL 
    with x 
    as (select QQJNUM as JobNr,
                      
    cast(sum(qqi6)/1000000 as Dec(60)) as ExcSQLSec
                      
    cast(mod(sum(qqi6), 1000000) as Dec(60)) as ExcSQLMs
                  from MyDbgMon
                  where     QQRID
    =1000 and QQC21 <> 'MT'
                  
    group by QQJNUM)
    Select JobNr,
           
    Digits(Dec(Truncate(ExcSQLSec 36000), 2)) concat ':' concat
           Digits
    (Dec(Truncate(Mod(ExcSQLSec 6060), 0), 2)) concat ':' concat
           Digits
    (Dec(Truncate(Mod(Mod(ExcSQLSec 3600), 60), 0), 2)) concat ' - ' concat
           Digits
    (ExcSQLMs) as "SQLZeit"
       
    from x;

    -- 
    Ausführungszeit pro SQL-Statement
    SELECT qqi6 
    "Total Time"qqjnumqqjobqquserqq1000 
       FROM MyDbgMon
       WHERE qqrid
    =1000 AND qqc21 <> 'MT'
       
    ORDER BY qqi6 DESC
    Vielleicht kommst Du dadurch zu neuen Erkenntnissen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    dass ich das noch erleben durfte, ich muss doch mal eine Lanze für den OOps Nerv brechen, die Empfehlung DBMON ist goldrichtig, bei ODBC muss man nur drauf achten, dass man selbigen für alle Jobs startet (damit er vor dem connect aktiv ist), detailliert, versteht sich - die Auswertung der Daten, das ist dann das einzige, für das Ooops Nerv taugt (vor Auswertung importieren aus Datei).

    mfg

    Dieter Bender

    Zitat Zitat von B.Hauser
    Hallo,

    m.E. hilft nur beide Jobs mit Database Monitor (STRDBG ist nicht ausreichend) aufzuzeichnen und analysieren. Aber Achtung DBMON generiert einen Wust an Datensätzen, d.h. man sollte gezielt auswählen und nur kurzzeitig aufzeichnen, sonst kann man sich leicht die Platte vollschreiben.

    Das erste, das man feststellen muss ist, wieviel Zeit tatsächlich für SQL verwendet wurde. Wenn die SQL-Statements tatsächlich identisch sind und wenn in beiden Fällen dynamisches SQL verwendet wurde (iSeries Navigator ist auf alle Fälle ein dynamisches Interface), müsste die reine SQL-Zeit identisch sein.

    Mit Hilfe des folgenden SQL-Scripts kann zum einen die Gesamt-Zeit für SQL pro Job und zum anderen die Zeit für die einzelnen SQL-Statements aus der DBMON-Aufzeichnung ermittelt werden:
    PHP-Code:
    CREATE ALIAS MySchema/MyDbgMon 
    FOR MyDBMonLib/QZG0000605

    -- 
    Gesamt-Ausführungszeit pro Job für SQL 
    with x 
    as (select QQJNUM as JobNr,
                      
    cast(sum(qqi6)/1000000 as Dec(60)) as ExcSQLSec
                      
    cast(mod(sum(qqi6), 1000000) as Dec(60)) as ExcSQLMs
                  from MyDbgMon
                  where     QQRID
    =1000 and QQC21 <> 'MT'
                  
    group by QQJNUM)
    Select JobNr,
           
    Digits(Dec(Truncate(ExcSQLSec 36000), 2)) concat ':' concat
           Digits
    (Dec(Truncate(Mod(ExcSQLSec 6060), 0), 2)) concat ':' concat
           Digits
    (Dec(Truncate(Mod(Mod(ExcSQLSec 3600), 60), 0), 2)) concat ' - ' concat
           Digits
    (ExcSQLMs) as "SQLZeit"
       
    from x;

    -- 
    Ausführungszeit pro SQL-Statement
    SELECT qqi6 
    "Total Time"qqjnumqqjobqquserqq1000 
       FROM MyDbgMon
       WHERE qqrid
    =1000 AND qqc21 <> 'MT'
       
    ORDER BY qqi6 DESC
    Vielleicht kommst Du dadurch zu neuen Erkenntnissen.

    Birgitta
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. SQL Sensitiver Cursor Probleme
    By Rincewind in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-12-06, 13:58
  2. MS Access ODBC mit JOIN: SQL FEHLER666
    By olafu in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-10-06, 08:13
  3. Probleme mit SQL
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 26-09-06, 14:51
  4. SQL Performance
    By mariupol1963 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 11-08-06, 13:06
  5. embedded SQL Performance Problem mit SCROLL
    By itec01 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 16-09-04, 18:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •